;-------------------------------------------------------------------------------
[MegaTune]
   MTversion    = 2.25 ; MegaTune itself; needs to match exec version.

   queryCommand = "S"                                ; data format
   signature    = "MSnS-extra format 029q *********" ; gets changed when data format/this file changes
   versionInfo  = "T"                                ; full text of this revision

;  last edited for version 029q and MT2.25 (release)
;-------------------------------------------------------------------------------

[Constants]
   ;    msValue   = userValue / scale - translate
   ;    userValue = (msValue + translate) * scale
   endianness      = big

#unset MEMPAGES     ; set to enable all 13 pages for full debugging
#set LOGPAGES     ; set to enable 11 pages for trigger/tooth logging

#if MEMPAGES
;only use the 13 page version if you are a code developer and want to see the contents of ram
;Be sure not to let Megatune do a Chunk write command because the firmware does not correctly
;support 256 byte page writes (even though it ignores all the bytes on those pages)
   nPages          = 13
   burnCommand     = "B"
   pageSize        = 189,       189,       189,       189,       189,       189,       189,       189,       189,       189,     189,	256,	256
   pageActivate    = "P\001",   "P\002",   "P\003",   "P\000",   "P\004",   "P\005",   "P\006",   "P\007",   "P\010",   "P\360", "P\361", "P\362", "P\363"
   pageReadCommand = "V",       "V",       "V",       "V",       "V",       "V",       "V",       "V",       "V",       "V",     "V",	"V",	"V"
   pageValueWrite  = "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "",      "",	"",	""
   pageChunkWrite  = "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "",      "",	"",	""
#elif LOGPAGES
   nPages          = 11
   burnCommand     = "B"
   pageSize        = 189,       189,       189,       189,       189,       189,       189,       189,       189,       189,     189
   pageActivate    = "P\001",   "P\002",   "P\003",   "P\000",   "P\004",   "P\005",   "P\006",   "P\007",   "P\010",   "P\360", "P\361"
   pageReadCommand = "V",       "V",       "V",       "V",       "V",       "V",       "V",       "V",       "V",       "V",     "V"
   pageValueWrite  = "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "",      ""
   pageChunkWrite  = "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "",      ""
#else
   nPages          = 9
   burnCommand     = "B"
   pageSize        = 189,       189,       189,       189,       189,       189,       189,       189,       189
   pageActivate    = "P\001",   "P\002",   "P\003",   "P\000",   "P\004",   "P\005",   "P\006",   "P\007",   "P\010"
   pageReadCommand = "V",       "V",       "V",       "V",       "V",       "V",       "V",       "V",       "V"
   pageValueWrite  = "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v",   "W%o%v"
   pageChunkWrite  = "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v", "X%o%c%v"
#endif

; Pages 10 & 11 are special read only pages that can be used to view realtime logged data
; of inter-tooth or inter-trigger times. Primarily for code devel or checking your trigger
; wheel is giving normal pulses.
;At present you can only access this data by using the Table Editor and viewing the data directly
;Page 10 contains the time between each tooth in the generic (missing and/or 2nd trig) and Neon
;Page 11 contains the time between "triggers" and will work for all ignition types
;93 big endian 16bit numbers are returned. The 188th byte is the address of the _next_ byte to
;be written. The code logs continuously once the page is selected so you need to start from the
;next byte and wrap around to the beginning to get the data in the right order
;The 189th byte indicates the time units. 0 = microseconds, 1= 0.1ms units
;After you've selected the page, pause a little then hit Fetch, you'll get 93 new samples.
;Then somehow get them into a spreadsheet and plot a graph.
;i.e. if the data is (decimal) 52, 45, ....
; convert those two numbers -> (52*256) + 45
;page 12 = RAM bytes $0000 to $00FF ($0000 to $003f return zeros)
;page 13 = RAM bytes $0100 to $01FF

;comms settings - you may need to tweak these for USB serial
;e.g. put writeblocks off and add an interwrite delay
   pageActivationDelay = 50
   writeBlocks = on
   interWriteDelay = 0
;end USB settings

   ;  name       = bits,   type, offset, bits
   ;  name       = array,  type, offset, shape, units,     scale, translate,    lo,      hi, digits
   ;  name       = scalar, type, offset,        units,     scale, translate,    lo,      hi, digits

   page = 1
      veBins1    = array,  U08,       0, [12x12], "%",       1.0,       0.0,   0.0,   255.0,      0
      rpmBins1   = array,  U08,     158, [  12], "RPM",    100.0,       0.0,   100,   25500,      0

 #if SPEED_DENSITY
    #if MPXH6300A
      mapBins1   = array,  U08,     170, [ 12],  "kPa",  1.213675,     1.53,  20.0,  304.0,     0
    #elif MPXH6400A
      mapBins1   = array,  U08,     170, [ 12],  "kPa",  1.6197783,   2.147,  20.0,  400.0,     0
    #else
      mapBins1   = array,  U08,     170, [  12], "kPa",     1.0,        0.0,   0.0,  255.0,      0
    #endif

 #elif AIR_FLOW_METER
      afmBins1   = array, U08,      170, [ 12], "AFM Volts",    0.01961, 0.0,  0.0,  5.0, 2

 #elif ALPHA_N
      tpsBins1   = array,  U08,     170, [  12], "TPS",     1.0,      0.0,   0.0,   255.0,      0
 #endif


#if CELSIUS
      egoTemp1   = scalar, U08,     144,         "C",     0.555,       -72,   -40,   102.0,      0
#else
      egoTemp1   = scalar, U08,     144,         "F",       1.0,       -40,   -40,   215.0,      0
#endif
      egoCount1  = scalar, U08,     145,        "",          1.0,       0.0,   0.0,   255.0,      0
      egoDelta1  = scalar, U08,     146,        "%",         1.0,       0.0,   0.0,   255.0,      0
      egoLimit1  = scalar, U08,     147,        "%",         1.0,       0.0,   0.0,   255.0,      0
      reqFuel1   = scalar, U08,     148,        "ms",        0.1,       0.0,   0.0,    25.5,      1
      divider1   = scalar, U08,     149,        "",          1.0,       0.0
      alternate1 = bits,   U08,     150, [0:0], "Simultaneous", "Alternating"
      injOpen1   = scalar, U08,     151,        "ms",        0.1,       0.0,   0.1,    25.5,      1
      injPwmP1   = scalar, U08,     153,        "%",         1.0,       0.0,   0.0,   100.0,      0
      injPwmT1   = scalar, U08,     154,        "ms",        0.1,       0.0,   0.0,    25.5,      1
      battFac1   = scalar, U08,     155,        "ms/v",0.0166667,       0.0,   0.0,     1.0,      2
      rpmk1      = scalar, U16,     156,        "",          1.0,       0.0

      ; Config1
      mapType1   = bits,   U08,     182, [0:1], "115 kPa", "250 kPa", "300 kPa", "400 kPa"
      mapSensor1 = bits,   U08,     182, [0:0]
      twoStroke1 = bits,   U08,     182, [2:2], "Four-stroke", "Two-stroke"
;;      injType1   = bits,   U08,     182, [3:3], "Port", "Throttle Body"
      nCylinders1= bits,   U08,     182, [4:7+1]
      ; Config3
      cltType1   = bits,   U08,     183, [0:1], "GM", "Unknown1", "Unknown2", "Unknown3"
      matType1   = bits,   U08,     183, [2:3], "GM", "Unknown1", "Unknown2", "Unknown3"
      nInjectors1= bits,   U08,     183, [4:7+1]
      ; Config3
      engineType1= bits,   U08,     184, [0:0], "Even fire",     "Odd fire"
      egoType1   = bits,   U08,     184, [1:1], "Narrow band",   "Wide band"
      algorithm1 = bits,   U08,     184, [2:2], "Speed Density", "Alpha-N"
      baroCorr1  = bits,   U08,     184, [3:3], "Off",           "On"

      egoRPM1    = scalar, U08,     185,        "RPM",     100.0,       0.0,   100,   25500,      0
#if CELSIUS
      fastIdleT1 = scalar, U08,     186,        "C",      0.555,     -72.0,   -40,     102,      1
#else
      fastIdleT1 = scalar, U08,     186,        "F",        1.0,     -40.0,   -40,     215,      1
#endif
      egoSwitch1 = scalar, U08,     187,        "v",      0.0196,       0.0,   0.0,     5.0,      3
      egoIgnCount= bits,   U08,     188,  [0:0], "mSec",  "Ign Pulses*^"

   page = 2
      veBins2    = array,  U08,       0, [12x12], "%",       1.0,      0.0,   0.0,   255.0,      0
      rpmBins2   = array,  U08,     158, [  12], "RPM",    100.0,      0.0,   100,   25000,      0

#if SPEED_DENSITY
 #if MPXH6300A
      mapBins2   = array,  U08,     170, [ 12],  "kPa",  1.213675,  1.53,  20.0,  304.0,     0
 #elif MPXH6400A
      mapBins2   = array,  U08,     170, [ 12],  "kPa",  1.6197783,   2.147,  20.0,  400.0,     0
 #else
      mapBins2   = array,  U08,     170, [ 12], "kPa",     1.0,      0.0,   0.0,   255.0,      0
 #endif

 #elif AIR_FLOW_METER
      afmBins2   = array, U08,      170, [12], "Volts",    0.01961, 0.0,  0.0,  5.0, 2


 #elif ALPHA_N
      tpsBins2   = array,  U08,     170, [ 12], "TPS",        1.0,      0.0,   0.0,   255.0,      0
 #endif


#if CELSIUS
      egoTemp2   = scalar, U08,     144,         "C",     0.555,       -72,   -40,   102.0,      0
#else
      egoTemp2   = scalar, U08,     144,         "F",       1.0,       -40,   -40,   215.0,      0
#endif

      egoDelta2  = scalar, U08,     146,        "%",         1.0,       0.0,   0.0,   255.0,      0
      egoLimit2  = scalar, U08,     147,        "%",         1.0,       0.0,   0.0,   255.0,      0
      reqFuel2   = scalar, U08,     148,        "ms",        0.1,       0.0,   0.0,    25.5,      1
      divider2   = scalar, U08,     149,        "",          1.0,       0.0
      alternate2 = bits,   U08,     150, [0:0], "Simultaneous", "Alternating"
      injOpen2   = scalar, U08,     151,        "ms",        0.1,       0.0,   0.1,    25.5,      1
      injPwmP2   = scalar, U08,     153,        "%",         1.0,       0.0,   0.0,   100.0,      0
      injPwmT2   = scalar, U08,     154,        "ms",        0.1,       0.0,   0.0,    25.5,      1
      battFac2   = scalar, U08,     155,        "ms/v",0.0166667,       0.0,   0.0,     1.0,      2
      rpmk2      = scalar, U16,     156,        "",          1.0,       0.0

      ; Config1
      mapType2   = bits,   U08,     182, [0:1], "115 kPa", "250 kPa", "300 kPa", "400 kPa"
      twoStroke2 = bits,   U08,     182, [2:2], "Four-stroke", "Two-stroke"
;;      injType2   = bits,   U08,     182, [3:3], "Port", "Throttle Body"
      nCylinders2= bits,   U08,     182, [4:7+1]
      ; Config3
      cltType2   = bits,   U08,     183, [0:1], "GM", "Unknown1", "Unknown2", "Unknown3"
      matType2   = bits,   U08,     183, [2:3], "GM", "Unknown1", "Unknown2", "Unknown3"
      nInjectors2= bits,   U08,     183, [4:7+1]
      ; Config3
      engineType2= bits,   U08,     184, [0:0], "Even fire",     "Odd fire"
      egoType2   = bits,   U08,     184, [1:1], "Narrow band",   "Wide band"
      algorithm2 = bits,   U08,     184, [2:2], "Speed Density", "Alpha-N"
      baroCorr2  = bits,   U08,     184, [3:3], "Off",           "On"

      primePulse2= scalar, U08,     185,        "ms",        0.1,       0.0,   0.0,    25.5,      1
      egoRPM2    = scalar, U08,     185,        "RPM",     100.0,       0.0,   100,   25500,      0
#if CELSIUS
       fastIdleT2 = scalar, U08,     186,        "C",      0.555,     -72.0,   -40,     102,      1
#else
       fastIdleT2 = scalar, U08,     186,        "F",        1.0,     -40.0,   -40,     215,      1
#endif
      egoSwitch2 = scalar, U08,     187,        "v",      0.0196,       0.0,   0.0,     5.0,      3

;      taeColdM2  = scalar, U08,     188,        "%",         1.0,       0.0,   0.0,   250.0,      0
;      egoCount2  = scalar, U08,     190,        "",          1.0,       0.0,   0.0,   255.0,      0
; SECOND O2 SETTINGS
      TwoLambda    = bits, U08,     188[0:0], "None*^(DT)", "Fitted (DT only)"

   page = 3
      advTable1  = array,  U08,       0,[12x12], "deg",   0.352,   -28.4,   -10.0,    80.0,      0
      rpmBins3   = array,  U08,     144,[   12], "RPM",   100.0,     0.0,   100,   25500,      0

#if SPEED_DENSITY
 #if MPXH6300A
      mapBins3   = array,  U08,     156, [ 12],  "kPa",  1.213675,  1.53,  20.0,  304.0,    0
 #elif MPXH6400A
      mapBins3   = array,  U08,     156, [ 12],  "kPa",  1.6197783,   2.147,  20.0,  400.0,     0
 #else
      mapBins3   = array,  U08,     156,[   12], "kPa",     1.0,     0.0,   0.0,   255.0,      0
 #endif
 #elif AIR_FLOW_METER
      afmBins3   = array, U08,      156, [12], "AFM Volts",    0.01961, 0.0,  0.0,  5.0, 2

 #elif ALPHA_N
      tpsBins3   = array,  U08,     156, [  12], "TPS",        1.0,      0.0,   0.0,   255.0,      0
 #endif

      TrigAng    = scalar, U08,    168,      "Deg",        0.352,     0,  0, 90,  0
      FixAng     = scalar, U08,    169,      "Deg",        0.352, -28.4,  -10, 80,  0
      Trim       = scalar, S08,    170,      "Deg",        0.352,     0,  -45, 45,  0
      CrankAng   = scalar, U08,    171,      "Deg",        0.352, -28.4, -10, 80,  0
      IgHold     = scalar, U08,    172,      "",            1,        0,  0, 100, 0
      Trig_plus  = bits,   U08,    173[0:1], "0", "+22.5", "INVALID", "+45"
      TrigCrank  = bits,   U08,    173[2:2], "Trigger Return", "Time Based"
      IgInv      = bits,   U08,    173[3:3], "No", "Yes"
      oddfire    = bits,   U08,    173[4:4], "No", "Yes"
      IdleAdv    = scalar, U08,    174,      "Deg",        0.352,-28.4,  -10, 80,  0
      IdleAdvTPS = scalar, U08,    175,      "ADC",        1, 0, 0, 255, 0
      IdleAdvRPM = scalar, U08,    176,      "RPM",        100, 0, 0, 1200, 0
   #if CELSIUS
      IdleAdvCLT = scalar, U08,    177, "C",     0.555, -72, -40, 102, 1
   #else
      IdleAdvCLT = scalar, U08,    177, "F",     1,  -40,  -40,  215, 0
   #endif
      IdleDelayTime = scalar, U08, 178, "sec",     1,    0,    0,  5, 0
      StgCycles =     scalar, U08, 179, "cycles",  1,    0,    0,  255, 0
  #if MPXH6300A
       Stg2ndParmKPA   = scalar,  U08, 180, "KPa",  1.213675,  1.53, 0, 304.0, 0
       Stg2ndParmDlt = scalar,  U08, 181, "KPa",  1.213675,  1.53, 0, 304.0, 0
  #elif MPXH6400A
       Stg2ndParmKPA   = scalar,  U08, 180,  "KPa",   1.6197783,   2.147,  20.0,  400.0,  0
       Stg2ndParmDlt = scalar,  U08, 181, "KPa",    1.6197783,   2.147,  20.0, 400.0, 0
  #else
      Stg2ndParmKPA = scalar, U08,    180,   "kPa",    1, 0, 0, 255, 0
      Stg2ndParmDlt = scalar, U08, 181, "kPa", 1,0,0,255,0
  #endif
      spare3_182 = scalar, U08,    182,      "",           1, 0, 0, 255, 0
      spare3_183 = scalar, U08,    183,      "",           1, 0, 0, 255, 0
      spare3_184 = scalar, U08,    184,      "",           1, 0, 0, 255, 0

   page = 4
      msnsCyl       = bits,   U08,    0,  [0:0], "Off*", "MSnS^"
      neonCrank     = bits,   U08,    0,  [1:1], "Off*^", "Neon/420A"
      wheelon       = bits,   U08,    0,  [2:2], "Off*^", "Generic wheel"
      onetwo        = bits,   U08,    0,  [3:3], "-1", "-2"
      edis          = bits,   U08,    0,  [4:5], "Off*^", "EDIS", "INVALID", "dual EDIS"
      tfi           = bits,   U08,    0,  [6:6], "Off*^", "Ford TFI"
      hei7          = bits,   U08,    0,  [7:7], "Off*^", "GM 7pin HEI"

; used to capture all ignition modes, for menu selection
      ignmode       = scalar, U08,    0,  "", 1, 0, 0, 255,0

      fidleUse      = bits,   U08,    1,  [0:0], "Idle control*", "Spark output A"
      led17Use      = bits,   U08,    1,  [1:1], "Squirt*^", "Spark output A"
      led18Use      = bits,   U08,    1,  [2:3], "Warmup*^", "IRQ trigger", "Output4","Spark output C"
      led18_2Use    = bits,   U08,    1,  [3:3]
      led19Use      = bits,   U08,    1,  [4:4], "Acceleration*^", "Spark output B"
      x2use         = bits,   U08,    1,  [5:5], "Water inj", "Fan control"
;bit 6 is led18/fan control
      toy_dli       = bits,   U08,    1,  [7:7], "Normal*", "Toyota DLI muliplex"

;spark outputs E & F
      spkeop        = bits,   U08,  116,  [3:3], "Shiftlight", "Spark output E"
      spkfop        = bits,   U08,  116,  [4:4], "Knock input", "Spark output F"

      SoftRevLim    = scalar, U08,    2,  "rpm", 100.0,  0.0, 100, 25500, 0
      SoftLimRetard = scalar, U08,    3,  "deg", 0.352, -28.4, -10,   80,   0
      SoftLimMax    = scalar, U08,    4,  "s",   0.1,  0.0, 0.0,  25.5,   1
;      "MSnS Soft limit cool time (s)",      5,    0.1,  0.0, 0.0,  25.5  NOT USED
      HardRevLim    = scalar, U08,    6,  "rpm",  100,  0.0, 100, 25500,  0
      out1lim       = scalar, U08,    7,  "raw byte or deg F +40",    1,    0,   0,   255,  0
      out1src       = bits,   U08,    8,  [0:4], "Off*", "INVALID", "INVALID", "INVALID", "MAP", "MAT", "CLT", "TPS", "BATT", "EGO", "egocorr", "AirCorr", "WarmCorr", "RPM", "PW1", "TPSAccel", "BaroCorr", "GammaE","VECurr1", "PW2","VECurr2", "IdleDC","CTimeH", "CTimeL","SparkAngle", "AFRTarget","X7ADC", "X6ADC","CltIATAngle", "KnockAngle","EggoCorr2", "Traction Active"
      out2lim       = scalar, U08,    9,  "raw byte or deg F +40",    1,    0,   0,   255,  0
      out2src       = bits,   U08,    10,  [0:4], "Off*", "INVALID", "INVALID", "INVALID", "MAP", "MAT", "CLT", "TPS", "BATT", "EGO", "egocorr", "AirCorr", "WarmCorr", "RPM", "PW1", "TPSAccel", "BaroCorr", "GammaE","VECurr1", "PW2","VECurr2", "IdleDC","CTimeH", "CTimeL","SparkAngle", "AFRTarget","X7ADC", "X6ADC","CltIATAngle", "KnockAngle","EggoCorr2", "Traction Active"
      out1Hysis     = scalar, U08,    126,  "raw byte or deg F", 1, 0, 0, 255, 0
      out2Hysis     = scalar, U08,    127,  "raw byte or deg F", 1, 0, 0, 255, 0

      out3lim       = scalar, U08,    133,  "raw byte or deg F +40",    1,    0,   0,   255,  0
      out3src       = bits,   U08,    132,  [0:4], "Off*", "INVALID", "DECEL", "ACCEL", "MAP", "MAT", "CLT", "TPS", "BATT", "EGO", "egocorr", "AirCorr", "WarmCorr", "RPM", "PW1", "TPSAccel", "BaroCorr", "GammaE","VECurr1", "PW2","VECurr2", "IdleDC","CTimeH", "CTimeL","SparkAngle", "AFRTarget","X7ADC", "X6ADC","CltIATAngle", "KnockAngle","EggoCorr2", "Traction Active"
      out3Timer     = scalar, U08,    134,  "Sec",  0.1, 0, 0, 25.5,  1
      Out3_Out1     = bits,   U08,    116[7:7], "Source", "output1+Source"

      out4lim       = scalar, U08,    139,  "raw byte or deg F +40",    1,    0,   0,   255,  0
      out4src       = bits,   U08,    138,  [0:4], "Off*", "INVALID", "DECEL", "ACCEL", "MAP", "MAT", "CLT","TPS", "BATT", "EGO", "egocorr", "AirCorr", "WarmCorr", "RPM", "PW1", "TPSAccel", "BaroCorr", "GammaE","VECurr1", "PW2","VECurr2", "IdleDC","CTimeH", "CTimeL","SparkAngle", "AFRTarget","X7ADC", "X6ADC","CltIATAngle", "KnockAngle","EggoCorr2", "Traction Active"
      out4FAN       = bits, U08,      1, [6:6], "Source", "Fan Control"

      wd_2trig      = bits,   U08,   11,  [0:0], "Off", "2nd trigger"

      whlsim        = bits,   U08,   11,  [2:2], "off",  "on"
      taeIgnCount   = bits,   U08,   11,  [3:3], "Sec*^", "Cycles"
      rotaryFDign   = bits,   U08,   11,  [4:4], "FC Trailing",  "FD Trailing"
      hybridAN      = bits,   U08,   11,  [5:5], "Off*^", "On"
      inj2cr        = bits,   U08,    11,  [6:6], "Off",  "On*^"

      boostUse      = bits,   U08,   12,  [0:0], "Output1*^", "Boost Control"
      shiftUse      = bits,   U08,   12,  [1:1], "Off*^", "On"
      launchUse     = bits,   U08,   12,  [2:2], "Off*^", "On"
        out3sparkd    = bits,   U08,   12,  [4:4], "Output3", "Spark output D"
        dwellduty50       = bits,   U08,   12,  [5:6], "75% duty cycle*^", "minimal for HEI4", "50% duty cycle", "INVALID"

      whlsimcnt     = scalar, U08,   13,   "",      1.0,     0.0,    1,   6,    0

      freqDiv       = bits,   U08,   14,  [0:2], "INVALID","39.0 Hz","19.5 Hz","13.0 Hz","9.8 Hz","7.8 Hz","6.5 Hz","5.6 Hz"
      bcUpdateRate  = scalar, U08,   15,   "ms",      1.0,     0.0,    10,   255,    0
      pGain         = scalar, U08,   16,    "%",      0.3922,     0.0,     0,   100,    1
      dGain         = scalar, U08,   17,    "%",      0.3922,     0.0,     0,   100,    1
      ShiftLower    = scalar, U08,   18,   "rpm",   100.0,     0.0,   100,  25500,   0
      ShiftUpper    = scalar, U08,   19,   "rpm",   100.0,     0.0,   100,  25500,   0
      LaunchLim     = scalar, U08,   20,   "rpm",   100.0,     0.0,   100,  25500,   0
      edismultirpm  = scalar, U08,   21,   "rpm",   100.0,     0.0,   100,   2500,   0
      BoostDir      = bits,   U08,   92,  [6:6], "Increase boost", "Decrease Boost"
      inj1g         = bits,   U08,    33,  [5:5], "off", "on*^"
      inj2t         = bits,   U08,    33,  [4:4], "1*^", "2 (DT)"
      inj2g         = bits,   U08,    33,  [6:6], "off", "on*^"
      trig2fall     = bits,   U08,    33,  [0:0], "rising", "falling (like IRQ)"

#if MPXH6300A
      KPaTarg10     = scalar, U08,   29,  "KPa",  1.213675,  1.53, 100, 304.0, 0
      KPaTarg40     = scalar, U08,   30,  "KPa",  1.213675,  1.53, 100, 304.0, 0
      KPaTarg60     = scalar, U08,   31,  "KPa",  1.213675,  1.53, 100, 304.0, 0
      KPaTarg100    = scalar, U08,   32,  "KPa",  1.213675,  1.53, 100, 304.0, 0
#elif MPXH6400A
      KPaTarg10     = scalar, U08,   29,  "KPa",   1.6197783,   2.147,  20.0,  400.0,     0
      KPaTarg40     = scalar, U08,   30,  "KPa",   1.6197783,   2.147,  20.0,  400.0,     0
      KPaTarg60     = scalar, U08,   31,  "KPa",   1.6197783,   2.147,  20.0,  400.0,     0
      KPaTarg100    = scalar, U08,   32,  "KPa",   1.6197783,   2.147,  20.0,  400.0,     0
#else
      KPaTarg10     = scalar, U08,   29,  "KPa",  1, 0,  100, 255, 0
      KPaTarg40     = scalar, U08,   30,  "KPa",  1, 0,  100, 255, 0
      KPaTarg60     = scalar, U08,   31,  "KPa",  1, 0,  100, 255, 0
      KPaTarg100    = scalar, U08,   32,  "KPa",  1, 0,  100, 255, 0
#endif

      TPSRPMTarg    = bits, U08,   92, [7:7],   "TPS", "RPM"
      TargetB1      = scalar, U08,   25,  "Raw Value", 1, 0, 0, 255, 0
      TargetB2      = scalar, U08,   26,  "Raw Value", 1, 0, 0, 255, 0
      TargetB3      = scalar, U08,   27,  "Raw Value", 1, 0, 0, 255, 0
      TargetB4      = scalar, U08,   28,  "Raw Value", 1, 0, 0, 255, 0

; Added for Enhanced stuff

; Target AFR 8 x 8 table
        AfrTar        = bits,   U08,    46,[7:7], "Off*^(DT)", "On"
        AfrTar2       = bits,   U08,    92,[1:1], "Off*^(DT)", "On"
#if MPXH6300A
        EgoLimKPa     = scalar, U08,    39, "KPa",  1.213675,  1.53, 0, 304.0, 0
#elif MPXH6400A
        EgoLimKPa     = scalar, U08,    39, "KPa",  1.6197783,   2.147,  20.0,  400.0,     0
#else
        EgoLimKPa     = scalar, U08,    39, "KPa",  1, 0, 0, 255, 0
#endif
        EgoLim2       = scalar, U08,    40, "+-",   1, 0, 0, 100, 0
        KpaTPSTar     = bits,   U08,    109,[4:4],  "Speed Density", "Alpha-N"
        TPSTar        = bits,   U08,    109,[5:5],  "Always", "Above TPS Setpoint"
        TPSAFRPoint   = scalar, U08,    121, "Raw ADC", 1, 0, 0, 255, 0

; More Launch Stuff
      LachTps          = scalar, U08,    41,       "Raw ADC",     1, 0, 0, 255, 0
      LachDeg          = scalar, U08,    42,       "Deg",         0.352, -28.4, -10, 45, 0
      LachRpm          = scalar, U08,    43,       "RPM",         100, 0, 0, 6000, 0
      VLaunch          = bits,   U08,    46[1:1],  "Off", "On"
      LC_flatsel       = scalar, U08,   124,       "RPM",         100, 0, 0, 25500, 0
        LC_flatlim       = scalar, U08,   128,       "RPM",         100, 0, 3000, 6000, 0
        LC_f_slim        = scalar, U08,   140,       "RPM",         100, 0, 3000, 6000, 0
      LC_f_limangle    = scalar, U08,   141,       "Deg",         0.352, -28.4, -10, 45, 0
; Over Boost Protection

#if MPXH6300A
      OvrBKpa          = scalar, U08,    44,        "KPa",      1.213675,  1.53, 0, 304.0, 0
#elif MPXH6400A
       OvrBKpa          = scalar, U08,    44,        "KPa",  1.6197783,   2.147,  20.0,  400.0,  0
#elif KPa
      OvrBKpa          = scalar, U08,    44,        "KPa",       1, 0, 100, 255, 0
#else
      OvrBKpa          = scalar, U08,    44,        "PSI",     0.147, -100, -15, 23, 1
#endif


; Coolant / Iat Related Ignition
        CltAdv           = bits,   U08,     46[2:2], "Off", "On"
   #if CELSIUS
        IgAdvDeg         = scalar, U08,     48,       "C",     0.555, 0, 0, 100, 1
        IgAdvTemp        = scalar, U08,     47,        "C",     0.555, -72, -40, 70, 1
        IgRetDeg         = scalar, U08,     50,       "C",     0.555, 0, 0, 102, 1
        IgRetTemp        = scalar, U08,     52,       "C",     0.555, -72, -40, 102, 1
   #else
        IgAdvDeg         = scalar, U08,     48,       "F",      1,   0,   0, 120, 1
        IgAdvTemp        = scalar, U08,     47,       "F",      1, -40, -10, 120, 1
        IgRetDeg         = scalar, U08,     50,       "F",      1,   0,   0, 120, 1
        IgRetTemp        = scalar, U08,     52,       "F",      1, -40, -10, 120, 1
   #endif

        MaxIatAdv        = scalar, U08,     49,       "Deg",    0.352,0,  0, 15, 1
   #if MPXH6300A
        IatAdvKpa        = scalar, U08,     51,       "KPa",    1.213675,  1.53, 0, 304.0, 0
   #elif MPXH6400A
        IatAdvKpa        = scalar, U08,     51,       "KPa",    1.6197783,   2.147,  20.0,  400.0,  0
   #else
        IatAdvKpa        = scalar, U08,     51,       "KPa",    1, 0, 0, 255, 0
   #endif

;  KNOCK DETECTOR SETTINGS
        KnockOn          = bits,   U08,    46[6:6], "Off","On"
        KnockRpm         = scalar, U08,    53,        "RPM",    100, 0, 0, 12000, 0

   #if MPXH6300A
        KnockKpa         = scalar, U08,    55,        "KPa",   1.213675,  1.53, 0, 304.0, 0
   #elif MPXH6400A
        KnockKpa         = scalar, U08,    55,        "KPa",    1.6197783,   2.147,  20.0,  400.0,  0
   #else
        KnockKpa         = scalar, U08,    55,        "KPa",   1, 0, 0, 255, 0
   #endif

        KnockRpmL        = scalar, U08,    54,        "RPM",  100, 0, 0,  12000, 0
        KnockRet         = scalar, U08,    56,        "Deg",   0.352, 0, 0, 10, 0
        KnockSb          = scalar, U08,    57,        "Deg",   0.352, 0, 0, 10, 0
        KnockMax         = scalar, U08,    59,        "Deg",   0.352, 0, 1, 30, 0
        KnockAdv         = scalar, U08,    58,        "Deg",   0.352, 0, 0, 20, 0
        KnockTim         = scalar, U08,    60,        "Sec",   1, 0, 1, 10, 0

   #if MPXH6300A
        KnockBoost       = scalar, U08,   107,        "KPa",   1.213675,  1.53, 0, 304.0, 0
        BoostMaxKn       = scalar, U08,   108,        "KPa",   1.213675,  1.53, 0, 304.0, 0
   #elif MPXH6400A
        KnockBoost       = scalar, U08,   107,        "KPa",    1.6197783,   2.147,  20.0,  400.0,  0
        BoostMaxKn       = scalar, U08,   108,        "KPa",    1.6197783,   2.147,  20.0,  400.0,  0
   #elif KPa
        KnockBoost       = scalar, U08,   107,        "KPa",   1, 0, 0, 155, 0
        BoostMaxKn       = scalar, U08,   108,        "KPa",   1, 0, 0, 155, 0
   #else
        KnockBoost       = scalar, U08,   107,        "PSI",   0.147, 0, 0, 20, 0
        BoostMaxKn       = scalar, U08,   108,        "PSI",   0.147, 0, 0, 20, 0

   #endif

;  WATER INJECTION SETTINGS
      WaterInj            = bits,   U08,    46[3:3], "Off*", "On"
      WaterIRpm           = scalar, U08,    63,       "RPM",   100, 0, 0, 12000, 0

   #if MPXH6300A
      StartWIKPa          = scalar, U08,    62,      "KPa",     1.213675,  1.53, 0, 304.0, 0
   #elif MPXH6400A
      StartWIKPa          = scalar, U08,    62,       "KPa",    1.6197783,   2.147,  20.0,  400.0,  0
   #elif KPa
      StartWIKPa          = scalar, U08,    62,      "KPa",    1, 0, 0, 255, 0
   #else
      StartWIKPa          = scalar, U08,    62,      "PSI",    0.147, -100, 0, 20, 0
   #endif

   #if CELSIUS
      WaterIIat           = scalar, U08,    61,       "C",     0.555, -72, -40, 102, 1
   #else
      WaterIIat           = scalar, U08,    61,       "F",     1, -40, -10, 120, 1
   #endif
;  OPEN LOOP MODE
      OLoopEgo            = bits,   U08,    46[0:0], "TPS", "KPa"

   #if MPXH6300A
      KPaOn               = scalar, U08,    64,      "KPa", 1.213675,  1.53, 0, 304.0, 0
   #elif MPXH6400A
       KPaOn               = scalar, U08,    64,       "KPa",    1.6197783,   2.147,  20.0,  400.0,  0
   #else
      KPaOn               = scalar, U08,    64,      "KPa",  1, 0, 0,  255, 0
   #endif

      TpsOn               = scalar, U08,    65,      "Raw",  1, 0, 0, 255, 0
;  HARD CUT TYPE SETTINGS FOR REV LIMITER AND LAUNCH AND OVER BOOST
        HCutType         = bits,   U08,    46[4:5], "INVALID", "Spark Cut Only", "Fuel Only", "Fuel & Spark"
        HCutSpark        = scalar, U08,    45,      "Sparks",    1,0, 0, 20, 0
        HCutLCType       = bits,   U08,    76[0:1], "INVALID", "Spark Cut Only", "Fuel Only", "Fuel & Spark"
        HCutLCSpark      = scalar, U08,    77,      "Sparks",    1, 0, 0, 20, 0
        SparkCutBase     = scalar, U08,    78,      "Sparks",    1, -1, 5, 20, 0  ; -1 to Value
        OvrBCutType      = bits,   U08,    76[4:5], "INVALID", "Spark Cut Only", "Fuel Only", "Fuel & Spark"
        SparkCutBNum     = scalar, U08,    84,      "Sparks", 1, 0, 0, 20, 0
;  Output Inverters

        InvOut1          = bits,   U08,    66[1:1],  "Normal", "Inverted"
        InvOut2          = bits,   U08,    66[2:2],  "Normal", "Inverted"
        Out1UpLim        = scalar, U08,    88,       "raw byte or deg F +40", 1, 0, 0, 255, 0
        Out2UpLim        = scalar, U08,    89,       "raw byte or deg F +40", 1, 0, 0, 255, 0
; EDIS multi-spark
        edismulti        = bits,   U08,    66[3:3],  "Off*^", "On"

; Nitrous System
        NosRpm = scalar, U08, 23, "RPM",   100, 0, 1000, 25000, 0
        NosTps = scalar, U08, 67, "Raw",   1, 0, 0, 255, 0
   #if CELSIUS
        NosClt = scalar, U08, 22, "C",     0.555, -72, -40, 102, 1
   #else
        NosClt = scalar, U08, 22, "F",     1, -40, -10, 120, 1
   #endif
        NosAngle = scalar, U08, 68, "Deg",  0.352, 0, 0, 30, 0
        NosPWLo  = scalar, U08, 69, "mSec",  0.1, 0, 0, 25.5, 1
        NosPWHi  = scalar, U08, 70, "mSec",  0.1, 0, 0, 25.5, 1
        nitrousUse  = bits,   U08,   11,  [7:7], "Off*", "On"
        NosRpmMax = scalar, U08, 24, "RPM", 100, 0, 3000, 25000, 0
        DtNos =     bits,   U08, 66[5:5], "Bank1", "Bank2"
        NosLagSystem = bits, U08, 76[6:6], "Off", "On"
   #if MPXH6300A
        NosLowKpa = scalar, U08, 85, "KPa", 1.213675,  1.53, 0, 304.0, 0
        NosHiKpa = scalar, U08, 86, "KPa", 1.213675,  1.53, 0, 304.0, 0
  #elif MPXH6400A
       NosLowKpa = scalar, U08, 85,    "KPa",    1.6197783,   2.147,  20.0,  400.0,  0
       NosHiKpa = scalar,  U08, 86,    "KPa",    1.6197783,   2.147,  20.0,  400.0,  0
   #else
        NosLowKpa = scalar, U08, 85, "KPa", 1, 0, 0, 255
        NosHiKpa = scalar, U08, 86, "KPa", 1, 0, 0, 255
   #endif
;      n2ostage2    = bits,   U08,    ??where??, "Off", "Stage2 on"



;nitrous/launch
        N2Odel_launch    = scalar, U08,   157,       "s",         0.01, 0, 0, 2.55, 2
        N2Odel_flat      = scalar, U08,   158,       "s",         0.01, 0, 0, 2.55, 2
        N2Oholdon        = scalar, U08,   159,       "s",         0.01, 0, 0, 2.55, 2

;wheel decoder
        numteeth = scalar, U08, 90, "", 1, 0, 0, 255
        trig1    = scalar, U08, 25, "", 1, 0, 0, 255
        trig2    = scalar, U08, 26, "", 1, 0, 0, 255
        trig3    = scalar, U08, 27, "", 1, 0, 0, 255
        trig4    = scalar, U08, 28, "", 1, 0, 0, 255
        trig1ret = scalar, U08, 29, "", 1, 0, 0, 255
        trig2ret = scalar, U08, 30, "", 1, 0, 0, 255
        trig3ret = scalar, U08, 31, "", 1, 0, 0, 255
        trig4ret = scalar, U08, 32, "", 1, 0, 0, 255

        trig5    = scalar, U08, 145, "", 1, 0, 0, 255
        trig6    = scalar, U08, 146, "", 1, 0, 0, 255
        trig5ret = scalar, U08, 147, "", 1, 0, 0, 255
        trig6ret = scalar, U08, 148, "", 1, 0, 0, 255

        miss2nd  = bits, U08, 66[0:0], "no missing", "missing teeth"
        dualdizzy = bits,    U08,  92, [4:4], "Normal", "Dual dizzy"

;  OVER RUN FUEL CUT SETTINGS
        OvrRunC          = bits,   U08,    66[6:6],   "Off","On"
        OvrRunRpm        = scalar, U08,    71,        "RPM",     100, 0, 1000, 6000, 0

   #if CELSIUS
        OvrRunClt        = scalar, U08, 182,   "C",  0.555,  -72,  -40,  102, 0
   #else
        OvrRunClt        = scalar, U08, 182,   "F",  1,  -40,  -40,  215, 0
   #endif

   #if MPXH6300A
        OvrRunKpa         = scalar, U08,    72,        "KPa",    1.213675,  1.53, 0, 304.0, 0
   #elif MPXH6400A
         OvrRunKpa        = scalar, U08,    72,        "KPa",    1.6197783,   2.147,  20.0,  400.0,  0
   #else
        OvrRunKpa        = scalar, U08,    72,        "KPa",     1, 0, 0, 255, 0
   #endif
        OvrRunTps        = scalar, U08,    73,        "Raw ADC", 1, 0, 0, 255, 0
        OvrRunTimr       = scalar, U08,    130,       "Sec", 1, 0, 0, 255, 0


; Accel Dot Settings
      AccDecEnrich        = bits,   U08,    66[7:7], "TPSdot*^(DT)", "MAPdot"
      KPaDotBoost         = bits,   U08,    66[4:4], "Never",  "In Boost"
      DecayAccel          = bits,   U08,    116[6:6], "None*^(DT)", "Decay"
      DecayAcPoint        = scalar, U08,    183, "mS", 0.1, 0, 0, 25.5, 1


; Electric Fan control (X2) - can't be used with water inj
   #if CELSIUS
        efanontemp  = scalar, U08, 74, "C",     0.555, -72, -40, 102, 1
        efanofftemp = scalar, U08, 75, "C",     0.555, -72, -40, 102, 1
   #else
        efanontemp  = scalar, U08, 74, "F",     1, -40, -40, 215, 1
        efanofftemp = scalar, U08, 75, "F",     1, -40, -40, 215, 1
   #endif
; STAGED INJECTION
       IStagedMode = bits,   U08, 76[2:3],"Off*^","RPM-Based","MAP-Based","TPS-Based"
       ScaleFac    = scalar, U08, 79, "", 1.0,  0.0, 0, 255
       StgTrans    = scalar, U08, 80, "", 1.0,  0.0, 0, 255
       StgDelta    = scalar, U08, 81, "", 1.0,  0.0, 0, 255
       StagedMAP2nd = bits,  U08, 109[6:6], "Off*^", "MAP-Based"
       StagedAnd    = bits,  U08, 109[7:7], "One condition", "Both Conditions"
; BARO CORRECTION
#if MPXH6300A
       BarroHi     = scalar, U08, 82, "KPa", 1.213675,  1.53, 0, 304.0, 0
       BarroLow    = scalar, U08, 83, "KPa", 1.213675,  1.53, 0, 304.0, 0
 #elif MPXH6400A
       BarroHi     = scalar, U08, 82, "KPa",   1.6197783,   2.147,  20.0,  400.0,  0
       BarroLow    = scalar, U08, 83, "KPa",   1.6197783,   2.147,  20.0,  400.0,  0
#elif MPX4250
       BarroHi     = scalar, U08, 82, "KPa", 0.9837, 8, 10, 255
       BarroLow    = scalar, U08, 83, "KPa", 0.9837, 8, 10, 255
#else
       BarroHi     = scalar, U08, 82, "KPa", 0.433, 10, 10, 255
       BarroLow    = scalar, U08, 83, "KPa", 0.433, 10, 10, 255
#endif

      AlphBaroCor = bits,   U08,  184, [3:3],  "No", "Yes"
      AFMUse      = bits,   U08,  184, [5:5],  "No AFM *^", "AFM on X7"
      AirCorAFM   = bits,   U08,  184, [6:6],  "Use IAT", "Built into AFM"
      ConsBarCor  = bits,   U08,  184, [7:7],  "Not Fitted*^", "Extra MAP fitted to X7"

; Spark Table Selection
      STTable2On   = bits, U08, 76[7:7], "Spark Table1^", "Spark Table2"
      ST2Delay     = scalar, U08, 87, "Sec", 0.1, 0, 0, 25,  1

; VE Table 3
      UseVE3       = bits, U08, 92[0:0], "Dont switch*^(DT)", "Switch to Table3"
      VE3Delay     = scalar, U08, 93, "Sec", 0.1, 0, 0, 25, 1

; Traction Control
       TractionOn  = bits,    U08, 92[5:5], "Off*^", "On"
       RPMThresh   = scalar,  U08, 98, "RPM/Sec",   1000, 0, 1000, 25000, 0
       RPM1S       = scalar,  U08, 94, "3000RPM/Sec or 5%Slip", 0.1, 0, 0, 20.0, 1
       RPM2S       = scalar,  U08, 95, "4000RPM/Sec or 15%Slip", 0.1, 0, 0, 20.0, 1
       RPM3S       = scalar,  U08, 96, "6000RPM/Sec or 30%Slip", 0.1, 0, 0, 20.0, 1
       RPM4S       = scalar,  U08, 97, "10000RPM/Sec or 70%Slip ", 0.1, 0, 0, 20.0, 1
       TractRet1   = scalar,  U08, 99, "3000RPM/Sec or 5%Slip",   0.352, 0, 0, 30, 0
       TractRet2   = scalar,  U08, 100, "4000RPM/Sec or 15%Slip",  0.352, 0, 0, 30, 0
       TractRet3   = scalar,  U08, 101, "6000RPM/Sec or 30%Slip",  0.352, 0, 0, 30, 0
       TractRet4   = scalar,  U08, 102, "10000RPM/Sec or 70%Slip",  0.352, 0, 0, 30, 0
       TractSC1    = scalar,  U08, 103, "3000RPM/Sec or 5%Slip",     1, 0, 0, 2, 0
       TractSC2    = scalar,  U08, 104, "4000RPM/Sec or 15%Slip",     1, 0, 0, 2, 0
       TractSC3    = scalar,  U08, 105, "6000RPM/Sec or 30%Slip",     1, 0, 0, 2, 0
       TractSC4    = scalar,  U08, 106, "10000RPM/Sec or 70%Slip",     1, 0, 0, 2, 0
       TractNOS    = bits,    U08, 109, [0:0], "No", "Yes"
       TractCyc1   = scalar,  U08, 112, "3000RPM/Sec or 5%Slip",  1, 0, 1, 255, 0
       TractCyc2   = scalar,  U08, 113, "4000RPM/Sec or 15%Slip",  1, 0, 1, 255, 0
               TractCyc3   = scalar,  U08, 114, "6000RPM/Sec or 30%Slip",  1, 0, 1, 255, 0
       TractCyc4   = scalar,  U08, 115, "10000RPM/Sec or 70%Slip",  1, 0, 1, 255, 0
       TractCySec  = bits,    U08, 109,[2:2], "RPM stable for 0.1S", "Cycle count only"
       TractScale  = scalar,  U08, 119, "%",             0.39216, 0, 0, 100, 0
       TractSlip   = scalar,  U08, 120, "%",             0.39216, 0, 0, 100, 0
       TractVSSMax = scalar,  U08, 118, "V",             0.0196, 0, 0, 5, 2
       TractVSSMin = scalar,  U08, 117, "V",             0.0196, 0, 0, 5, 2
       TractMode   = bits,    U08, 109, [3:3], "RPM Based", "Vehicle Speed Sensors"
       TractSlipH  = scalar,  U08, 123, "%",             0.39216, 0, 0, 100, 0

;Advanced options for testing
       falsetrig_dis = bits,    U08,  92, [2:2], "Enabled*", "Disabled"
       wheel_old   = bits,    U08,  92, [3:3], "025 style", "024s9 style"

;Dwell control
;running dwell variable railed to 8 - who needs more than 8ms?
;mindischarge railed to 1.5ms. ought to be max 1ms I guess? Normal value say 0.1ms	
         dwellcont       = bits,    U08, 109, [1:1], "Fixed duty*^", "Dwell control"
         dwellcrank  = scalar,  U08, 110, "ms",  0.1, 0, 0, 25, 1
         dwellrun    = scalar,  U08, 111, "ms",  0.1, 0, 0, 8, 1
       mindischg   = scalar,  U08, 143, "ms",  0.1, 0, 0, 1.5, 1

;pwm idle stuff was in here

         tachconf    = bits,  U08, 144[0:2], "OFF","X2 (JS0)","X3 (JS1)","X4 (JS2)","X5 (JS3)","Output3","Pin10","INVALID"
         tachconfdiv = bits,  U08, 144[7:7], "Normal", "Half speed"

  #if MPXH6300A
       bc_max_diff = scalar,  U08, 125, "kPa", 1.213675,    1.53,     0, 304.0, 0
       DecelKPa    = scalar,  U08, 129, "kPa", 1.213675,    1.53,     0, 304.0, 0
       Pambient    = scalar,  U08, 185, "kPa", 1.213675,    1.53,     0, 304.0, 0
  #elif MPXH6400A
       bc_max_diff = scalar,  U08, 125, "kPa", 1.6197783,   2.147, 20.0, 400.0, 0
       DecelKPa    = scalar,  U08, 129, "kPa", 1.6197783,   2.147, 20.0, 400.0, 0
       Pambient    = scalar,  U08, 185, "kPa", 1.6197783,   2.147, 20.0, 400.0, 0
  #else
       bc_max_diff = scalar,  U08, 125, "kPa", 1.0,           0.0,  0.0, 255.0, 0
       DecelKPa    = scalar,  U08, 129, "kPa", 1.0,           0.0,  0.0, 255.0, 0
       Pambient    = scalar,  U08, 185, "kPa", 1.0,           0.0,  0.0, 255.0, 0
  #endif

       DecelBoost = bits,    U08, 92, [7:7], "Never*^",  "Above KPa Setpoint"

; More Boost Controller Stuff
#if CELSIUS
       IATBoostSt = scalar, U08, 135,  "C",     0.555, -72, -40, 100, 1
       IATBoost   = scalar, U08, 136,  "C",     0.555, 0, 0, 102, 1
       TPSBooIAT  = scalar, U08, 137,  "Raw ADC", 1, 0, 0, 255, 0
#else
        IATBoostSt = scalar, U08, 135,  "F",     1, -40, -10, 120, 1
        IATBoost = scalar, U08, 136,  "F",      1,   0,   0, 120, 1
        TPSBooIAT  = scalar, U08, 137,  "Raw ADC", 1, 0, 0, 255, 0
#endif
        BooTbl2Use = bits, U08, 116,  [2:2], "Dont Switch*^", "Targets 2"

; MAPdot and ACCEL WIZARD STUFF

        mapThresh4 = scalar, U08, 91, "kPa/s",  10,  0,  0,  2550, 0
        taeRates4  = array,  U08,  161,[    4], "Volt/s",       0.1960784,       0.0,   0.0,    25.5,      1
        maeRates4  = array,  U08,  165,[    4], "kPa/s",       10,       0.0,   0.0,    2550,      0
        maeBins4   = array,  U08,  169,[    4], "ms",       0.1,       0.0,   0.0,    25.5,      1
        taeBins4   = array,  U08,     173,[    4], "ms",       0.1,       0.0,   0.0,    25.5,      1
      taeColdA4  = scalar, U08,     177,         "ms",       0.1,       0.0,   0.0,    25.5,      1
      tpsThresh4 = scalar, U08,     178,         "v/s",  0.1953125,       0.0,   0.2,    49.8,      3
      taeTime4   = scalar, U08,     179,         "ms",       0.1,       0.0,   0.0,    25.5,      1
      tdePct4    = scalar, U08,     180,         "%",        1.0,       0.0,   0.0,   255.0,      0
      taeColdM4  = scalar, U08,     181,        "%",         1.0,       0.0,   0.0,   250.0,      0
      mapProportion4 = bits,   U08,    66[7:7], "TPSdot*^(DT)", "MAPdot"

      AccelMapASE = bits,   U08,  184, [2:2],   "Normal*^", "Off during ASE"
      RPMBAsedAE   = bits, U08,     184[4:4], "Normal AE*^", "RPM Based"
;???curve table
      RPMAE1   = scalar, U08, 152, "RPM", 100, 0, 100, 25500,  0   ; RPM based AE stuff
      RPMAE2   = scalar, U08, 151, "RPM", 100, 0, 100, 25500,  0
      RPMAE3   = scalar, U08, 150, "RPM", 100, 0, 100, 25500,  0
      RPMAE4   = scalar, U08, 149, "RPM", 100, 0, 100, 25500,  0

      RPMmS1   = scalar, U08, 153, "mS", 0.1, 0, 0, 25.5, 1
      RPMmS2   = scalar, U08, 154, "mS", 0.1, 0, 0, 25.5, 1
      RPMmS3   = scalar, U08, 155, "mS", 0.1, 0, 0, 25.5, 1
      RPMmS4   = scalar, U08, 156, "mS", 0.1, 0, 0, 25.5, 1

   page = 5
      advTable2  = array,  U08,       0,[12x12], "deg",   0.352,   -28.4,   -10.0,    80.0,      0
      rpmBins4   = array,  U08,     144,[   12], "RPM",   100.0,     0.0,   100,   25500,      0

#if SPEED_DENSITY
 #if MPXH6300A
      mapBins4   = array,  U08,     156, [ 12],  "kPa",  1.213675,  1.53,  20.0,  304.0,  0
 #elif MPXH6400A
      mapBins4   = array,  U08,     156, [ 12],  "kPa",   1.6197783,   2.147,  20.0,  400.0,  0
 #else
      mapBins4   = array,  U08,     156, [ 12], "kPa",     1.0,     0.0,   0.0,   255.0,      0
 #endif
 #elif AIR_FLOW_METER
      afmBins4   = array, U08,      156, [12], "AFM Volts",    0.01961, 0.0,  0.0,  5.0, 2

   #elif ALPHA_N
      tpsBins4   = array,  U08,     156, [ 12], "TPS",        1.0,      0.0,   0.0,   255.0,      0
   #endif




   page = 6
      veBins3    = array,  U08,       0, [12x12], "%",       1.0,      0.0,   0.0,   255.0,      0
      rpmBins5   = array,  U08,     144, [  12], "RPM",   100.0,      0.0,   100,   25500,      0

#if SPEED_DENSITY
 #if MPXH6300A
      mapBins5   = array,  U08,     156, [ 12],  "kPa", 1.213675,  1.53,  20.0,  304.0,    0
 #elif MPXH6400A
      mapBins5   = array,  U08,     156, [ 12],  "kPa",   1.6197783,   2.147,  20.0,  400.0,  0
 #else
      mapBins5   = array,  U08,     156, [ 12], "kPa",     1.0,      0.0,   0.0,   255.0,      0
 #endif
 #elif AIR_FLOW_METER
      afmBins5   = array, U08,      156, [12], "AFM Volts",    0.01961, 0.0,  0.0,  5.0, 2

 #elif ALPHA_N
      tpsBins5   = array,  U08,     156, [ 12], "TPS",        1.0,      0.0,   0.0,   255.0,      0
 #endif

      ASETable1   = scalar, U08, 168,        "%",  1.0, 0.0, 0.0, 255, 0
      ASETable2   = scalar, U08, 169,        "%",  1.0, 0.0, 0.0, 255, 0
      ASETable3   = scalar, U08, 170,        "%",  1.0, 0.0, 0.0, 255, 0
      ASETable4   = scalar, U08, 171,        "%",  1.0, 0.0, 0.0, 255, 0
      ASETable5   = scalar, U08, 172,        "%",  1.0, 0.0, 0.0, 255, 0
      ASETable6   = scalar, U08, 173,        "%",  1.0, 0.0, 0.0, 255, 0
      ASETable7   = scalar, U08, 174,        "%",  1.0, 0.0, 0.0, 255, 0
      ASETable8   = scalar, U08, 175,        "%",  1.0, 0.0, 0.0, 255, 0
      ASETable9   = scalar, U08, 176,        "%",  1.0, 0.0, 0.0, 255, 0
      ASETable10  = scalar, U08, 177,        "%",  1.0, 0.0, 0.0, 255, 0
      ASETime     = scalar, U08, 178,        "",   1.0, 0.0, 0.0, 255, 0
      aseIgnCount = bits,   U08, 179, [0:0], "Cycles*^", "Sec"
      ASEFixDe    = bits,   U08, 179, [1:1], "Decay *^", "Fixed then Decay"
      ASEFixTim   = scalar, U08, 180,        "",   1.0, 0.0, 0.0, 255, 0

#if CELSIUS
       ASEFixTemp   = scalar, U08,    181,  "C",     0.555, -72, -40, 100, 1
#else
       ASEFixTemp   = scalar, U08,    181,  "F",     1, -40, -10, 120, 1
#endif
       VEFixASE    = bits, U08,     179, [2:2], "Normal MAP *^", "Fixed MAP"

 #if MPXH6300A
       VEFixValue  = scalar, U08,     182,   "kPa",  1.213675,  1.53,  20.0,  304.0,  0
 #elif MPXH6400A
       VEFixValue  = scalar, U08,     182,   "kPa",   1.6197783,   2.147,  20.0,  400.0,  0
 #else
       VEFixValue  = scalar, U08,     182,   "kpa",      0.965,      9,    0.0,     255.0,     0
 #endif


   page = 7     ; TARGET AFR table 1 BINS FOR VE 1 (First find which sensor used)

#if NARROW_BAND_EGO
      afrBins1   = array,  U08,      0,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif WB_1_0_LINEAR
      afrBins1   = array,  U08,      0,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif WB_UNKNOWN
      afrBins1   = array,  U08,      0,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif AEM_LINEAR
      afrBins1   = array,  U08,      0,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif AEM_NON_LINEAR
      afrBins1   = array,  U08,      0,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif DIYWB_NON_LINEAR
      afrBins1   = array,  U08,      0,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif DYNOJET_LINEAR
      afrBins1   = array,  U08,      0,  [8x8],  "Volts",      0.0314,      0,    0.0,     5.0,     2
#elif TECHEDGE_LINEAR
       afrBins1   = array,  U08,     0,  [8x8],  "AFR",       0.0392,       229.0,    9.0,    19.0,     1
#elif INNOVATE_1_2_LINEAR
       afrBins1   = array,  U08,     0,  [8x8],  "AFR",       0.1961,       0,    10.0,   20.0,     1
#elif INNOVATE_0_5_LINEAR
       afrBins1   = array,  U08,     0,  [8x8],  "AFR",       0.0392,      255.0,    10.0,   20.0,     1
#elif INNOVATE_LC1_DEFAULT
       afrBins1   = array,  U08,     0,  [8x8],  "AFR",       0.057647,    127.5,    10.0,   20.0,     1
#elif ZEITRONIX_NON_LINEAR
      afrBins1   = array,  U08,      0,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#else
; Should never get here but just incase put message on screen
  #error "No O2 sensor configuration selected; Youll need to fix the settings.ini.\n\nMegaTune terminating."
  #exit ; Terminate MT
#endif

      rpmBins6   = array,  U08,    64,[  8], "RPM",    100.0,     0.0,   100,   25500,      0

#if SPEED_DENSITY
 #if MPXH6300A
      mapBins6   = array,  U08,     72, [ 8],  "kPa",  1.213675,  1.53,  20.0,  304.0,     0
 #elif MPXH6400A
     mapBins6   = array,  U08,     72,  [ 8],  "kPa",   1.6197783,   2.147,  20.0,  400.0,  0
 #else
      mapBins6   = array,  U08,    72,  [ 8], "kPa",      1.0,     0.0,   0.0,   255.0,      0
 #endif
 #elif AIR_FLOW_METER
      afmBins6   = array, U08,      72, [8], "AFM Volts",    0.01961, 0.0,  0.0,  5.0, 2

   #elif ALPHA_N
      tpsBins6   = array,  U08,     72, [ 8], "TPS",        1.0,      0.0,   0.0,   255.0,      0
   #endif

               ; TARGET AFR table 2 BINS FOR VE 3 (First find which sensor used)
#if NARROW_BAND_EGO
      afrBins2   = array,  U08,      80,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif WB_1_0_LINEAR
      afrBins2   = array,  U08,      80,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif WB_UNKNOWN
      afrBins2   = array,  U08,      80,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif AEM_LINEAR
      afrBins2   = array,  U08,      80,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif AEM_NON_LINEAR
      afrBins2   = array,  U08,      80,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif DIYWB_NON_LINEAR
      afrBins2   = array,  U08,      80,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#elif DYNOJET_LINEAR
      afrBins2   = array,  U08,      80,  [8x8],  "Volts",      0.0314,      0,    0.0,     5.0,     2
#elif TECHEDGE_LINEAR
       afrBins2   = array,  U08,     80,  [8x8],  "AFR",       0.0392,       229.0,    9.0,    19.0,     1
#elif INNOVATE_1_2_LINEAR
       afrBins2   = array,  U08,     80,  [8x8],  "AFR",       0.1961,       0,    10.0,   20.0,     1
#elif INNOVATE_0_5_LINEAR
       afrBins2   = array,  U08,     80,  [8x8],  "AFR",       0.0392,      255.0,    10.0,   20.0,     1
#elif INNOVATE_LC1_DEFAULT
       afrBins2   = array,  U08,     80,  [8x8],  "AFR",       0.057647,    127.5,    10.0,   20.0,     1
#elif ZEITRONIX_NON_LINEAR
      afrBins2   = array,  U08,      80,  [8x8],  "Volts",      0.0196,      0,    0.0,     5.0,     2
#else
   ; Should never get here but just incase put message on screen
   #error "No O2 sensor configuration selected; You need to fix the settings.ini.\n\nMegaTune terminating."
   #exit ; Terminate MT
#endif
      rpmBins7   = array,  U08,     144,[   8], "RPM",    100.0,     0.0,   100,   25500,      0

#if SPEED_DENSITY
 #if MPXH6300A
      mapBins7   = array,  U08,     152, [ 8],  "kPa",  1.213675,  1.53,  20.0,  304.0,  0
 #elif MPXH6400A
       mapBins7  = array,  U08,     152, [ 8],  "kPa",   1.6197783,   2.147,  20.0,  400.0,  0
 #else
      mapBins7   = array,  U08,     152, [ 8], "kPa",      1.0,     0.0,   0.0,   255.0,      0
 #endif
 #elif AIR_FLOW_METER
      afmBins7   = array, U08,      152, [8], "AFM Volts",    0.01961, 0.0,  0.0,  5.0, 2

   #elif ALPHA_N
      tpsBins7   = array,  U08,     152, [ 8], "TPS",        1.0,      0.0,   0.0,   255.0,      0
   #endif

;nitrous stage 2
; Nitrous System
        Nos2Rpm   = scalar, U08, 160, "RPM",   100, 0, 1000, 25000, 0
        Nos2RpmMax= scalar, U08, 161, "RPM", 100, 0, 3000, 25000, 0
        Nos2delay = scalar, U08, 162, "s", 0.01, 0, 0, 2.55,2
        Nos2Angle = scalar, U08, 163, "Deg",  0.352, 0, 0, 30, 0
        Nos2PWLo  = scalar, U08, 164, "mSec",  0.1, 0, 0, 25.5, 1
        Nos2PWHi  = scalar, U08, 165, "mSec",  0.1, 0, 0, 25.5, 1

;oddfire wheel decoder
;outaoffs = bits,   U08, 166, [0:2], "0", "+22.5", "+45", "+67.5", "+90", "+112.5", "+135", "+157.5"
outaoffs = bits,   U08, 166, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outaoffv = scalar, U08, 167, "deg", 0.352,   0,   0,    45,      1

outboffs = bits,   U08, 168, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outboffv = scalar, U08, 169, "deg", 0.352,   0,   0,    45,      1

outcoffs = bits,   U08, 170, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outcoffv = scalar, U08, 171, "deg", 0.352,   0,   0,    45,      1

outdoffs = bits,   U08, 172, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outdoffv = scalar, U08, 173, "deg", 0.352,   0,   0,    45,      1

outeoffs = bits,   U08, 174, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outeoffv = scalar, U08, 175, "deg", 0.352,   0,   0,    45,      1

outfoffs = bits,   U08, 176, [0:2], "0", "INVALID", "+45", "INVALID", "+90", "INVALID", "INVALID", "INVALID"
outfoffv = scalar, U08, 177, "deg", 0.352,   0,   0,    45,      1

 page = 8      ; boost controller targets
      ;target kpa

 #if MPXH6300A
      bcBins1   = array,  U08,        0, [ 6x6],  "kPa",  1.213675,  1.53,  20.0,  304.0,  0
      bcBins3   = array,  U08,        96, [ 6x6],  "kPa",  1.213675,  1.53,  20.0,  304.0,  0
 #elif MPXH6400A
      bcBins1   = array,    U08,     0, [ 6x6],  "kPa",   1.6197783,   2.147,  20.0,  400.0,  0
      bcBins3   = array,    U08,     96, [ 6x6],  "kPa",   1.6197783,   2.147,  20.0,  400.0,  0
 #else
      bcBins1     = array,  U08,      0,  [6x6],  "kpa",      1,      0,    0.0,     255.0,     0
      bcBins3     = array,  U08,      96,  [6x6],  "kpa",      1,      0,    0.0,     255.0,     0
 #endif

      bcrpmBins1  = array,  U08,      36,[ 6], "RPM",    100.0,     0.0,   100,   25500,      0
      bctpsBins1  = array,  U08,      42,[ 6], "tps%",     0.392,     0.0,   0.0,   100.0,      0
      ;default duty cycle
      bcBins2     = array,  U08,      48,  [6x6],  "duty",    0.392,      0,    0.0,    100.0,     0
      bcrpmBins2  = array,  U08,      84,[ 6], "RPM",    100.0,     0.0,   100,   25500,      0
      bctpsBins2  = array,  U08,      90,[ 6], "tps%",      0.392,     0.0,   0.0,   100.0,      0
      bcrpmBins3  = array,  U08,      132,[ 6], "RPM",    100.0,     0.0,   100,   25500,      0
      bctpsBins3  = array,  U08,      138,[ 6], "tps%",     0.392,     0.0,   0.0,   100.0,      0


page = 9   ; idle control and other bits ripped out of lower pages for more space
       idle_dc_lo  = scalar,  U08, 000, "dc", 1, 0, 0, 255, 0
       idleperiod  = scalar,  U08, 001, "x 0.01sec",  1, 0, 0, 255, 0
       idlecrankdc      = scalar,  U08, 002, "dc", 1, 0, 0, 255, 0              ;kg
       idledelayclock   = scalar,  U08, 003, "x 0.01sec", 1, 0, 0, 255, 0       ;kg
       idledashdc  = scalar,  U08, 004, "dc", 1, 0, 0, 255, 0
       idlemindc   = scalar,  U08, 005, "dc", 1, 0, 0, 255, 0
       idle_dc_hi  = scalar,  U08, 006, "dc", 1, 0, 0, 255, 0
       ictlrpm1         = scalar,  U08, 007, "lo RPM", 10, 0, 0, 2500, 0        ;kg
       ictlrpm2         = scalar,  U08, 008, "hi RPM", 10, 0, 0, 2500, 0        ;kg
       Ideadbnd         = scalar,  U08, 009, "+/- RPM", 10, 0, 0, 2500, 0       ;kg
       Idashdelay       = scalar,  U08, 010, "x 0.01sec", 1, 0, 0, 255, 0       ;kg
       idlefreq    = scalar,  U08, 011, "10000/x = Frequency", 1, 0, 0, 255, 0
       idlestartclk     = scalar,  U08, 012, "x 0.01sec", 1, 0, 0, 255, 0       ;kg
       idlePeriod2 = scalar,  U08, 013, "x 0.01sec",  1, 0, 0, 255, 0
       irestorerpm = scalar,  U08, 014, "RPM", 10, 0, 100, 6000, 0
       idleclosedc  = scalar,  U08, 015, "dc", 1, 0, 0, 255, 0
       pwmIdle     = bits,    U08, 016[0:0], "B&G On-Off*^", "PWM"
       pwmidlewhen = bits,    U08, 016[1:2], "INVALID", "Warmup only", "Closed loop only", "INVALID"
       IATCor    = bits, U08,      016,[3:3], "Normal Correction*^", "Corrected"
       IATCorTy  = bits, U08,      016,[4:4],  "Coolant Corrected", "IAT Corrected"

   #if CELSIUS
      fastIdleTemp = scalar, U08,   17,        "C",       0.555,   -72.0,    -40,     102
      slowIdleTemp = scalar, U08,   18,        "C",       0.555,   -72.0,    -40,     102
   #else
      fastIdleTemp = scalar, U08,   17,        "F",         1.0,   -40.0,    -40,     215
      slowIdleTemp = scalar, U08,   18,        "F",         1.0,   -40.0,    -40,     215
   #endif
      fastIdleRPM  = scalar, U08,   19,        "RPM",       10.0,     0.0,     10,    2550
      slowIdleRPM  = scalar, U08,   20,        "RPM",       10.0,     0.0,     10,    2550
      ; For TPS from ADC, use scale=100/(max-min) and tra=-min
      ;  100/(225-26) = 0.502, -26, might just be best to leave it in ADC...
;      idleThresh   = scalar, U08,   21,        "%",        0.502,   -26.0,    0.0,     255
      idleThresh   = scalar, U08,   21,        "ADC",        1, 0, 0, 255, 0

;???curve
      wueBins9    = array,  U08,     22,[   10], "%",        1.0,       0.0,   0.0,   255.0,      0

;???curve
      CrankPWT1   = scalar,   U08,    32,  "mS",    0.1,  1,  0,   25.5, 1
      CrankPWT2   = scalar,   U08,    33,  "mS",    0.1,  1,  0,   25.5, 1
      CrankPWT3   = scalar,   U08,    34,  "mS",    0.1,  1,  0,   25.5, 1
      CrankPWT4   = scalar,   U08,    35,  "mS",    0.1,  1,  0,   25.5, 1
      CrankPWT5   = scalar,   U08,    36,  "mS",    0.1,  1,  0,   25.5, 1
      CrankPWT6   = scalar,   U08,    37,  "mS",    0.1,  1,  0,   25.5, 1
      CrankPWT7   = scalar,   U08,    38,  "mS",    0.1,  1,  0,   25.5, 1
      CrankPWT8   = scalar,   U08,    39,  "mS",    0.1,  1,  0,   25.5, 1
      CrankPWT9   = scalar,   U08,    40,  "mS",    0.1,  1,  0,   25.5, 1
      CrankPWT10  = scalar,   U08,    41,  "mS",    0.1,  1,  0,   25.5, 1

; Priming SETTINGS
      AlwaysPrime  = bits, U08, 42[0:0], "Prime Pulse>0*^", "Always"
      PrimeLate    = bits, U08, 42[1:2], "Power Up*^", "INVALID", "Twice","After 2 Secs"
      PrimeTBox    = bits, U08, 42[3:3], "Priming Table", "Standard Prime"
; CLT vs MAT for cranking pulse width
        crankpwip  = bits,   U08,  42,  [4:5], "INVALID", "CLT only*^", "MAT only", "CLT,MAT average"
      ExFuelCrank = bits,  U08,  42,  [6:6], "Off", "On"

      CrankRPM      = scalar, U08,   43,  "rpm", 100.0,  0.0, 100, 1000, 0
      tpsflood    = scalar,  U08,   44, "raw", 1.0,     0.0,   0.0,   255.0,      0
      PrimePulse  = scalar,  U08,   45, "mS",  0.1,     0.0,   0.0,   25.5,   1
      ExtraFMult  = scalar,  U08,   46, "%",   1.0,   0.0,  0.0,  255, 0

; Coolant related correction table for air density
       IATCorS  = array , U08,     47, [7], "%", 1.0, 0.0, 50, 150, 0
; Coolant related correction table for air density
;       IATCor1  = scalar, U08,     47, "%", 1.0, 0.0, 0.0, 255, 0
;       IATCor2  = scalar, U08,     48, "%", 1.0, 0.0, 0.0, 255, 0
;       IATCor3  = scalar, U08,     49, "%", 1.0, 0.0, 0.0, 255, 0
;       IATCor4  = scalar, U08,     50, "%", 1.0, 0.0, 0.0, 255, 0
;       IATCor5  = scalar, U08,     51, "%", 1.0, 0.0, 0.0, 255, 0
;       IATCor6  = scalar, U08,     52 "%", 1.0, 0.0, 0.0, 255, 0
;       IATCor7  = scalar, U08,     53, "%", 1.0, 0.0, 0.0, 255, 0

       RPMRedLo  = scalar, U08, 54, "RPM", 100, 0.0, 0.0, 25500, 0
       RPMRedHi  = scalar, U08, 55, "RPM", 100, 0.0, 0.0, 25500, 0

#if CELSIUS
       IATCTemp   = array , U08,     56, [7], "C", 0.555, -72, -72, 102, 0
#else
       IATCTemp   = array , U08,     56, [7], "F", 1.0, -40.0, -40, 215, 0
#endif
;#if CELSIUS
;       IATCTemp1  = scalar, U08,     56, "C", 0.555, -72, -40, 102, 1
;       IATCTemp2  = scalar, U08,     57, "C", 0.555, -72, -40, 102, 1
;       IATCTemp3  = scalar, U08,     58, "C", 0.555, -72, -40, 102, 1
;       IATCTemp4  = scalar, U08,     59, "C", 0.555, -72, -40, 102, 1
;       IATCTemp5  = scalar, U08,     60, "C", 0.555, -72, -40, 102, 1
;       IATCTemp6  = scalar, U08,     61, "C", 0.555, -72, -40, 102, 1
;       IATCTemp7  = scalar, U08,     62, "C", 0.555, -72, -40, 102, 1
;#else
;       IATCTemp1  = scalar, U08,     56, "F", 1.0, -40.0, -40.0, 215, 1
;       IATCTemp2  = scalar, U08,     57, "F", 1.0, -40.0, -40.0, 215, 1
;       IATCTemp3  = scalar, U08,     58, "F", 1.0, -40.0, -40.0, 215, 1
;       IATCTemp4  = scalar, U08,     59, "F", 1.0, -40.0, -40.0, 215, 1
;       IATCTemp5  = scalar, U08,     60, "F", 1.0, -40.0, -40.0, 215, 1
;       IATCTemp6  = scalar, U08,     61, "F", 1.0, -40.0, -40.0, 215, 1
;       IATCTemp7  = scalar, U08,     62, "F", 1.0, -40.0, -40.0, 215, 1
;#endif

      splitTable   = array,  U08,      63, [6x6],  "deg", 0.352,   -28.4,    -10.0,   80.0,     0
      splitrpmBins = array, U08,      99,  [ 6], "RPM",    100.0,     0.0,   100,   25500,      0
#if SPEED_DENSITY
 #if MPXH6300A
      splitkpaBins = array, U08,     105, [ 6],  "kPa",  1.213675,  1.53,  20.0,  304.0,  0
 #elif MPXH6400A
      splitkpaBins = array, U08,     105, [ 6],  "kPa",   1.6197783,   2.147,  20.0,  400.0,  0
 #else
      splitkpaBins = array, U08,      105,  [6],  "kpa",      1,      0,    0.0,     255.0,     0
 #endif
 #elif AIR_FLOW_METER
      splitafmBins   = array, U08,      105, [6], "AFM Volts",    0.01961, 0.0,  0.0,  5.0, 2

#elif ALPHA_N
      splittpsBins   = array,  U08,   105, [ 6], "TPS",        1.0,      0.0,   0.0,   255.0,      0
#endif

      rotary2       = bits,   U08,   111,  [0:0], "Off",  "On"
        fixedsplit        = scalar,   U08,      112,  "deg", 0.352,   -28.4,    -10.0,   30.0,  0

; uncomment the following if you want to be able to save logged trigger or teeth into an MSQ
; file for onward processing. Normally best to leave commented.
;Didn't seem to work as-is with b730
;page = 10
;??;      blob10 = array, U08, 0, [189]
;      toothlog = array, U16, 0, [93]
;      toothpos = scalar, U08, 186, "", 1,0,0,255
;      toothscale = scalar, U08, 187,"", 1,0,0,255
;page = 11
;      triggerlog = array, U16, 0, [93]
;      triggerpos = scalar, U08, 186, "", 1,0,0,255
;      triggerscale = scalar, U08, 187,"", 1,0,0,255
;-------------------------------------------------------------------------------

[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_separator
   ;
   ;  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.
   ;
   ;----------------------------------------------------------------------------

menuDialog = main
   menu = "&Basic Settings"
      subMenu = std_constants, "&Engine Constants 1",                1
      subMenu = egoControl1,   "&Exhaust Gas Settings",       1
      subMenu = veTable1Tbl,   "Fuel &VE Table 1",                 0
      subMenu = AccelDecc,   "&Accel Deccl Mode"
      subMenu = std_accel,   "&Acceleration Wizard", 4
      subMenu = MoreAccel,   "RPM &Based Accel"
      subMenu = codeBase,     "&Codebase and outputs function"
      subMenu = wheeldecoder, "Wheel decoder settings",        0, { wheelon     }
#if MPXH6300A
	subMenu = mapwarning, "MAP sensor warning", 0, { mapType1!=2 }
#elif MPXH6400A
	subMenu = mapwarning, "MAP sensor warning", 0, { mapType1!=3 }
#else
	subMenu = mapwarning, "MAP sensor warning", 0, { mapType1>1 }
#endif

   menu = "Crank/&WarmUp"
      subMenu = CrankTble,    "Cranking Settings",               9
      subMenu = CrankExtra,   "More Cranking Stuff",        9
      subMenu = AfterStTbl,   "After start Enrichment Settings", 6
      subMenu = std_warmup,   "&Warmup Wizard",                  9

   menu = "Fuel Dual Table&2", { inj2t }
      subMenu = std_constants, "&Constants 2 (DT)",     2
      subMenu = egoControl2,   "&Exhaust Gas Settings", 2
      subMenu = veTable2Tbl,   "&VE Table 2 (DT)"

   menu = "&More settings"
      subMenu = idleControl,    "&Idle Control",                       0, { !fidleUse  }
      subMenu = idleControl2,   "Idle Control (Closed Loop Settings)", 0, { pwmIdle &  (pwmidlewhen >1) }
      subMenu = HardLim,        "Rev Limiter Type"
      subMenu = RevLimiterS,    "Rev Limits",                        4
      subMenu = LambdaSet,   "&Lambda AFR Settings"
      subMenu = afrTable1Tbl,  "A&FR Targets for VE Table 1", 0, { AfrTar }
      subMenu = afrTable2Tbl,  "AF&R Targets for VE Table 3", 0, { UseVE3 && AfrTar2 }
      subMenu = OpenLoop,    "&Open Loop Mode"
      subMenu = OvrRun,      "Over &Run Settings"
      subMenu = tachoutput,     "Tacho output pin",                    0
      subMenu = BarroCor,     "&Barometric Correction", { baroCorr1 }
      subMenu = outputs,      "&Outputs"
      subMenu = outputs2,     "S&hift light/ fan/ Output 3+4"


   menu = "Spar&k", { ignmode }
      subMenu = sparkSettings,   "&Spark Settings"
      subMenu = sparkTbl,        "Spark Table &1"
      subMenu = sparkTbl2,       "Spark Table &2",              0, { STTable2On }
      subMenu = SparkT2,         "Spar&k Table selection",
      subMenu = IdleAdvance,     "Idle Advance settings",
      subMenu = Knock,           "Kn&ock System"
      subMenu = IatCltIg,        "&IAT/Clt Related Ignition"
      subMenu = dwellSettings,   "Dwell settings"
      subMenu = wheelsim,        "Stim for wheel"
 ;     subMenu = rotarySettings,  "Rotary trailing settings"
 ;     subMenu = rotarySplitType, "Rotary trailing output type", 0, { rotary2    }
 ;     subMenu = splitTbl,        "Rotary split Table ",         0, { rotary2    }
      subMenu = splitTbl,  "Rotary trailing settings"
      subMenu = oddwheel,     "Oddfire Wheel settings",        7, { wheelon && oddfire }

   menu = "&Advanced"
      subMenu = fuelTable,   "&Fuel table selection"
      subMenu = veTable3Tbl,   "Fuel VE Table &3",                 0, { UseVE3 }
      subMenu = LaunchSettings, "Launch &Control"
      subMenu = WaterInj,     "&Water Injection Settings",     0, { !x2use      }
      subMenu = NosSystem,    "&Nitrous System"
    ; subMenu = NosSystem2,   "&Nitrous Stage 2",              0, { nitrousUse && n2ostage2 }
      subMenu = Staged,       "&Staged Injection"
      subMenu = MoreStaged,   "More Staged Injection",         0, { IStagedMode }
      subMenu = OvrBoo,         "Over &Boost Protection"
      subMenu = traction,       "Anti-Rev System (&Traction Control)"
      subMenu = traction2,      "Anti-Rev System cont...",             0, { TractionOn }
      subMenu = boostControl,   "&Boost Control",                      0, { boostUse   }
      subMenu = boostTbl1,      "Boost kpa targets table1",            8, { boostUse   }
      subMenu = boostTbl3,      "Boost kpa targets table2",            8, { boostUse && BooTbl2Use }
      subMenu = boostTbl2,      "Boost duty targets",                  8, { boostUse   }
      subMenu = boostIAT,       "IAT Related Boost",                   0, { boostUse   }
      subMenu = clt_IATCorrC, "Coolant-Related Air Density"
;      subMenu = clt_IATCorr, "Coolant-Related Air Density"
      subMenu = advanced,     "&Advanced code options"


; the following menu gives access to some spare bytes of flash for education
;(uncomment to use it)
;      subMenu = demo,            "Example Demo"

   menu = "&Tuning"
      subMenu = std_realtime, "&Realtime Display"
      subMenu = std_separator
      subMenu = veTable1Map,  "VE Table &1"
      subMenu = veTable2Map,  "VE Table &2",        0, { inj2t      }
      subMenu = veTable3Map,  "VE Table &3",        0, { UseVE3     }
      subMenu = sparkMap,     "Spar&k Table1",      0, { ignmode    }
      subMenu = sparkMap2,    "Spark &Table2",      0, { STTable2On }
      subMenu = splitMap,     "Rotary Split",       0, { rotary2    }
      subMenu = boostMap1,    "Boost 1",            8, { boostUse   }
      subMenu = boostMap3,    "Boost 2",            8, { boostUse   && BooTbl2Use }
      subMenu = boostMap2,    "Boost duty targets", 8, { boostUse   }

   menu = "Help"
      plugIn  = "%INSTALL_DIR%/README.txt", "&ReadMe File"
      plugIn  = "%WORKING_DIR%/audit.log",  "A&udit Log"
      subMenu = std_separator
      subMenu = Fhelp1, "&General Help"
      subMenu = Fhelp2, "&Fuel Table Selection"
      subMenu = Fhelp3, "&Lambda Settings"
      subMenu = Fhelp4, "&Hard Cut Limiter Type"
      subMenu = Fhelp5, "&Launch Control"
      subMenu = Fhelp6, "Accel Decel &Mode"
      subMenu = Fhelp7, "Rev Limiter"
      subMenu = Ihelp1, "Idle Control"
      subMenu = Ihelp2, "Idle Control (Closed Loop Settings)"
      subMenu = Shelp3, "&Spark Settings"
      subMenu = Shelp4, "Spar&k Table Selection"
      subMenu = Shelp5, "Wheel decoder Settings"
      subMenu = Shelp1, "Kn&ock System"
      subMenu = Shelp2, "&IAT/CLT Related Ignition"
      subMenu = Chelp1, "&Codebase and output functions"
      subMenu = Chelp2, "&Advanced code options"
      subMenu = Chelp3, "&Barometric Correction"
      subMenu = Chelp4, "&Water Injection"
      subMenu = Chelp5, "&NOS System"
      subMenu = Chelp6, "Staged Injection Syste&m"
;      subMenu = Chelp7, "MAP Sensor Selection"
      subMenu = Chelp8, "Over Run Settings"

   menuDialog = splitTbl
     menu = "Rotary Trailing &Settings" 
      subMenu = rotarySettings,  "Rotary trailing settings"
      subMenu = rotarySplitType, "Rotary trailing output type"

menuDialog = clt_IATCorrC
   menu = "&Settings"
      subMenu = clt_IATCorr, "Coolant-Related Air Density"

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

[UserDefined]

   dialog = mapwarning, "MAP Sensor setup readme"
      field = "WARNING!!!"
      field = ""
      field = "When using a 3bar or 4bar map sensor you"
      field = "MUST use the Megatune Configurator to enable"
      field = "that sensor type - otherwise all of the kpa"
      field = "values in Megatune will display incorrectly"
      field = ""

   dialog = egoControl1, "EGO Control",1
      help = egoHelp
      field = "EGO Sensor Type",                     egoType1
      field = "EGO Switch Point",                    egoSwitch1
      field = "Ignition Events or msec per Step",    egoCount1
      field = "Controller Step Size",                egoDelta1
      field = "Controller Authority +/-",            egoLimit1
      field = "Active Above Coolant Temp",           egoTemp1
      field = "Active Above RPM",                    egoRPM1
      field = "EGO Correction Step Counter",         egoIgnCount

   dialog = egoControl2, "EGO Control for Second O2 Sensor",2
      field = "Second Lambda fitted on X7?",         TwoLambda
      field = ""
      field = "EGO Sensor Type",                     egoType2,   { TwoLambda }
      field = "EGO Switch Point",                    egoSwitch2, { TwoLambda }
      field = "Controller Step Size",                egoDelta2,  { TwoLambda }
      field = "Controller Authority +/-",            egoLimit2,  { TwoLambda }
      field = "Active Above Coolant Temp",           egoTemp2,   { TwoLambda }
      field = "Active Above RPM",                    egoRPM2,    { TwoLambda }

   dialog = codeBase, "Power cycle after changes", 4
      topicHelp = Chelp1
      field = "#Choose one code type"
      field = "Distributor (MSnS)",             msnsCyl
      field = "Neon/420A decoder",              neonCrank
      field = "Wheel decoder (e.g. 36-1)",      wheelon
      field = "EDIS",                           edis
      field = "EDIS multispark",                edismulti, { edis }
      field = "TFI ignition",                   tfi
      field = "HEI Ignition",                   hei7
      field = "#Choose input/output pins to use"
      field = "FIDLE function",                 fidleUse
      field = "LED17(D14) function",            led17Use
      field = "LED18(D15) function",            led18Use
      field = "LED19(D16) function",            led19Use
      field = "Multiplex ignition?",            toy_dli
      field = "X2 (JS0) function",              x2use
      field = "X4 (JS2) function",              boostUse
      field = "output3/Spark D",                out3sparkd
      field = "pin10 shift / Spark E",          spkeop
      field = "knock in / Spark F",             spkfop

   dialog = wheeldecoder, "Power cycle after changes", 4
      topicHelp = Shelp5
      field = "Wheel decoder base teeth",      numteeth
      field = "2nd trigger enable",            wd_2trig
      field = "2nd trigger active edge",       trig2fall, { wd_2trig  }
      field = "2nd trigger and missing teeth", miss2nd,   { wd_2trig  }
      field = "Missing teeth",                 onetwo,    { !wd_2trig || ( wd_2trig && miss2nd) }
      field = "Trig pos A",                    trig1
      field = "Trig return pos A",             trig1ret
      field = "Trig pos B",                    trig2
      field = "Trig return pos B",             trig2ret
      field = "Trig pos C",                    trig3
      field = "Trig return pos C",             trig3ret
      field = "Trig pos D",                    trig4
      field = "Trig return pos D",             trig4ret
      field = "Trig pos E",                    trig5
      field = "Trig return pos E",             trig5ret
      field = "Trig pos F",                    trig6
      field = "Trig return pos F",             trig6ret
      field = "Dual dizzy mode (see F1)",       dualdizzy
      field = "Wheel decoder routine",             wheel_old

   dialog = oddwheel, "Oddfire wheel offsets", 7
    field = "!HIGHLY EXPERIMENTAL"
    field = ""
    field = "Output A offset steps", outaoffs, { trig1 }
    field = "plus value",            outaoffv, { trig1 }
    field = "Output B offset steps", outboffs, { trig2 }
    field = "plus value",            outboffv, { trig2 }
    field = "Output C offset steps", outcoffs, { trig3 }
    field = "plus value",            outcoffv, { trig3 }
    field = "Output D offset steps", outdoffs, { trig4 }
    field = "plus value",            outdoffv, { trig4 }
    field = "Output E offset steps", outeoffs, { trig5 }
    field = "plus value",            outeoffv, { trig5 }
    field = "Output F offset steps", outfoffs, { trig6 }
    field = "plus value",            outfoffv, { trig6 }

   dialog = advanced, "Power cycle after changes",4
      topicHelp = Chelp2
      field = "#Functions from DT (*=B+G default)"
      field = "Hybrid Alpha N",                    hybridAN
      field = "#"
      field = "!Unless your using a MAF,"
      field = "!ENSURE MAF SET TO NO!!"
      field = "Mass Air Flow Meter MAF: (X7)",     AFMUse
      field = "Air Density Correction:",           AirCorAFM,    { AFMUse }
      field = ""
      field = "EDIS multispark",                   edismulti,    { edis   }
      field = "EDIS multispark rpm limit",         edismultirpm, { edis   && edismulti }
      field = ""
      field = "False trigger protection",  falsetrig_dis

   dialog = fuelTable, "Fuel Table selection",4
      topicHelp = Fhelp2
      field = "* = B+G default   ^ = MSnS default"
      field = "DT = Dual Table default"
      field = "Injector channel 1:"
      field = "use table : always 1"
      field = "GammaE:",                            inj1g
      field = "Injector channel 2:"
      field = "use table:",                         inj2t
      field = "GammaE:",                            inj2g
      field = "Pulse inj2 during cranking",         inj2cr
      field = ""
      field = "Switch VE Table1 for VE Table3 when"
      field = "NOS on or when Pin6 JP1 low.",       UseVE3
      field = "Delay for changing to VE3",          VE3Delay, { UseVE3 }

   dialog = RevLimiterS, "Rev Limiter", 4
      topicHelp = Fhelp7
      field = "Rev Limiter"
      field = "MSnS Soft rev limit",          SoftRevLim
      field = "MSnS Soft limit retard",       SoftLimRetard
      field = "MSnS Soft limit max time",     SoftLimMax
      field = "MSnS Hard Rev limit",          HardRevLim

   dialog = outputs,"Outputs",4
      topicHelp = Fhelp1
      field = "Output turns off when actual value ="
      field = "On/Off limit - Hysterisis"
      field = "To create an output window set Upper"
      field = "Limit. For normal output set to zero"

      field = "OUTPUT 1 (X4 / JS2) source", out1src,   { !boostUse }
      field = "On-Off Limit",               out1lim,   { !boostUse }
      field = "Off Hysterisis",             out1Hysis, { !boostUse }
      field = "Upper Limit",                Out1UpLim, { !boostUse }
      field = "Output1 Invert for Temps",   InvOut1,   { !boostUse }
      field = ""
      field = "OUTPUT 2 (X5 / JS3) source", out2src
      field = "On-Off Limit",               out2lim
      field = "Off Hysterisis",             out2Hysis
      field = "Upper Limit",                Out2UpLim
      field = "Output2 Invert for Temps"    InvOut2

   dialog = outputs2,"More Outputs",4
      topicHelp = Fhelp1
      field = "OUTPUT 3 (U1 pin15)"
      field = "Source or Source+OUTPUT1",        Out3_Out1,   { !out3sparkd }
      field = "OUTPUT 3 (PTD0) source",          out3src,     { !out3sparkd }
      field = "On-Off Limit",                    out3lim,     { !out3sparkd }
      field = "Off Delay Timer",                 out3Timer,   { !out3sparkd }
      field = ""
      field = "OUTPUT 4 (LED18)"
      field = "OUTPUT 4 (LED18) source",         out4src,     { !out4FAN && led18_2Use }
      field = "On-Off Limit",                    out4lim,     { !out4FAN && led18_2Use }
      field = "Use above source or FAN Control", out4FAN,     { led18_2Use }
      field = ""
      field = "Shift Light",                     shiftUse,    { !spkfop }
      field = "Shift light Lower Threshold",     ShiftLower,  { shiftUse }
      field = "Shift Light Upper Threshold",     ShiftUpper,  { shiftUse && (!wd_2trig) }
      field = "Fan control (X2 / JS0 or LED18)"
      field = "Fan on temperature",              efanontemp,  { x2use + out4FAN }
      field = "Fan off temperature",             efanofftemp, { x2use + out4FAN }

   dialog = sparkSettings,"Spark Settings",3
      topicHelp = Shelp3
      field = "Trigger Angle = Setting + Additions"
      field = "e.g. 77+45= 122"
      field = "Trigger Angle ",               TrigAng
      field = "Trigger Angle addition",       Trig_plus, { !oddfire  }
      field = "Note: If req Trigger above 90"
      field = "then select +22.5 Deg"
      field = "if above 112.5 select +45"
      field = ""
      field = "Cranking Timing",              TrigCrank, { !edis     }
      field = "Cranking advance Angle (see F1)",       CrankAng,  { TrigCrank + edis + dwellcont }
      field = "Hold Ignition",                IgHold
      field = "Spark Output Inverted (see F1)",        IgInv
      field = "EXPERIMENTAL Oddfire support", oddfire
      field = ""
      field = "Fixed Angle (-10 = use map)",  FixAng
      field = "Trim Angle",                   Trim

   dialog = IdleAdvance, "Idle Advance Settings",3
      field = "#Idle Advance Settings"
      field = "Idle advance (-10 = use map)", IdleAdv
      field = "Idle advance TPS threshold",   IdleAdvTPS
      field = "Idle advance RPM threshold",   IdleAdvRPM
      field = "Idle advance CLT threshold",   IdleAdvCLT
      field = "Idle advance Wait Time",       IdleDelayTime

   dialog = rotarySplitType, "Rotary Trailing Output Type",4
      field = "trailing output type", rotaryFDign

   dialog = rotarySettings,"Rotary Settings",9
      field = "#Experimental trailing split"
      field = "For twin rotor only, check msefi before using"
      field = "trailing split support",                          rotary2
      field = "!NOTE!"
      field = "!In the split table:"
      field = "\t>20 means trailing OFF"
      field = "\t0 means fire simultaneously"
      field = "\tother values are the trailing delay in degrees"
      field = ""
      field = "Fixed split for testing (-10 = map)",             fixedsplit, { rotary2 }

   dialog = dwellSettings,"Dwell Settings",4
      topicHelp = DwellHelp
      field = "Dwell control",                dwellcont
      field = "Use: Spark output duty cycle", dwellduty50, { !dwellcont }
      field = "Or:"
      field = "  Cranking dwell",             dwellcrank,  { dwellcont  }
      field = "  Running dwell",              dwellrun,    { dwellcont  }
      field = "Minimum discharge period",     mindischg,   { dwellcont  }
      field = ""
      field = "#Note"
      field = "these times are for 12V. Battery voltage correction"
      field = "is applied. At higher voltages the time is reduced"
      field = "and when low it is increased"

   dialog = wheelsim,"Simulator for wheel",4
      topicHelp = Stim4WHelp
      field = "!ONLY FOR USE ON STIM - DO NOT USE ON CAR"
      field = ""
      field = "Wheel simulator",         whlsim
      field = "Number of steps/outputs", whlsimcnt

   dialog = tachoutput,"Tacho output pin",4
     topicHelp = TachoHelp
      field = "!MAKE SURE THIS PIN IS NOT ALREADY IN USE"
      field = ""
      field = "Tacho output pin",     tachconf
      field = "Normal or half speed", tachconfdiv

   dialog = idleControl, "PWM 2-Wire Idle Control", 9
      topicHelp = Ihelp1

      field = "#Algorithm",           pwmIdle
      field = "When to use PWM idle", pwmidlewhen, { pwmIdle }
      field = "Idle Valve Frequency", idlefreq,    { pwmIdle }
      field = "Cranking",             idlecrankdc, { pwmIdle }
      field = "Mininum",              idlemindc,   { pwmIdle & (pwmidlewhen >1) }
      field = "Closed",               idleclosedc, { pwmIdle & (pwmidlewhen >1) }

      field = "#Warmup (open loop) Settings"
      field = "Idle frequency at lower temp", idle_dc_lo, { pwmIdle & (pwmidlewhen !=0) & (pwmidlewhen != 2) }
      field = "Idle frequency at upper temp", idle_dc_hi, { pwmIdle & (pwmidlewhen !=0) & (pwmidlewhen != 2) }
      field = "Idle Speed Target"

      field = "*Fast Idle (lower) Temp",            fastIdleTemp,   { pwmIdle }
      field = "*Slow Idle (upper) Temp",            slowIdleTemp,   { pwmIdle }
      field = "Fast Idle Speed",                    fastIdleRPM,    { pwmIdle & (pwmidlewhen >1) }
      field = "Slow (warm) Idle Speed",             slowIdleRPM,    { pwmIdle & (pwmidlewhen >1) }
    ; field = "* Denotes item also used for warmup"
      field = "#Dashpot Settings"
      field = "TPS threshold",                      idleThresh,     { pwmIdle & (pwmidlewhen >1) }
      field = "Idle Activation adder",              irestorerpm,    { pwmIdle & (pwmidlewhen >1) }
      field = "Dashpot Settle Time",                idledelayclock, { pwmIdle & (pwmidlewhen >1) }
      field = "Dashpot Adder",                      idledashdc,     { pwmIdle & (pwmidlewhen >1) }

   dialog = idleControl2,    "Idle Control Continued", 9
      topicHelp = Ihelp2
      field = "Deadband Range",      Ideadbnd,     { pwmIdle }
      field = "#Adaptive Idle Deviation Control"
    ; field = "RPM Deviation Control"
      field = "This determines how fast the closed loop control responds"
      field = "based on how far from the target the current RPM is"
      field = "if rpm = target plus 'Upper Limit', the recovery time"
      field = "is 'Fast Recovery'"
      field = "Upper Limit",         ictlrpm2,     { pwmIdle }
      field = "Lower Limit",         ictlrpm1,     { pwmIdle }
      field = "Fast recovery",       idlePeriod2,  { pwmIdle }
      field = "Slow recovery",       idleperiod,   { pwmIdle }
      field = "#Other time constants"
      field = "Closure Speed",       Idashdelay,   { pwmIdle & (pwmidlewhen >1) }
      field = "Startup Delay",       idlestartclk, { pwmIdle & (pwmidlewhen >1) }

   dialog    = boostIAT, "IAT Related Boost",4
        topicHelp = Fhelp1
        field = "#Remove boost related to IAT"
        field = "When IAT above",             IATBoostSt
        field = "remove 1 psi (7KPa) every:", IATBoost
        field = "when tps above:",            TPSBooIAT

   dialog =  boostControl, "Boost Controller Parameters", 4
      topicHelp = Fhelp1
      field = "Solenoid PWM Rate",              freqDiv
      field = "Controller Update",              bcUpdateRate
      field = "Proportional Gain",              pGain
      field = "Differential Gain",              dGain
      field = ""
      field = "Increase Voltage =",             BoostDir
      field = ""
      field = "Switch Boost Target Tables when"
      field = "NOS on or JP1 pin6 low",         BooTbl2Use
      field = ""
      field = "Closed loop kpa limit",          bc_max_diff
      field = "This is the difference between target"
      field = "boost level and actual. If greater"
      field = "than this limit then goes open loop"
      field = "and uses duty cycle from table"
      field = "Note. 0% duty = low boost, 100% = full boost"
	field = ""
      field = "Typical ambient pressure",		Pambient, { !baroCorr1 }

;   ENHANCED STUFF
   dialog = LaunchSettings, "Launch Control", 4
      topicHelp = Fhelp5
      field = "#Launch Control"
      field = "Launch Control",                 launchUse
      field = "Retard Ignition above  ",        LachRpm,       { launchUse && (ignmode>0) }
      field = "Retard to :  ",                  LachDeg,       { launchUse && (ignmode>0) }
      field = "Enable Launch when TPS above  ", LachTps,       { launchUse }
      field = "Launch Control Hard Rev Limit",  LaunchLim,     { launchUse }
      field = "Variable Launch",                VLaunch,       { launchUse }
      field = "Flat shift arming rpm",          LC_flatsel,    { launchUse }
      field = "Flat shift mode retard above",   LC_f_slim,     { launchUse && (ignmode>0) }
      field = "Retard to :  ",                  LC_f_limangle, { launchUse && (ignmode>0) }
      field = "Flat shift hard rev limit",      LC_flatlim,    { launchUse }

   dialog = LambdaSet, "Lambda Sensor Targets", 4
      topicHelp = Fhelp3
      field = "#Set to 255KPa for B+G Default"
      field = "Change Ego Limit above",                     EgoLimKPa
      field = "Change Ego Limit to",                        EgoLim2
      field = ""
      field = "#8x8 AFR Target Tables"
      field = "For VE Table 1",                             AfrTar
      field = "For VE Table 3",                             AfrTar2
      field = "Control Algorithm for AFR tables",           KpaTPSTar
      field = ""
      field = "Use Target tables:",                         TPSTar
      field = "Use Enrichment EGO Switch Point until TPS:", TPSAFRPoint, { TPSTar }
      field = ""


   dialog = OpenLoop, "Open Loop Mode", 4
      topicHelp = OpenLoopHelp
      field = "Open Loop O2 Correction:",             OLoopEgo
      field = ""
      field = "If TPS selected then go Open Loop @",  TpsOn
      field = "If KPa selected then go Open Loop @",  KPaOn
      field = "Set selection to zero for no Openloop"
      field = "Restart MS after changes"

   dialog = WaterInj,"Water Injection Setpoints", 4
        topicHelp = Chelp4
      field = "#Please Note:"
      field = "O2 correction turns OFF when water starts"
      field = "Water Injection",                          WaterInj
      field = "Start Water Injection when Boost above",   StartWIKPa, { WaterInj }
      field = "and engine speed above:",                  WaterIRpm,  { WaterInj }
      field = "and Manifold Air Temp above",              WaterIIat,  { WaterInj }

   dialog = IatCltIg, "IAT/Clt Related Ignition", 4
      topicHelp = Shelp2
      field = "Coolant/Iat Related Advance",              CltAdv
      field = "Add 1 degree of ignition advance every",   IgAdvDeg,  { CltAdv }
      field = "when below: Coolant setpoint ",            IgAdvTemp, { CltAdv }
      field = "Note: IAT Retard will work when 3C above "
      field = "           Coolant setpoint"
      field = "Max allowable added ignition advance  ",   MaxIatAdv, { CltAdv }
      field = " "
      field = "Pull 1 degree of ignition retard every",   IgRetDeg,  { CltAdv }
      field = "when MAP above",                           IatAdvKpa, { CltAdv }
      field = "and IAT above",                            IgRetTemp, { CltAdv }

   dialog = Knock,"Knock Detection System", 4
      topicHelp = Shelp1
      field = "Knock Detector System",           KnockOn
      field = "Ignore Knocks when above",        KnockRpm,   { KnockOn  }
      field = "Ignore Knocks when MAP above ",   KnockKpa,   { KnockOn  }
      field = "Ignore Knocks when below ",       KnockRpmL,  { KnockOn  }
      field = "First Knock: Retard by",          KnockRet,   { KnockOn  }
      field = "Subsequent Knocks: Retard by",    KnockSb,    { KnockOn  }
      field = "Max Retard Allowed ",             KnockMax,   { KnockOn  }
      field = "Advance when no knock:",          KnockAdv,   { KnockOn  }
      field = "Wait time between steps:",        KnockTim,   { KnockOn  }
      field = ""
      field = "#If using Boost Control:"
      field = "Amount of boost to remove/add in"
      field = "the above steps",                 KnockBoost, { boostUse && KnockOn }
      field = "Maximum boost to remove",         BoostMaxKn, { boostUse && KnockOn }

   dialog = SparkT2, "Spark Table selection", 4
      topicHelp = Shelp4
      field = "Use Spark Table 1"
      field = "until JP1 pin6 input low or"
      field = "NOS system on, then use:",          STTable2On
      field = "Delay before switching to Table 2", ST2Delay,  { STTable2On }

   dialog = OvrBoo, "Over Boost Protection", 4
      topicHelp = Fhelp1
      field = "OVER BOOST PROTECTION"
      field = "Over Boost Hard Cut if Boost hits", OvrBKpa

   dialog = HardLim, "Hard Cut/Limiter Type", 4
      topicHelp = Fhelp4
      field = "!**********C A U T I O N**************"
      field = "!IGNITION CUT IS NOT SUITABLE"
      field = "!FOR VEHICLES FITTED WITH"
      field = "!  CATALYTIC CONVERTERS"
      field = "!*Spark Cut doesn't work for Edis users*"
      field = "BASE NUMBER to cut sparks from",         SparkCutBase
      field = "#REV LIMITER"
      field = "Hard Cut Type",                          HCutType
      field = "Cut 'n' sparks out of BASE NUMBER",      HCutSpark
      field = "#LAUNCH CONTROL"
      field = "Hard Cut Type",                          HCutLCType
      field = "Cut 'n' sparks out of BASE NUMBER",      HCutLCSpark
      field = "#OVER BOOST PROTECTION"
      field = "Hard Cut Type",                          OvrBCutType
      field = "Cut 'n' sparks out of BASE NUMBER",      SparkCutBNum

   dialog = NosSystem, "Nitrous System", 4
      topicHelp = Chelp5
      field =   "Nitrous Control",                   nitrousUse
      field =   "Turn N2O on when above",            NosRpm,        { nitrousUse }
      field =   "And Coolant Temp above",            NosClt,        { nitrousUse }
      field =   "And TPS >",                         NosTps,        { nitrousUse }
    ; field =   ""
      field =   "Additional Fuel PW @ N2O min rpm",  NosPWLo,       { nitrousUse }
      field =   "NOS Max RPM",                       NosRpmMax,     { nitrousUse }
      field =   "Additional Fuel PW @ N2O Max RPM",  NosPWHi,       { nitrousUse }
    ; field =   ""
      field =   "If ST2 off Retard Ignition by"      NosAngle,      { nitrousUse }
    ; field =   ""
      field =   "If Dual Table enrich ",             DtNos,         { nitrousUse }
      field =   "Nitrous delay after launch",        N2Odel_launch, { nitrousUse && launchUse    }
      field =   "Nitrous delay after flat shift",    N2Odel_flat,   { nitrousUse && launchUse    }
;not yet implemented field = "Nitrous fuel hold on", N2Oholdon,     { nitrousUse }
      field =   ""
      field =   "Turbo Anti-Lag System: (see help)", NosLagSystem,  { nitrousUse }
      field =   "Fire N2O when conditions above met"
      field =   "and MAP above",                     NosLowKpa,     { nitrousUse && NosLagSystem }
      field =   "and MAP below",                     NosHiKpa,      { nitrousUse && NosLagSystem }
      field =   ""
    ; field =   "Enable 2nd stage",                  n2ostage2,     { nitrousUse }

   dialog = NosSystem2, "Nitrous System stage 2", 7
;     topicHelp = Chelp5
      field = "Enable stage 2 above",             Nos2Rpm
      field = "NOS Max RPM",                      Nos2RpmMax
      field = "delay after stage1",               Nos2delay
      field = "Retard Ignition by",               Nos2Angle
      field = "Additional Fuel PW @ N2O min rpm", Nos2PWLo
      field = "Additional Fuel PW @ N2O Max RPM", Nos2PWHi


   dialog = Staged, "Staged Injection", 4
      topicHelp = Chelp6
      field = "#STAGED INJECTION SETTINGS"
      field = "  Not suitable with DT"
      field = "Injector Staging Mode:",                       IStagedMode
      field = "#Injector Bank 2 off until:"
      field = "Staging Point (RPM/100, KPa, or TPSADC)",      StgTrans,     { IStagedMode  }
      field = "Staging Off Delta (units as above)",           StgDelta,     { IStagedMode  }
      field = "Then Reduce Banks #1, #2 by Scaling Factor"
      field = "Staged Scaling Factor (Prim Flow/Total Flow)", ScaleFac,     { IStagedMode  }
      field = ""
      field = "Staging second Parameter",                     StagedMAP2nd, { IStagedMode  }
      field = "Staging on one or both params",                StagedAnd,    { StagedMAP2nd }
      field = "!Restart MS after changes"

   dialog = MoreStaged, "More staging settings",3
      field = "#MORE STAGED INJECTION SETTINGS"
      field = ""
      field = "Injector 2nd parameter kPa",   Stg2ndParmKPA, { StagedMAP2nd }
      field = "Injector 2nd parameter delta", Stg2ndParmDlt, { StagedMAP2nd }
      field = ""
      field = "Injector staging delay",       StgCycles


   dialog = OvrRun, "Over Run Fuel Cut", 4
      topicHelp = Chelp8
      field = "Over Run Fuel Cut",         OvrRunC
      field = "Cut fuel when:"
      field = "RPM greater than:",         OvrRunRpm,  { OvrRunC }
      field = "and KPa lower than:  ",     OvrRunKpa,  { OvrRunC }
      field = "and TPS lower than:  ",     OvrRunTps,  { OvrRunC }
      field = "and coolant greater than:", OvrRunClt,  { OvrRunC }
      field = "after",                     OvrRunTimr, { OvrRunC }

   dialog = AccelDecc, "Accel Decel Trigger dot", 4
      topicHelp = Fhelp6
      field = "Accel Enrichments Trigger:",        AccDecEnrich
      field = ""
      field = "Accel Timer",                       taeIgnCount
      field = ""
      field = "Decay Accel Enrichment:",           DecayAccel
      field = "Accel value at end of Accel Time:", DecayAcPoint, { DecayAccel   }
      field = ""
      field = "Turn Decel Enrich off when :",      DecelBoost
      field = "Cut Decel Setpoint:",               DecelKPa,     { DecelBoost   }
      field = ""
      field = "If MAPdot:"
      field = " Turn Accel Enrich off in boost",   KPaDotBoost,  { AccDecEnrich }
      field = " Turn Accel Enrich off during ASE", AccelMapASE,  { AccDecEnrich }
      field = ""

   dialog = MoreAccel, "RPM Based Accel", 4
        topicHelp = Fhelp6a
        field = "RPM BAsed Accel is triggered as usual via MAP or TPS"
        field = "but it is NOT based on a rate of change of MAP "
        field = "or TPS. The fuel added is based on the engine's RPM."

        field = "RPM Based Accel Enrichment:",      RPMBAsedAE
        field = ""
        field = "Engine Speed high",                RPMAE1,     { RPMBAsedAE }
        field = "Engine Speed mid - high",          RPMAE2,     { RPMBAsedAE }
        field = "Engine Speed low - mid",           RPMAE3,     { RPMBAsedAE }
        field = "Engine Speed low",                 RPMAE4,     { RPMBAsedAE }
        field = ""
        field = "Enrichment for high speed:",       RPMmS4,     { RPMBAsedAE }
        field = "Enrichment for mid - high speed:", RPMmS3,     { RPMBAsedAE }
        field = "Enrichment for low - mid speed:",  RPMmS2,     { RPMBAsedAE }
        field = "Enrichment for low speed:",        RPMmS1,     { RPMBAsedAE }
        field = ""
        field = "MAP Threshold:",                   mapThresh4, { RPMBAsedAE }
        field = "TPS Threshold:",                   tpsThresh4, { RPMBAsedAE }
        field = "Accel Time:",                      taeTime4,   { RPMBAsedAE }


   dialog = BarroCor, "Barometric Correction", 4
      topicHelp = Chelp3
      field = "To help stop processor resets causing"
      field = "the engine to run weak or rich"
      field = "Max KPa for Baro Correction",        BarroHi
      field = "Min KPa for Baro Correction",        BarroLow
      field = ""
      field = "Constant Baro corr in Alpha_n:",     AlphBaroCor, { algorithm1 }
      field = ""
      field = "USE same sensor as primary sensor"
      field = "MAP sensor connected to X7"
      field = "Constant Baro Correction:",          ConsBarCor


   dialog = traction, "Anti-Rev System(Traction Control)", 4
      topicHelp = Fhelp1
      field = "Traction Control",                     TractionOn
      field = "MODE=:",                               TractMode
      field = "(RPM Based)RPMdot Threshold",          RPMThresh,   { !TractMode }
      field = "(VSS Based)Sensor Differential",       TractScale,  { TractMode  }
      field = "(VSS Based)Low Speed Slip Threshold ", TractSlip,   { TractMode  }
      field = "(VSS Based)Half Speed Slip Threshold", TractSlipH,  { TractMode  }
      field = "Operate Anti-Rev between Max and Min"
      field = "(VSS Based)Max Undriven input",        TractVSSMax, { TractMode  }
      field = "(VSS Based)Min Undriven input",        TractVSSMin, { TractMode  }
      field = "Enrichment Bins (mSec)"
      field = "",                                     RPM1S
      field = "",                                     RPM2S
      field = "",                                     RPM3S
      field = "",                                     RPM4S
      field = "Retard Ignition by",
      field = "",                                     TractRet1,   { ignmode    }
      field = "",                                     TractRet2,   { ignmode    }
      field = "",                                     TractRet3,   { ignmode    }
      field = "",                                     TractRet4,   { ignmode    }

   dialog = traction2, "Anti-Rev System cont...", 4
      topicHelp = Fhelp1
      field = "Spark Cut 'n' from Base Value"
      field = "",                              TractSC1,  { ignmode    }
      field = "",                              TractSC2,  { ignmode    }
      field = "",                              TractSC3,  { ignmode    }
      field = "",                              TractSC4,  { ignmode    }
      field = ""
      field = "Turn NOS off during Anti-Rev?", TractNOS,  { nitrousUse }
      field = ""
      field = "Retard, Enrichment + Spark cut"
      field = "for nn Engine Cycles"
      field = "",                              TractCyc1
      field = "",                              TractCyc2
      field = "",                              TractCyc3
      field = "",                              TractCyc4
      field = "or untill:",                    TractCySec

   dialog = CrankExtra, "More Cranking Stuff",9
      topicHelp = Chelp9a
      field = "Cranking RPM",                       CrankRPM
      field = "TPS value for flood clear",          tpsflood
      field = ""
      field = "#Extra fuel for cranking:"
      field = "Use First Start Enrichment:",        ExFuelCrank
      field = "Extra Cranking Fuel Enrichment: ",   ExtraFMult, { ExFuelCrank }
      field = "If normal cranking PW = 10.0mS and "
      field = "Enrichment = 50% then PW = 15.0mS"

   dialog = CrankTble, "Cranking / Prime Table", 9
      topicHelp = Chelp9
      field = "Prime Pump when",             AlwaysPrime
      field = "Fire Priming Pulse",          PrimeLate
      field = "Priming PW Source",           PrimeTBox
      field = "Standard Priming PW:",        PrimePulse, { PrimeTBox }

      field = "Cranking Pulse Width Temps",    crankpwip
#if CELSIUS
      field = "#Cranking/Priming PW Table"
      field = " -40 C       ",  CrankPWT1
      field = " -29 C       ",  CrankPWT2
      field = " -18 C       ",  CrankPWT3
      field = " -7  C       ",  CrankPWT4
      field = "  4  C       ",  CrankPWT5
      field = " 16  C       ",  CrankPWT6
      field = " 27  C       ",  CrankPWT7
      field = " 38  C       ",  CrankPWT8
      field = " 54  C       ",  CrankPWT9
      field = " 71  C       ",  CrankPWT10
#else
      field = "#Pulse Widths"
      field = " -40 F       ",  CrankPWT1
      field = " -20 F       ",  CrankPWT2
      field = "  0  F       ",  CrankPWT3
      field = "  20 F       ",  CrankPWT4
      field = "  40 F       ",  CrankPWT5
      field = "  60 F       ",  CrankPWT6
      field = "  80 F       ",  CrankPWT7
      field = " 100 F       ",  CrankPWT8
      field = " 130 F       ",  CrankPWT9
      field = " 160 F       ",  CrankPWT10
#endif

   dialog = AfterStTbl, "After Start Enrichment (ASE) Settings", 6
      topicHelp = Chelp10
      field = "ASE Timer",           aseIgnCount
      field = "ASE TOTAL Time",      ASETime
      field = ""
      field = "ASE Mode",            ASEFixDe
      field = "MAP mode during ASE", VEFixASE

      field = "Use Fixed ASE/MAP when coolant below:", ASEFixTemp, { ASEFixDe + VEFixASE }
      field = "Fixed ASE/MAP Time Period",             ASEFixTim,  { ASEFixDe + VEFixASE }
      field = "Fixed MAP Value",                       VEFixValue, { VEFixASE }

#if CELSIUS
        field = "#After Start Enrichment Table"

        field = " -40 C       ",  ASETable1
        field = " -29 C       ",  ASETable2
        field = " -18 C       ",  ASETable3
        field = " -7  C       ",  ASETable4
        field = "  4  C       ",  ASETable5
        field = " 16  C       ",  ASETable6
        field = " 27  C       ",  ASETable7
        field = " 38  C       ",  ASETable8
        field = " 54  C       ",  ASETable9
        field = " 71  C       ",  ASETable10
#else
        field = "#After Start Enrichment Table"

        field = " -40 F       ",  ASETable1
        field = " -20 F       ",  ASETable2
        field = "  0  F       ",  ASETable3
        field = "  20 F       ",  ASETable4
        field = "  40 F       ",  ASETable5
        field = "  60 F       ",  ASETable6
        field = "  80 F       ",  ASETable7
        field = " 100 F       ",  ASETable8
        field = " 130 F       ",  ASETable9
        field = " 160 F       ",  ASETable10
#endif

   dialog = clt_IATCorr, "Coolant corrected Air Density", 9
     topicHelp = airdenHelp
        field = "Air Density Correction:",     IATCor
        field = "Correction based on:",        IATCorTy,  { IATCor }

;        field = "!Set both to 25500 for no reduction!"
        field = "Start to reduce correction at:", RPMRedLo, { IATCor }
        field = "End correction at:", RPMRedHi, { IATCor }
        field = ""
        field = "If you want to see air temp gauge instead you need to"
        field = "edit the msns-extra.ini file and find [CurveEditor]"
        field = "Change cltGauge to matGauge"
        field = "Or just look at where the green ball is on the graph"

   dialog = demo, "Demo menu", 3
        field = "spare 3 182", spare3_182
        field = "spare 3 183", spare3_183
        field = "spare 3 184", spare3_184

;*************************** HELP STUFF ***************************************
help = Fhelp1, "General Help"
       webHelp = "http://megasquirt.sourceforge.net/extra/"
       text = "For MS (fuel only) select *.<br>"
       text = "For MSnS select ^<br>"
       text = "<br>"
       text = "For more help or problems please see the Extra Website by clicking the Web Help button.<br>"
       text = "<br>"
       text = "If you can't find an answer there post a thread on http://www.msefi.com<br>"
       text = "or contact"
       text = " james@nscc.info<br>"
       text = "or contact"
       text = " philip.ringwood@ntlworld.com"

help = Fhelp2, "Fuel Table Selection"
       webHelp = "http://megasquirt.sourceforge.net/extra/tableswitch.html"
       text = "INJECTOR CH1 (PW1)"
       text = "This will always use VE Table1<br>"
       text = "GammaE On or OFF = :"
       text = "Accel Enrich, WarmUpEnrich + AirTemp Corr <br>"
       text = "<br>"
       text = "INJECTOR CH2 (PW2)"
       text = "Either use VE Table 1 or 2, 1=Normal 2=DT <br>"
       text = "GammaE On or Off = :"
       text = "Accel Enrich, WarmUpEnrich + AirTemp Corr <br>"
       text = "Pulse Inj CH2 during cranking"
       text = "Do you want CH2 to add fuel whilst cranking <br>"
      text = "<br>"
      text = "The VE Table 1 can be switched to"
      text = "VE Table 3 on the run for use with Spark Table2"
      text = "or on its own if ST2 not selected in"
      text = "Spark Table Selection <br>"
       text = "VE3 will replace VE1 when NOS running or Pin6 JP1 low. <br>"
       text = "This can be used in any mode, but in DT "
       text = "it will obviously only change PW1."
       text = "If not in DT it will change both PW's. <br>"

help = Fhelp3,"Lambda Settings"
       webHelp = "http://megasquirt.sourceforge.net/extra/dualego.htm"
       text = "You can now change the Ego Limit"
       text = "depending on the MAP KPa. If you don't"
       text = "want it to change simply put 255 in the"
       text = "KPa setpoint.<br>"
       text = "<br>"
       text = "There are also 2 AFR target tables. <br>"
       text = "Table 1 contains the target AFR's for"
       text = "VE Table 1.<br>"
       text = "Table 2 contains the target AFR's for"
       text = "VE Table 3.<br>"
       text = "NOTE: These are just targets, they dont"
       text = "replace your VE table and should be"
       text = "thought of as a fine tune for the VE table. <br>"
       text = "If you dont want to use them simply"
       text = "select them off. The target will then "
       text = "be as set in the enrichments page. <br>"
       text = "<br>"
       text = "We have added the facility to run from the target tables when above a certain TPS setpoint. <br>"
       text = "If you want to use this set Use Targets to Above TPS and set the TPS setpoint. <br>"
       text = "<br>"

help = Fhelp4,"Hard Cut Limiter Type"
       text = "If using any spark mode other than Edis then you have the"
       text = "option to cut spark and or fuel in "
       text = "the rev limiting modes. <br>"
       text = "The Base Number is the number of sparks"
       text = "that can be cut from (yy). This value will"
       text = "depend on number of cylinders. <br>"
       text = "Then select how many sparks to cut"
       text = "in each mode(xx).<br>"
       text = "So you will get xx cuts in every yy sparks. <br>"

help = Fhelp5, "Launch Control"
       webHelp = "http://megasquirt.sourceforge.net/extra/launch.htm"
       text  = "Active low input TOMI Header JP1 Pin4 <br>"
       text  = "Typically this is wired to a thumb switch or clutch/brake pedal switch"
       text = "This holds the RPM by first activating a ignition retard <br>"
       text = "then a hard cut to help you get a good Launch <br>"
       text  = "<br>"
       text  = "Variable Launch, when selected,"
       text  = "stores the current engine RPM"
       text  = "as soon as the input is switched low"
       text  = "and uses that as its Hard Cut RPM. <br>"
       text  = "This is for use with a thumb switch"
       text  = "so launch rpm can be altered at the"
       text  = "track.<br>"
       text  = "<br>"
       text  = "The flat shift settings are for use with a clutch switch and allow"
       text  = "for different limits when changing gear. To disable, set the arming"
       text  = "RPM above you maximum rpm"
       text  = "If you press the clutch above the flat shift arming limit then the code"
       text  = "uses the flat shift limits, else it uses the launch limits"

help = Fhelp6, "Accel Decel Mode"
       webHelp = "http://megasquirt.sourceforge.net/extra/mapdot.html"
       text  = "Select between TPSdot / MAPdot accel/decel enrichment <br>"
       text  = "<br>"
       text = "The Accel Timer can be changed from Seconds to Engine Cycle counts. <br>"
       text = "Note that a value of 0.3 could mean 0.3 seconds or 3 ignition pulses.<br>"
       text = "The Cycles option is useful because the enrichment will reduce at higher rpms<br>"
       text = "<br>"
       text = "Normal MS mode finds the increase in PW and holds that till the Accel Timer has timed out. <br>"
       text = "By selecting Decay it will find the increase to add then it will linearly decrease the Enrichment, <br>"
       text = "to the Decay Value by the time the Accel Timer has timed out.<br>"
       text = "<br>"
       text  = "If in MAP mode then you turn off"
       text  = "the accel/decel enrichment when"
       text  = "the engine goes into boost.<br>"
       text = " <br>"
       text = "You can also turn just the Decel off in either mode when in Boost to prevent a lean condition in boost <br>"
       text = "<br>"
       text = "Please see the Accel Wizard in the Tuning Section"

help = Fhelp6a, "RPM Based Accel"
       webHelp =""
       text = "THIS OPTION IS USED FOR A VERY SPECIALISED INSTALL!! 99.9% of installs will not need this option. <br>"
       text = "This is triggered via a rate of change of TPS or MAP as the usual Accel Stuff, BUT the"
       text = " enrichment is based on how fast the engine is running. <br>"
       text = "The MAP and TPS based Accel erichment bins in the Accel Wizard will be ignored in this mode."
       text = " The Trigger values will still be current."
       text = "This is often required with high strung small displacement MOTORS and race motors"

help = Ihelp1, "Idle Control"
; KG rewrote this help info section
       webHelp = "http://megasquirt.sourceforge.net/extra/pwmidle.html"
       text  = "Idle control can be used in B&G on/off, Warm up, or Closed-Loop Modes.<br>"
       text  = "<br>"
       text  = "--B&G on/off simply opens or closes a valve to provide additional air below a temperature threshold<br>"
       text  = "<br>"
       text  = "--Warm up mode linearly varies the duty cycle of a 2 wire solenoid actuated valve to provide"
       text  = "additional air during cold startup, while gradually scaling down the duty cycle until the engine is warm.<br>"
       text  = "<br>"
       text  = "--Closed-loop mode attempts to keep the engine idling at a set rpm by using PWM with a 2 wire"
       text  = "solenoid actuated valve, and actively varying the duty cycle to maintain rpm.<br>"
       text  = "<br>"
       text  = "<br>"
       text  = "Warmup Settings:<br>"
       text  = "--Lower temp idle frequency is the higher duty cycle required to start and run a cold engine.<br>"
       text  = "--Upper temp idle frequency is the duty cycle the idle valve will be scaled down to as the engine warms up.<br>"
       text  = "<br>"
       text  = "These two values are linearly interpolated from one to the other starting from the lower engine temp"
       text  = "to the higher engine temp (fast idle temp, and slow idle temp.)"
       text  = "<br>"
       text  = "--Idle valve frequency<br>"
       text  = "<br>"
       text  = "This is generally something most people will not need to mess with, however, different idle valves are designed to work"
       text  = "best at specific operational frequencies. Note that the Frequency of actuation is 1000 / this value<br>"
       text  = "<br>"
       text  = "Please Note: true DUTY CYCLE% = Lower or Upper dc * 100 / Idle Valve Frequency value"
       text  = "example Freq value - 200  = 50 hz operation, a DC value of 80 = 80*100/200 = 40% true duty cycle<br> "
       text  = "<br>"
       text  = "While most valves operate at 100 hertz, some older style 2-wire valves will work better at frequencies as low as 39 hertz."
       text  = "There is an inverse repationship between frequency of operation and control precision because of the algorithm"
       text  = "Used to control the PWM output. Lower frequencies have more steps between dc values. 100hz operation has 100 steps"
       text  = "and therefore has 1% control steps. 50hz operation has 200 steps and has 0.5% duty cycle steps and that is why"
       text  = "the duty cycle values put into MT need to be double the true DC% value.<br>"
       text  = "Some valves may emit a buzzing sound which can be eliminated by increasing the frequency above 100 hertz.<br>"
       text  = "<br>"
       text  = "There is a formula for modifying the idle valve frequency.  The formula is '10000/desired frequency = x where x is"
       text  = "is the variable you input in megatune.  For example '100' would be 100 hertz, and '50' would be 200 hertz<br>"
       text  = "<br>"
       text  = "<br>"
       text  = "Closed Loop Settings:<br>"
       text  = "<br>"
       text  = "This is fairly experimental code, but with careful manipulation of variables it should be possible to"
       text  = "produce a stable idle.<br>"
       text  = "<br>"
       text  = "-- Cranking (dc) is the duty cycle required at cranking.<br>"
       text  = "-- Minimum (dc) is the duty cycle slightly lower than a warm idle dc when regulated.<br>"
       text  = "-- Closed (dc) is the duty cycle where the valve closes.<br>"
       text  = "The values here follow the rule above and are related to teh frequency selected and are not true DC except when the idlefreq values is 100.<br>"
       text  = "Some valves are normally closed (use 0 here) others require a certain DC to clsoe and will regulate"
       text  = "above this value. Bosch 2 wire valves are normally open, close at 25% and regulate at about 40%. <br>"
       text  = "--Fast Idle RPM is the idle target for the engine at, or below the fast idle temperature.<br>"
       text  = "--Slow Idle RPM is the idle target for the engine at, or above the slow idle temperature (fully warmed up).<br>"
       text  = "<br>"
       text  = "The two RPM set points are linearly interpolated between the two temperatures to provide a smooth"
       text  = "transition during warmup<br>"
       text  = "<br>"
       text  = "--TPS Threshold is the point above which the idle valve closes in ADC (as it is no longer needed).<br>"
       text  = "--Idle Activation (rpm) is 'how many rpm' above idle that the idle valve returns to operation after the throttle"
       text  = "has been opened and closed again. This follows the idle speed as it is interpolated from Fast Idle RPM to Slow Idle RPM<br>"
       text  = "--Dashpot Settle is the wait time required after a dashpot event for the rpms to settle below the "
       text  = "idle activation point. After a dashpot it is possible that rpms will overshoot the activation point and this is the time required to settle below activation point.<br>"
       text  = "--Dashpot Adder (dc) is the dashpot duty cycle added to the last controlled idle duty cycle which allows"
       text  = "it to recover to a nice idle with minimal overshoot. These values should be low: 1-5 DC<br>"
       text  = "See next help section 'Idle Control (Closed Loop Settings)' for more information.<br>"

help = Ihelp2, "Idle Control (Closed Loop Settings)"
       webHelp = "http://megasquirt.sourceforge.net/extra/pwmidle.html"
       text  = "More Closed Loop Settings<br>"
       text  = "<br>"
       text  = "Deadband range<br>"
       text  = "This is a range of rpm that you do not want it to bother changing duty cycle to regulate idle.<br>"
       text  = "30 to 50 rpm seems to be good here try smaller values unitl it seems stable.<br>"
       text  = "<br>"
       text  = "Adaptive idle control<br>"
       text  = "This controls the time between idle control events. The goal is to have a Slow Recovery which is tuned to the"
       text  = "engine's time constant at idle. You do not want it to hunt nor have falling idle speed. The Fast Recovery"
       text  = "is how fast you want it to recover to a decent idle when the idle speed is higher or lower than the target"
       text  = "this can be tuned for startup and to see what is needed to recover if idle speed drops significantly below target"
       text  = "for example when the A/C or electric fans kick on and the idle drops below target."
       text  = "<br>"
       text  = "The rpm values determine the curve. The lower value should be close to the dead band value and the upper one should be"
       text  = "a bit further away, maybe 100 or 200 rpm<br>"
       text  = "the next 2 values are time constants needed for startup and idle valve closure"
       text  = "--Closure speed comtrols the speed at which the idle valve closes. It is the time step delay between each"
       text  = "as it steps to a closed dc value"
       text  = "--Startup delay is a wait time right after the engine is started that the system stabilizes before"
       text  = "it attempts to find an idle speed<br>"
       text  = "<br>"
       text  = "Idle Timing<br>"
       text  = "<br>"
       text  = "<br>"
       text  = "Questions can be directed to http://msefi.com"

help = Shelp1, "Knock Detection"
       text = "Please see:<br>"
       webHelp = "http://megasquirt.sourceforge.net/extra/knock.html"
       text = "for more info on this function.<br>"

help = Shelp2, "IAT/CLT Related Ignition"
       webHelp = "http://megasquirt.sourceforge.net/extra/cltiat.html"
       text = "When selected you can add 1 degree"
       text = "of advance to the ignition"
       text = "for every xx amount of degrees lower"
       text = "the coolant temp is than the setpoint.<br>"
       text = "There is also a max setpoint to"
       text = "limit the added advance by.<br>"
       text = "<br>"
       text = "The IAT Related Ignition is similar"
       text = "but it retards the ignition 1 degree"
       text = "for every nn degrees of temp higher "
       text = "it is above the setpoint when the "
       text = "engine is running over the set KPa.<br>"
help = Shelp3, "Spark Settings"
       webHelp = "http://megasquirt.sourceforge.net/extra/"
       text = "Trigger Angle:<br>"
       text = "This is the angle BTDC when the trigger tooth/vane etc. passes the sensor<br>"
       text = "Typically you should aim for 60-70deg.<br>"
       text = "If using an OEM distributor setup like HEI7 or TFI then 5-15deg is typical<br>"
       text = "Do NOT use a value between 15 and 40 deg or your engine will not run correctly.<br>"
       text = "<br>"
       text = "If you need an angle between 90-112.5"
       text = "then select the '+22.5' and"
       text = "enter the angle needed -22.5<br>"
       text = "If you need an angle between 112.5-125"
       text = "then select '+45'"
       text = "then enter the angle needed -45<br>"
       text = "The actual Trigger Angle is :<br>"
       text = "Trigger Angle + 22.5 or 45 if selected<br>"
       text = "e.g.    78 + 45   = 123<br>"
       text = "        88 + 22.5 = 110.5<br>"
       text = "        65 + 0    = 65<br>"
       text = "<br>"
       text = "When using dwell control and trigger return cranking you MUST still"
       text = "specify the cranking advance which needs to match the trigger return angle."
       text = "The dwell calculations need this for accurate cranking dwell"
       text = "<br>"
       text = "Choosing spark output inverted or not is VERY IMPORTANT. This is determined"
       text = "by the way you drive your coil(s) - see the website. When the VB921 is used"
       text = "per the diagrams you will choose Inverted. Get it right or you will risk"
       text = "damaging components as well as getting wildly inaccurate timing"

help = Shelp4, "Spark Table Selection"
       webHelp = "http://megasquirt.sourceforge.net/extra/tableswitch.html"
       text = "If NOS System not selected and Second"
       text = "Spark Table selected then the base map"
       text = "will change from ST1 to ST2 when JP1"
       text = "pin6 is switched low. <br>"
       text = "If NOS selected and Second Spark Table"
       text = "then when NOS system runs (check back "
       text = "signal JP1 pin6 low and NOS setpoints"
       text = "satisfied) then the spark map will switch"
       text = "from ST1 to ST2.<br>"
       text = "If Second Spark Table not selected and NOS"
      text = "used then it will retard ignition by the "
       text = "fixed amount in the NOS settings.<br>"

help = Shelp5, "Wheel decoder settings"
       webHelp = "http://megasquirt.sourceforge.net/extra/setup-wheel.html"
       text = "Read the web help for more information and diagrams"
       text = "<br>"
       text = "The base teeth normally means the number of tooth places per 360deg"
       text = "i.e. on a 36-1 enter 36, on a 60-2 enter 60 (58 physical teeth and 2 gaps)"
       text = "<br>"
       text = "When using 2nd trigger and missing tooth for COP setups, enter the number of"
       text = "teeth between 2nd triggers. e.g. on 60-2 enter 120"
       text = "<br>"
       text = "Trigger numbers must follow in sequence"
       text = "<br><br>"
       text = "Dual dizzy mode is intended for use on dual distributor vehicles such as"
       text = "the Lexus V8. Setup trigger teeth for each firing event and the code will"
       text = "fire coil A and coil in turn"
       text = "<br>i.e. triggers A,C,E fire coil A; triggers B,D,F fire coil B<br>"
       text = "There is a choice of wheel decoder style 024 vs 025. It has been found that"
       text = "Low wheel counts < 20 teeth need to use the 024 style, higher numbers of teeth"
       text = "may work better with 025 style"
      
help = Chelp1, "Codebase and Output functions"
       webHelp = "http://megasquirt.sourceforge.net/extra/setup.html"
       text = "When running ignition you must choose one ignition type and select as many spark"
       text = "outputs as you have coils<br>"
       text = "i.e. distributor must have SparkA only; 4cyl wasted spark SparkA, SparkB only<br>"
       text = "<br>For fuel only with a simple tach input signal (i.e. not a 60-2 wheel) turn"
       text = "off all ignition types and spark outputs<br>"
       text = "If you are running a multi-toothed wheel like 36-1, 60-2, 24/2 etc. you have to"
       text = "configure the wheel decoder as if you were running spark and set a minimum of SparkA"
       text = "<br>"
       text = "Choose I/O pin usage.<br>"
       text = "FIdle = usually idle control<br>"
       text = "     previously it has been used as spark output<br>"
       text = "<br>"
       text = "LED17/D14 is prefferred SparkA output<br>"
       text = "Spark outputs must be used in sequence, i.e. for two outputs you must use A,B<br>"       
       text = ""
       text = "X2 (JS0) output = Water Inj Pump Out<br>"
       text = "                   Cooling Fan Out<br>"
       text = ""
       text = "X4 (JS2) output = Output1<br>"
       text = "                    Boost Control<br>"
       text = ""
       text = "Shift Light outputs are on PTC3 and 4 (JS7 and JS8 for V3 pcb's) <br>"
help = Chelp2, "Advanced code options"

      text = "Hybrid Alpha N system adds KPa to"
      text = "Alpha_N. This means that the KPa value becomes part of the fuel calculations, the same as in Speed density."
      text = " This is very important for turbo applications where Alpha_n is used. <br>"
      text = " <br> "
      text = "We have added the facility for a Mass Air Flow Meter to run the fuel calculations rather than"
      text = " a MAP sensor. Connect the MAF 0-5V output up to pin X7 (JS5) via a filter circuit as described on the Extra website. "
      text = "In MegaTune ensure the Mass_Air_Flow Mode is set in the Settings.ini file. this is some what experimental, expect "
      text = "the VE table to look very linear with lots of rows of numbers the same value in the horizontal axis."
      text = "<br>"
      text = "<br>"
      text = " <br>"
      text = "Air Density Correction is most likely built into the MAF you are using, so set"
      text = " to BUILT INTO MAF."
      text = "<br>"
      text = "False trigger protection should always be set to Enabled, unless you are using the"
      text = "trigger logging feature. Whilst logging triggers it can be handy to disable the"
      text = "protection so that all triggers (including noise) gets logged"
      

help = Chelp3, "Barometric Correction"

       text = "If the Barometric Correction is set on"
       text = "in the Enrichments screen then here you"
       text = "set up the limits.<br>"
       text = "This is used if MS resets during driving it will take in"
       text = "the current MAP pressure and use that"
       text = "as the Barometric Pressure to calculate"
       text = "the correction.<br> "
       text = "Now you can limit the BarCorr to the presets.<br>"
      text = "<br>"
      text = "If using Alpha-n mode then you can use the MAP sensor thats on the MS board as"
      text = " a constant barometric correction sensor."
      text = " <br> "

      text = "A way to gain Constant Baro Correction when in normal speed density mode is by"
      text = " fitting an extra MAP sensor to input X7 (JS5 V3.0) The MAP sensor MUST be the"
      text = " same type as fitted to your MS"
      text = " <br>"
help = Chelp4, "Water Injection"
       webHelp = "http://megasquirt.sourceforge.net/extra/waterinj.html"
       text = "If selected you cannot use the fan out on X2."
       text = "See Codebase and Output functions<br>"
       text = "<br>"
       text = "The output X2 will come on"
       text = "when the setpoints are met, the IAT"
       text = "setpoint is ignored when it has started.<br>"
       text = "<br>"
       text = "If NOS is not selected then:<br>"
       text = "Output X3 is pulsed at the same rate"
       text = "as CH2. This can be used to drive"
       text = "a fast acting solenoid.<br>"
       text = "So if a water nozzle is selected that"
       text = "flows 10-15% of the total flow of the "
       text = "fuel injectors, then it will supply a"
       text = "proportional amount of water to fuel.<br>"
       text = "<br>"
       text = "NB: O2 correction is turned"
       text = "off during water injection<br>"
help = Chelp5, "NOS System"
       webHelp = "http://megasquirt.sourceforge.net/extra/nitrous.html"
       text = "Water Inj output X3 will not work in"
       text = "this mode.<br>"
       text = "This turns output X3 on when the "
       text = "setpoints are satisfied. Then it "
       text = "waits for input Pin6 JP1 to go low. "
       text = "When this happens it retards the "
       text = "ignition by the set amount and adds "
       text = "to the fuel by an interpoled amount"
       text = "of between NOS min and max"
       text = "RPM value. If the additional PWs"
       text = "are zero then no extra fuel is added.<br>"
       text = "<br>"
       text = "If in DT mode you can select which"
       text = "CH to add the enrichment PW to."
       text = "O2 correction is turned off when the"
       text = "input Pin6 JP1 is low. If Duty Cycle"
       text = "95% then NOS output X3 is turned off"
       text = "and wont come back on untill one of"
       text = "setpoints is not satisfied.<br>"
       text = "<br>"
       text = "If NOS selected on and Anti-Lag on"
       text = "when MS receives a low input on"
       text = "the NOS Check Back (Pin6 JP1)"
       text = "before it turns the NOS output on (X3)"
       text = "then this will enable the NOS Turbo "
       text = "Anti-Lag. This system is used to spool"
       text = "the turbo up between a certain KPa"
       text = "range using NOS.<br>"
       text = "See http://megasquirt.sourceforge.net/extra/<br>"
       text = "for a suitable wiring diagram.<br>"

help = Chelp6, "Staged Injection System"
       webHelp = "http://megasquirt.sourceforge.net/extra/stagedinj.html"
       text = "Roger Emm's Staged Injection System"
       text = "Not for use in DT mode!<br>"
       text = "This runs Ch1 injectors only untill"
       text = "the setpoint is satisfied, then CH1"
       text = "and CH2 will fire at a reduced amount"
       text = "depending on the scale factor.<br>"
       text = "This is worked out by calculating"
       text = "Primary Injector Flow/Total Inj Flow."
       text = "When the engine runs below the"
       text = "setpoint-delta the injectors change"
       text = "back to CH1 on normally and CH2 off.<br>"

help = Chelp8, "Over Run Settings"
        webHelp = "http://megasquirt.sourceforge.net/extra/overrun.html"
        text = "This is used to cut fuel off during deceleration to aid engine braking"
        text = " and reduce fuel use."

help = Fhelp7, "Rev Limiter"
        webHelp = "http://megasquirt.sourceforge.net/extra/revlimiter.htm"
        text = "The soft rev limiter is for spark based codes, this retards the ignition to the <br>"
        text = "Soft Limit setpoint to reduce engine power and to try to reduce engine speed. <br>"
        text = "If the soft limit point is maintained for the limiter max time setpoint then the <br>"
        text = "hard limiter will cut in. This will also come in when the RPM reaches the Hard Limit setpoint <br>"
        text = "the hard limiter can be used in fuel only mode or in spark modes"

help = Chelp9, "Cranking/Priming Table"
        webHelp = ""
        text = "PRIME PUMP WHEN<br>"
        text = "Values for this item are either Prime Pulse > 0 or Always.  If you select the "
        text = "first option, the pump will only be primed if the priming pulsewidth setting "
        text = "is greater than zero.  If you select the latter option, Always, the pump will "
        text = "be primed regardless of your priming pulsewidth.  You will most likely want to "
        text = "use Always as it will get your fuel pressure up before cranking, but you don't "
        text = "necessarily have to inject any fuel.  The priming period is two seconds.<br>"
        text = "<br>"
        text = "FIRE PRIMING PULSE<br>"
        text = "The Fire Priming Pulse option allows you to select when a priming pulse is"
        text = "fired.  If you select Power Up, a  priming pulse will be fired immediately upon "
        text = "turning on the ignition.  If you select Twice, one priming pulse will be fired "
        text = "when you first key the ignition on and the second pulse will be fired after a "
        text = "second has passed.  If you select After 2 Secs, there will be one priming pulse "
        text = "two seconds after turning on the ignition.<br>"
        text = "The first option was in the original stock code, however, it will not "
        text = "necessarily work for a cold-start because there there may not already be fuel "
        text = "pressure in the rail when you turn the ignition on.  The other two options are "
        text = "just different methods of firing the priming pulse.  If you select Twice, then "
        text = "there will most likely be no"
        text = "fuel injected on the first pulse, unless there is already fuel pressure in the "
        text = "fuel rail, and then there sould be fuel injected on the next pulse.  If you "
        text = "select the After 2 Secs option, it will give the fuel pump time to build up "
        text = "pressure.  With that option, however, remember that if you try and start the "
        text = "car before allowing two seconds to elapse, no priming pulse will ever be "
        text = "injected.<br>"
        text = "<br>"
        text = "PRIMING PW SOURCE<br>"
        text = "There are two options for the Priming PW Source.  You can either select "
        text = "Standard Prime which will inject a fixed amount of fuel as specified in the "
        text = "Standard Priming PW box, or you can select Priming PW Table which will have "
        text = "your priming PW be based off the Cranking/Priming PW Table.  If you would "
        text = "like more control over your priming pulsewidths for varying temperatures,"
        text = "then select Priming PW Table and the values specified in the "
        text = "Cranking/Priming PW Table will be used as the priming pulsewidth for the "
        text = "given temperature.<br>"
        text = "<br>"
      text = "STANDARD PRIMING PW<br>"
      text = "If you selected Standard Prime for the Priming PW Source, then this is where "
      text = "you select how long the injectors will stay open when the priming pulse is "
      text = "fired.  This value is in milliseconds.<br>"
      text = "<br>"
      text = "CRANKING PULSE WIDTH TEMPS<br>"
      text = "Here you can select what temperature lookup method you would like to use for "
      text = "the Cranking/Priming PW Table during cranking.  CLT Only uses the coolant "
      text = "temperature and is the original Megasquirt option.  This is what most people "
      text = "use and if you have"
      text = "a standard setup with a coolant sensor, this is most likely what you will "
      text = "want to use.  If you would like to use the manifold temperature instead, "
      text = "select MAT Only.  You can also select CLT, MAT Average which uses an average "
      text = "of the two temperatures.<br>"
      text = "<br>"
      text = "CRANKING/PRIMING PW TABLE<br>"
      text = "In older versions of the MegaSquirt firmware, the cranking pulsewidth was "
      text = "handled by a linear interpolation between a high and low temperature pair. "
      text = " A linear curve was not necessarily optimal for some people so now you have "
      text = "the option of setting your cranking pulsewidth at various temperatures.<br>"

      text = "If you're migrating over from a MegaSquirt version that only used two values, "
      text = "use those as your high and low values in the Cranking/Priming PW Table and then "
      text = "guess the values in between.  Then, when you start your car, you can adjust the "
      text = "pulsewidth values for the various temperatures that yield the most reliable and "
      text = "fastest starts.<br>"

help = Chelp9a, "Cranking/Priming Table"
        webHelp = ""
        text = "CRANKING RPM<br>"
        text = "The Cranking RPM value lets the MegaSquirt know when the engine is cranking "
        text = "or when it is running.  A good starting point would be 300 as most engines "
        text = "crank around 200 RPM; the rule of thumb being about 100 RPM higher than your "
        text = "actual cranking RPM.  Do not set this too high because if your RPM dips due "
        text = "to a low idle or a slight stall it will make the MegaSquirt think it is "
        text = "cranking and also reinitiate the afterstart"
        text = "enrichment period.  Set it too low and it will try and use the VE table for "
        text = "crank pulsewidths instead of the Cranking/Priming PW Table, which is not "
        text = "good either. <br>"
        text = "<br>"
        text = "TPS VALUE FOR FLOOD CLEAR<br>"
        text = "Sometimes you might want to temporarily stop the injectors from injecting "
        text = "fuel during cranking to clear a flooded engine.  This is achieved by holding "
        text = "down the gas pedal during cranking.  The MegaSquirt needs to know at what "
        text = "point of gas pedal deflection it should turn off the injectors and a good "
        text = "starting point would be just before floored.<br>"
        text = "To get this value, go to Tools, Calibrate TPS, and push the gas pedal almost "
        text = "all the way to the floor - about where you think the fuel should be cut off "
        text = "and hit Get Current.  Remember this value and hit CANCEL on the Calibrate "
        text = "TPS dialog.  Insert this value for the TPS Flood Clear.  If this value is "
        text = "set too low then you will not get any fuel during cranking.  If you set this "
        text = "value too high, then you won't be able to press the pedal enough to trigger "
        text = "the Flood Clear.<br>"
        text = "<br>"
        text = "If the First Start Enrichment option is set to ON you will have the option "
        text = "to increase the cranking PW for the first start of the day.  Just turn on the "
        text = "ignition and then pump the throttle 3 times before cranking.  If the TPS value "
        text = "goes above the FLOODCLEAR more than 3 times before you crank the engine then "
        text = "the cranking PW will be multiplied by the Extra Cranking Fuel Multiplier. So "
        text = "if the normal cranking PW is set to 10.0mS and the multiplier is 50% then the "
        text = "cranking PW will be 15.0mS. This setting returns to the normal PW after the "
        text = "first attempt to start the motor or if you apply the throttle past the "
        text = "FLOODCLEAR setting.  This is to assist starting a motor that requires "
        text = "additional fuel to start only on the first start after sitting a long time. "
        text = "If the engine fails to start on the first attempt, the First Start Enrichment "
        text = "can be reactivated after the engine has set for two sec without cranking."

help = Chelp10, "After Start Enrichment (ASE)"
        webHelp = ""
        text = "It's been found that during winter the cranking and after start enrichments "
        text = "need tweeking <br>"
        text = "in order to get the engine to start and run without restarting it several "
        text = "times from cold. <br>"
        text = "The reason is felt that the after start and cranking enrichments dont follow "
        text = "temperature in a <br>"
        text = "linear format. So if you find this is the case you can use this table to "
        text = "tweek areas where it <br>"
        text = "is difficult to start. It has been found that the areas for concern are around "
        text = "32F (0C) "
        text = " <br>"
        text = " <br>"
        text = "After Start Enrich Counter is the length of time in Seconds or engine cycles "
        text = "that the  <br>"
        text = "after start enrich runs for. The percentage added is decayed down to zero as "
        text = "the time expires "
        text = " <br>"
        text = " <br>"
        text = "Set ASE Mode to FIXED for a timed period of ASE that does not decay, after "
        text = "the timer the ASE will <br>"
        text = "then decay as usual during the TOTAL ASE time period thats left. This has a "
        text = "temp setpoint as  <br>"
        text = "it should only be needed when the coolant temperatures are fairly low. "
        text = " <br>"
        text = " <br>"
        text = "Setting MAP to a fixed value helps to maintain a constant PW during the "
        text = "initial start where the  <br>"
        text = "map drops quickly from around 100KPa to the tickover KPa. This is held during "
        text = "the FIXED time period."
        text = "The FIXED period is a period of time at the start of the TOTAL ASE time. "
        text = "FIXED must be less than TOTAL"



help = DTHelp1, "Lambda Settings"
      text = "If you run 2 Lambda sensors, one on each "
       text = "bank, you can have a totally <br>"
       text = "seperate Ego correction for CH2"
      text = "only for use when CH2 = VE Table2"

help = airdenHelp, "Coolant Corrected Air Density"
       text = "Unless you really know what your doing this MUST be set to NORMAL CORRECTION. "
       text = "This is ONLY suitable for fine tuning an already tuned engine!"
       text = " <br>"
       text = "Air Density Correction is a factor of Inlet Air Temp measured from the Manifold "
       text = "Air Temp Sensor. There have been a few instances where the air temp is more "
       text = "affected by the coolant temp at low manifold pressures or Throttle positions "
       text = "rather than the entering air temp as measured at the MAT. In this case it was "
       text = "found that the engine could run lean for the same air temp depending on the "
       text = "coolant temperature. To help TUNE this we have added Coolant Correction "
       text = "percentage. <br>"
       text = "With this function enabled the correction percentage is interpolated from the "
       text = "table, depending on the coolant temperature. So Air Density would now be : <br>"
       text = "      Air Density = (MAT Related Air Density) * Coolant related correction % <br>"
       text = "E.G.  Air Density =         120               *          110 %     = 132"
       text = " <br>"
       text = "This correction can then be reduced by the engines RPM. The Reduction Start "
       text = "value is where the coolant correction is started to be removed, and the "
       text = "correction End position is where there will no longer be any coolant correction. "
       text = "The coolant correction is interpolated between these 2 points. At engine speeds "
       text = "lower then the start point the correction will be as the Coolant Correction Table. "
       text = "Between the Start and End values the Coolant Correction is reduced at a linear "
       text = "rate. At the End value the Coolant Correction rate is removed totally."
       text = " <br>"
       text = "The idea is that as rpm increases as does air flow, so the MAT sensor will be a "
       text = "more realistic measurement of density."
       text = " <br>"
       text = "So if start is 3000rpm and end is 6000, and correction is 150%, then at 3000rpm "
       text = "correction will be 150%, at 4500rpm correction will be 125% and at 6000rpm "
       text = "correction will be 100% (i.e. no correction)."
       text = " <br>"
       text = "We have allowed the temperatures to be user defined, suggested temps would be : <br>"
       text = "Temp 1 =  -40 F <br>"
       text = "Temp 2 =  -20 F <br>"
       text = "Temp 3 =    0 F <br>"
       text = "Temp 4 =   20 F <br>"
       text = "Temp 5 =   50 F <br>"
       text = "Temp 6 =   80 F <br>"
       text = "Temp 7 =  120 F <br>"

help = OpenLoopHelp, "Open Loop Mode"
       text = "You can turn off closed loop oxygen sensor monitoring above a TPS position"
       text = "or kpa value.<br>"
       text = "The aim of this is so that only the VE table is used to control fuelling, typically"
       text = "at full throttle/load conditions"

help = TachoHelp, "Tacho Output pin"
       text = "When running coilpacks or COP, many people have a problem getting a signal to"
       text = "run their tachometer. This option sends a pulse on a chosen output for each"
       text = "tach event. There is NO error checking, so you must make sure that the chosen"
       text = "pin is not already being used for something else.<br>"
       text = "You will also need to add a small transistor driver circuit"

help = DwellHelp, "Dwell control"
       text = "If you use direct coil control (VB921) or a non-smart dwell ignition module"
       text = "it is VITAL that you enable dwell control with the correct spark invert/non-invert setting"
       text = "The dwell numbers given are get-you-going numbers but will need adjusting.<br>"
       text = "If your ignition driver/coil are getting warm or hot then the dwell is too high<br>"
       text = "Min discharge is the time the coil is allowed to spark before charging starts again.<br>"
       text = "<br>"
       text = "Some Bosch ignition modules are smart-dwell and need the 75% setting instead of true dwell"

help = Stim4WHelp, "Stim for wheel"
       text = "This option is for toothed wheel users to test their Megasquirt on the bench using"
       text = "the stimulator where the correct input signal is unavailable.<br>"
       text = "<br>"
       text = "DO NOT use on the real engine or you will flood the engine with fuel"

help = egoHelp, "Exhaust gas settings"
       text = "These are the basic settings for EGO correction where a narrowband or wideband"
       text = "oxygen sensor automatically adjusts the mixture as you drive to a target value"
       text = "the more advanced settings are through the Target AFR system which can only"
       text = "be used with a Wideband<br>"
       text = "Refer to the Megamanual for basic EGO settings as these remain much the same as"
       text = "standard MS1 code"

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

[CurveEditor]
   curve = clt_IATCorrC, "Coolant corrected Air Density, see Settings", 9
      topicHelp = airdenHelp
      columnLabel = "Temp", "Offset"
      xBins       = IATCTemp, coolant
      yBins       = IATCorS
      gauge       = cltGauge
#if CELSIUS
      xAxis       = -40, 100, 15
#else
      xAxis       = -40, 220, 14
#endif
      yAxis       = 50,  150, 11

[TableEditor]
   ;       table_id,    map3d_id,    "title",      page
   table = veTable1Tbl, veTable1Map, "VE Table 1", 1
          ;   constant, variable
      xBins = rpmBins1, rpm
#if SPEED_DENSITY
      yBins = mapBins1, map

#elif AIR_FLOW_METER
      yBins = afmBins1, MAFVolts
#elif ALPHA_N
        yBins = tpsBins1, tpsADC
#endif
      zBins = veBins1
      gridHeight  = 1.0
      upDownLabel = "(RICHER)", "(LEANER)"

   table = veTable2Tbl, veTable2Map, "VE Table 2 (DT)", 2
      xBins = rpmBins2, rpm
#if SPEED_DENSITY
      yBins = mapBins2, map
#elif AIR_FLOW_METER
      yBins = afmBins2, MAFVolts

#elif ALPHA_N
        yBins = tpsBins2, tpsADC
#endif
      zBins = veBins2
      gridHeight  = 1.0
      upDownLabel = "(RICHER)", "(LEANER)"

   table = sparkTbl,    sparkMap,    "Ignition Advance Main Table", 3
      xBins = rpmBins3, rpm
#if SPEED_DENSITY
      yBins = mapBins3, map
 #elif AIR_FLOW_METER
      yBins = afmBins3, MAFVolts
#elif ALPHA_N
        yBins = tpsBins3, tpsADC
#endif
      zBins = advTable1
      gridHeight  = 3.0
      upDownLabel = "ADVANCED", "RETARDED"

   table = sparkTbl2, sparkMap2,     "Ignition Advance Table 2. See Spark Table selection", 5
      xBins = rpmBins4, rpm
#if SPEED_DENSITY
      yBins = mapBins4, map
#elif AIR_FLOW_METER
      yBins = afmBins4, MAFVolts
#elif ALPHA_N
        yBins = tpsBins4, tpsADC
#endif
      zBins = advTable2
      gridHeight  = 3.0
      upDownLabel = "RETARDED", "ADVANCED"

   table = veTable3Tbl, veTable3Map, "VE Table 3. See Fuel Table Selection", 6
      xBins = rpmBins5, rpm
#if SPEED_DENSITY
      yBins = mapBins5, map
#elif AIR_FLOW_METER
      yBins = afmBins5, MAFVolts
#elif ALPHA_N
        yBins = tpsBins5, tpsADC
#endif
      zBins = veBins3
      gridHeight  = 1.0
      upDownLabel = "(RICHER)", "(LEANER)"

#if NARROW_BAND_EGO
   table = afrTable1Tbl, afrTable1Map, "AFR Targets for VE Table 1 (Volts)", 7
      xBins = rpmBins6, rpm
#if SPEED_DENSITY
      yBins = mapBins6, map
#elif AIR_FLOW_METER
      yBins = afmBins6, MAFVolts
#elif ALPHA_N
        yBins = tpsBins6, tpsADC
#endif
      zBins = afrBins1
   table = afrTable2Tbl, afrTable2Map, "AFR Targets for VE Table 3 (Volts)", 7
      xBins = rpmBins7, rpm
#if SPEED_DENSITY
      yBins = mapBins7, map
#elif AIR_FLOW_METER
      yBins = afmBins7, MAFVolts
#elif ALPHA_N
        yBins = tpsBins7, tpsADC
#endif
      zBins = afrBins2
#elif WB_UNKNOWN
   table = afrTable1Tbl, afrTable1Map, "AFR Targets for VE Table 1 (Volts)", 7
      xBins = rpmBins6, rpm
#if SPEED_DENSITY
      yBins = mapBins6, map
#elif AIR_FLOW_METER
      yBins = afmBins6, MAFVolts
#elif ALPHA_N
        yBins = tpsBins6, tpsADC
#endif
      zBins = afrBins1
   table = afrTable2Tbl, afrTable2Map, "AFR Targets for VE Table 3 (Volts)", 7
      xBins = rpmBins7, rpm
#if SPEED_DENSITY
      yBins = mapBins7, map
#elif AIR_FLOW_METER
      yBins = afmBins7, MAFVolts
#elif ALPHA_N
        yBins = tpsBins7, tpsADC
#endif
      zBins = afrBins2

#elif DIYWB_NON_LINEAR
   table = afrTable1Tbl, afrTable1Map, "AFR Targets for VE Table 1 (Volts)", 7
      xBins = rpmBins6, rpm
#if SPEED_DENSITY
      yBins = mapBins6, map
#elif AIR_FLOW_METER
      yBins = afmBins6, MAFVolts
#elif ALPHA_N
        yBins = tpsBins6, tpsADC
#endif
      zBins = afrBins1
   table = afrTable2Tbl, afrTable2Map, "AFR Targets for VE Table 3 (Volts)", 7
      xBins = rpmBins7, rpm
#if SPEED_DENSITY
      yBins = mapBins7, map
#elif AIR_FLOW_METER
      yBins = afmBins7, MAFVolts
#elif ALPHA_N
        yBins = tpsBins7, tpsADC
#endif
      zBins = afrBins2


#else
   table = afrTable1Tbl, afrTable1Map, "AFR Targets for VE Table 1 (AFR)", 7
      xBins = rpmBins6, rpm
#if SPEED_DENSITY
      yBins = mapBins6, map
#elif AIR_FLOW_METER
      yBins = afmBins6, MAFVolts
#elif ALPHA_N
        yBins = tpsBins6, tpsADC
#endif
      zBins = afrBins1
   table = afrTable2Tbl, afrTable2Map, "AFR Targets for VE Table 3 (AFR)", 7
      xBins = rpmBins7, rpm
#if SPEED_DENSITY
      yBins = mapBins7, map
#elif AIR_FLOW_METER
      yBins = afmBins7, MAFVolts
#elif ALPHA_N
        yBins = tpsBins7, tpsADC
#endif
      zBins = afrBins2
#endif

   table = boostTbl1, boostMap1, "Boost kpa target 1", 8
          ;   constant, variable
      xBins = bcrpmBins1, rpm
      yBins = bctpsBins1, throttle
      zBins = bcBins1

   table = boostTbl2, boostMap2, "Boost duty target", 8
      xBins = bcrpmBins2, rpm
      yBins = bctpsBins2, throttle
      zBins = bcBins2

   table = boostTbl3, boostMap3, "Boost kpa target 2", 8
      xBins = bcrpmBins3, rpm
      yBins = bctpsBins3, throttle
      zBins = bcBins3

   table = splitTbl,    splitMap,    "Rotary split Table - see settings", 9
      xBins = splitrpmBins, rpm
#if SPEED_DENSITY
      yBins = splitkpaBins, map
#elif AIR_FLOW_METER
      yBins = splitafmBins, MAFVolts
#elif ALPHA_N
        yBins = splittpsBins, tpsADC
#endif
      zBins = splitTable
      gridHeight  = 3.0
      upDownLabel = "RETARDED", "ADVANCED"

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


[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
   deadGauge         = deadValue,     "---",                "",        0,     1,     -1,    -1,    2,    2, 0, 0

   baroADCGauge      = baroADC,       "Barometer ADC",      "",        0,   255,     -1,    -1,  256,  256, 0, 0
   mapADCGauge       = mapADC,        "MAP ADC",            "",        0,   255,     -1,    -1,  256,  256, 0, 0
   matADCGauge       = matADC,        "MAT ADC",            "",        0,   255,     -1,    -1,  256,  256, 0, 0
   cltADCGauge       = cltADC,        "CLT ADC",            "",        0,   255,     -1,    -1,  256,  256, 0, 0
   tpsADCGauge       = tpsADC,        "TPS ADC",            "",        0,   255,     -1,    -1,  256,  256, 0, 0
   batADCGauge       = batADC,        "BAT ADC",            "",        0,   255,     -1,    -1,  256,  256, 0, 0
   idleGauge         = idleDC         "IdleDC",             "%",       0,   255,     -1,    -1,  256,  256, 0, 0

   #if NARROW_BAND_EGO
      egoGauge       = egoVoltage,    "Rear Bank O2 Voltage", "volts",   0,   1.0,    0.2,   0.3,  0.6,  0.8, 2, 2
   #else
      egoGauge       = egoVoltage,    "Rear Bank O2 Voltage", "volts", 0.5,   4.5,    0.0,   0.0,  5.0,  5.0, 2, 2
   #endif

   #if NARROW_BAND_EGO
      ego2Gauge       = ego2Voltage,    "Front Bank O2 Voltage", "volts",   0,   1.0,    0.2,   0.3,  0.6,  0.8, 2, 2
   #else
      ego2Gauge       = ego2Voltage,    "Front Bank O2 Voltage", "volts", 0.5,   4.5,    0.0,   0.0,  5.0,  5.0, 2, 2
   #endif

   lambdaGauge       = lambda,        "Lambda",             "",      0.5,   1.5,    0.5,   0.7,    2,  1.1, 2, 2
   accelEnrichGauge  = accDecEnrich,  "AE Driven Fuel Pct", "Pct",   100,   200,     0,    0,  999,  999, 0, 0
   afrGauge          = afr,           "Air:Fuel Ratio",     "",       10,  19.4,     12,    13,   15,   16, 2, 2
   clockGauge        = secl,          "Clock",              "Seconds", 0,   255,     10,    10,  245,  245, 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, "O2 Driven Correction (GEGO)",     "%",      80,   120,     90,    99,  101,  110, 0, 0

   gammaEnrichGauge  = gammaEnrich,   "Gamma Enrichment",   "%",      50,   150,     -1,    -1,  151,  151, 0, 0

#if MPXH6300A
   mapGauge          = map,           "Engine MAP",         "kPa",     0,    304,     0,    20,  250,  275, 0, 0
#elif MPXH6400A
   mapGauge          = map,           "Engine MAP",         "kPa",     0,    400,     0,    20,  250,  275, 0, 0
#else
   mapGauge          = map,           "Engine MAP",         "kPa",     0,    255,      0,    20,  200,  245, 0, 0
#endif
   baroGauge         = barometer,     "Barometer",          "kPa",     60,   110,      0,    20,  200,  245, 0, 0
  barocorrGauge      = baroCorrection,  "baro correction",         "%",       0,   120,     -1,    -1,  999,  999, 0, 0

   pulseWidth1Gauge  = pulseWidth1,   "Pulse Width 1",      "mSec",    0,  25.5,    1.0,   1.2,   20,   25, 1, 1
   pulseWidth2Gauge  = pulseWidth2,   "Pulse Width 2",      "mSec",    0,  25.5,    1.0,   1.2,   20,   25, 1, 1
   tachometer        = rpm,           "Engine Speed",       "RPM",     0,  8000,    300,   600, 3000, 5000, 0, 0
   throttleGauge     = throttle,      "Throttle Position",  "%TPS",    0,   100,     -1,     1,   90,  100, 0, 0
   veBucketGauge     = veTuneValue,   "VE Bucket",          "%",       0,   150,     -1,    -1,  999,  999, 0, 0
   veGauge           = veCurr,        "VE Current",         "%",       0,   120,     -1,    -1,  999,  999, 0, 0
   voltMeter         = batteryVoltage,"Battery Voltage",    "volts",   7,    21,      8,     9,   15,   16, 2, 2
   warmupEnrichGauge = warmupEnrich,  "Warmup Enrichment",  "%",     100,   150,     -1,    -1,  101,  105, 0, 0

#if CELSIUS
   cltGauge          = coolant,       "Coolant Temp",       "%TEMP", -40,   120,    -15,     0,   95,  105, 0, 0
   matGauge          = mat,           "Manifold Air Temp",  "%TEMP", -40,   110,    -15,     0,   95,  100, 0, 0
#else
   cltGauge          = coolant,       "Coolant Temp",       "%TEMP", -40,   250,      0,    0,  200,  220, 0, 0
   matGauge          = mat,           "Manifold Air Temp",  "%TEMP", -40,   215,      0,    0,  200,  210, 0, 0
#endif
   advanceGauge      = advSpark,       "Spark Advance",      "deg BTDC", 50,    -10,      0,     0,    35,    45, 0,

   stackGauge        = stackL,         "CPU stack",         "bytes",     240,    200,      0,    0,  254,  254, 0, 0
;   T2XGauge          = T2X,         "T2 X byte",         "byte",     0,    255,      0,    0,  254,  254, 0, 0


; Extra Stuff

 fuelGauge         = fuelpress,         "Fuel Pressure",        "lb/in",    0,     80,     30,    40,   60,    65,  1, 1
#if CELSIUS
 egtGauge          = egttemp,           "EGT",                   "C",    0,  1000, 0, 0,     1450,   1480, 1, 1
#else
 egtGauge          = egttemp,           "EGT",                   "F",    0,  2200, 0, 0,     1450,   1480, 1, 1
#endif
 CltIatGauge       = CltIatDeg,         "Clt IAT Angle",         "Deg",  -10, 10, -10, -10, 10, 10, 1
 KnockGauge        = KnockDeg,          "Knock Retard",          "Deg",  -20, 0, -20, -20, 1, 1
 egoCorrGauge2     = egoCorrection2,    "EGO Correction2",       "%",      50,   150,     90,    99,  101,  110, 0, 0
 testGauge         = test,              "TEST",                  "",    0,  255,  255,  255,   0,  0
 test2Gauge        = test2,             "TEST2",                  "",    0, 255, 255, 255, 0, 0,
 RpmHiResGauge     = RpmHiRes,          "Engine RPM",             "RPM", 0,  8000, 0, 300, 7800, 8000, 0
 lambdaGauge2      = lambda2,           "Lambda2",                "",      0.5,   1.5,    0.5,   0.7,    2,  1.1, 2, 2
 afrGauge2         = afr2,              "Air:Fuel Ratio2",       "",       10,  19.4,     12,    13,   15,   16, 2, 2
 vacuumGauge       = vacuum,            "Engine Vacuum",         "in-HG", 0, 30, 0,  0,  30, 30, 1, 1
 boostgauge        = boost,             "Engine Boost",           "PSIG",  0, 20, 0,  0,  15, 20, 1, 1
 VacBooGauge       = boostVac,          "Engine Vac Boost",       "in-HG/PSIG", -30, 30, -30, -30, 30, 30, 1, 1
 TargetAFRGauge    = TargetAFR,         "Target AFR",             "AFR",    10, 19.4, 0,  0,  20,  20, 2, 2
 mphGauge          = mph,               "Speedo",                 "MPH",    0, 200, -1, -1, 200, 200, 1
 USgphGauge        = USgph,             "US GPH",                 "GPH",    0, 100, -1, -1, 100,  100, 1
 gphGauge          = gph,               "GPH",                    "GPH",    0, 100, -1, -1, 100,  100, 1
 USmpgGauge        = USmpg,             "US MPG",                 "MPG",    0, 100, -1, -1, 100, 100, 1
 mpgGauge          = mpg,               "MPG",                    "MPG",    0, 100, -1, -1, 100, 100, 1
 YGForceGauge      = YForce,            "Y G-Force",              "G",      -3, 3, 0, 0, 2, 3, 3
 XGForceGauge      = XForce,            "X G-Force",              "G",      -3, 3, 0, 0, 2, 3, 3
 MAFGauge          = MAFVolts,         "Volts",                  "V",      0, 5, 0, 0, 5, 5, 2
 bcDCGauge         = bcDC,             "Boost Control DC",       "%",      0, 100, -1, -1 999, 999, 0, 0
 idleDCGauge       = idleDC,           "Idle DC",                "%",      0, 100, -1, -1 999, 999, 0, 0
 RealDutyGauge1    = dutyCy1Real,       "Fuel Delivery 1",       "Flow",       0,   75,     -1,    -1,   75,   75, 1, 1
 RealDutyGauge2    = dutyCy2Real,       "Fuel Delivery 2",       "Flow",       0,   75,     -1,    -1,   75,   75, 1, 1 

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

[FrontPage]

#if NARROW_BAND_EGO
   egoLEDs         = 0.0, 1.0, 0.5 ; NB settings.
#else
   ; If you reverse these range values as you see below, then the LED
   ; bar will work as you expect, high on the right, low on the left.
   egoLEDs         = 4.0, 1.0, 2.5 ; WB settings.
#endif

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

;Gauge Setup 0

    gauge1 = RpmHiResGauge
    gauge2 = cltGauge
    gauge3 = pulseWidth1Gauge
    gauge4 = dutyCycle1Gauge
    gauge5 = mapGauge
    gauge6 = matGauge
    gauge7 = afrGauge
    gauge8 = advanceGauge

;Gauge Setup 1

;    gauge1 = RpmHiResGauge
;    gauge2 = cltGauge
;    gauge3 = pulseWidth1Gauge
;    gauge4 = dutyCycle1Gauge
;    gauge5 = mapGauge
;    gauge6 = accelEnrichGauge
;    gauge7 = egoCorrGauge
;    gauge8 = advanceGauge


;Gauge Setup 2

;    gauge1 = tachometer
;    gauge2 = throttleGauge
;    gauge3 = cltGauge
;    gauge4 = matGauge
;    gauge5 = mapGauge
;    gauge6 = veGauge
;    gauge7 = ego2Gauge
;    gauge8 = advanceGauge

;Gauge Setup 3

;    gauge1 = RpmHiResGauge
;    gauge2 = cltGauge
;    gauge3 = pulseWidth1Gauge
;    gauge4 = dutyCycle1Gauge
;    gauge5 = mapGauge
;    gauge6 = accelEnrichGauge
;    gauge7 = egoCorrGauge
;    gauge8 = advanceGauge


;Gauge Setup 4

;    gauge1 = tachometer
;    gauge2 = throttleGauge
;    gauge3 = idleGauge
;    gauge4 = pulseWidth1Gauge
;    gauge5 = mapGauge
;    gauge6 = cltGauge
;    gauge7 = matGauge
;    gauge7 = accelEnrichGauge
;    gauge8 = advanceGauge

;Gauge Setup 5 Alpha-N / MAF

;   gauge1 = tachometer
;   gauge2 = tpsADCGauge
;   gauge2 = MAFGauge
;   gauge3 = pulseWidth1Gauge
;   gauge4 = accelEnrichGauge
;   gauge5 = cltGauge
;   gauge6 = veGauge
;   gauge7 = voltMeter
;   gauge8 = mapGauge

;   gauge5 = tpsADCGauge
;   gauge4 = TargetAFRGauge
;   gauge4 = batADCGauge
;   gauge3 = mphGauge         ;   ONLY FOR USE WHEN VSS CONNECTED TO MS
;   gauge3 = USgphGauge
;   gauge3 = gphGauge
;   gauge3 = USmpgGauge
;   gauge3 = mpgGauge
;   gauge4 = egtGauge
;   gauge4 = fuelGauge
;   gauge4 = throttleGauge
;   gauge6 = matGauge
;   gauge7 = KnockGauge
;   gauge7 = pulseWidth2Gauge
;   gauge7 = afrGauge
;   gauge8 = dutyCycle2Gauge
;   gauge8 = stackGauge ; CPU stack pointer, only useful for coders
;   gauge8 = T2XGauge ; only useful for code testing

; These 3 are for the second lambda sensor. Remove ";" and re-number gauge
;   gauge6 = afrGauge2
;   gauge7 = pulseWidth2Gauge
;   gauge8 = egoCorrGauge2

; Eliot Mansfield's boost and vacuum gauges.
;   gauge7 = vacuumGauge
;   gauge8 = boostgauge

; Decided to combine the Vacuum and Boost gauges into one
;    gauge4 = VacBooGauge


; For testing only
;   gauge8 = testGauge
;   gauge8 = test2Gauge

; G FORCE GAUGES
;   gauge7 = XGForceGauge
;   gauge8 = YGForceGauge

    ;         =   expression,            off-label,            on-label,            off-bg, off-fg, on-bg, on-fg
    indicator = { porta & 0b00000001 }, "Fuel Pump Off",      "Fuel Pump On",       white,  black,  green, black
    indicator = { porta & 0b00000010 }, "Fidle/Spark Off",    "Fidle/Spark On",     white,  black,  green, black
    indicator = { porta & 0b00100000 }, "Fan/W Inj Off",      "Fan/W Inj On",       white,  black,  green, black
    indicator = { porta & 0b00010000 }, "NOS/W Inj Off",      "NOS/W Inj Pulsing",  white,  black,  green, black
    indicator = { porta & 0b00001000 }, "Output1/Boost Cont", "Output1/Boost Cont", white,  black,  green, black
    indicator = { porta & 0b00000100 }, "Output2 Off",        "Output2 On",         white,  black,  green, black
    indicator = { portd & 0b00000001 }, "Output3 Off",        "Output3 On",         white,  black,  green, black
    indicator = { portc & 0b00000100 }, "Fan/Output4 Off",    "Fan/Output4 On",     white,  black,  green, black
    indicator = { portd & 0b00001000 }, "Launch On",          "Launch Off",         red,    black,  white, black
    indicator = { portd & 0b00000100 }, "Knocked",            "No Knock",           red,    black,  white, black
    indicator = { portd & 0b00000010 }, "NOS/Tables On",      "NOS/Tables Off",     red,    black,  white, black
    indicator = { floodclear && (( engine & 3 ) != 1) }, "",    "FLOOD CLEAR",        white,  black,  red,   black
  ; indicator = { portc & 0b00010000 }, "Trig2",              "Trig2",              white,  black,  green, black
  ; indicator = { squirt & 0b01000000}, "BC ON",              "BC OFF",             white, black,   green, black
;-------------------------------------------------------------------------------

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


   batteryBar    =   6,   15
   dutyCycleBar  =   0,  100
#if NARROW_BAND_EGO
   egoBar        =   0,    1.0
#else
   egoBar        =   0,    5.0
#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 ; NB settings.
#else
   ; If you reverse these range values as you see below, then the LED
   ; bar will work as you expect, high on the right, low on the left.
   egoLEDs         = 4.0, 1.0, 2.5 ; WB settings.
#endif

   font            = "FixedSys", 14
   spotDepth       =   2 ; 0 = no indicators, 1 = Z only, 2 = XYZ indicators.
   cursorDepth     =   2 ; Same as spot depth.
;;gives error   gridOrient      = 250,   0, 340 ; Space 123 rotation of grid in degrees.

   ; 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
   gauge1       = RpmHiResGauge,    RpmHiResGauge,     RpmHiResGauge,    RpmHiResGauge
   gauge2       = mapGauge,         mapGauge,          mapGauge,         mapGauge
;   gauge3       = egoGauge,         egoGauge,          egoGauge,         egoGauge
   gauge3       = afrGauge,         afrGauge,          afrGauge,         afrGauge
   gauge4       = egoCorrGauge,     warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
   gauge5       = veBucketGauge,    veBucketGauge,     veBucketGauge,    veBucketGauge
   gauge6       = accelEnrichGauge, accelEnrichGauge,  dutyCycle1Gauge,  dutyCycle2Gauge

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

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

   ochGetCommand    = "R"   ; was "a" and before that "A"
   ochBlockSize     = 39    ; was 38

   secl             = scalar, U08,  0, "sec",    1.000, 0.000
   squirt           = scalar, U08,  1, "bits",   1.000, 0.000
   engine           = scalar, U08,  2, "bits",   1.000, 0.000
   baroADC          = scalar, U08,  3, "ADC",    1.000, 0.000
   mapADC           = scalar, U08,  4, "ADC",    1.000, 0.000
   matADC           = scalar, U08,  5, "ADC",    1.000, 0.000
   cltADC           = scalar, U08,  6, "ADC",    1.000, 0.000
   tpsADC           = scalar, U08,  7, "ADC",    1.000, 0.000
   batADC           = scalar, U08,  8, "ADC",    1.000, 0.000
   egoADC           = scalar, U08,  9, "ADC",    1.000, 0.000
   egoCorrection    = scalar, U08, 10, "%",      1.000, 0.000
   airCorrection    = scalar, U08, 11, "%",      1.000, 0.000
   warmupEnrich     = scalar, U08, 12, "%",      1.000, 0.000
   rpm100           = scalar, U08, 13, "r100",   1.000, 0.000
   pulseWidth1      = scalar, U08, 14, "ms",     0.100, 0.000
   accelEnrich      = scalar, U08, 15, "mS",      1.000, 0.000
   baroCorrection   = scalar, U08, 16, "%",      1.000, 0.000
   gammaEnrich      = scalar, U08, 17, "%",      1.000, 0.000
   veCurr1          = scalar, U08, 18, "%",      1.000, 0.000
   pulseWidth2      = scalar, U08, 19, "ms",     0.100, 0.000
   veCurr2          = scalar, U08, 20, "%",      1.000, 0.000
   idleDC           = scalar, U08, 21, "%",      1.000, 0.000
   iTime            = scalar, U16, 22, "s",      1.000, 0.000
   advance          = scalar, U08, 24, "deg",    1.000, 0.000
   afrtarget        = scalar, U08, 25, "ADC",    1.000, 0.000
   fuelADC          =  scalar, U08, 26, "ADC",    1.000, 0.000  ; ADC from X7 (second O2 or fuel pressure)
   egtADC           =  scalar, U08, 27, "ADC",    1.000, 0.000
   CltIatAngle      =  scalar, U08, 28, "deg",    1.000, 0.000
   KnockAngle       =  scalar, U08, 29, "deg",    1.000, 0.000
   egoCorrection2   =  scalar, U08, 30, "%",    1.000, 0.000  ; Second O2 sensor correction
   porta            = scalar, U08, 31, "", 1.000, 0 ; porta raw value
   portb            = scalar, U08, 32, "", 1.000, 0 ; portb raw value
   portc            = scalar, U08, 33, "", 1.000, 0 ; portc raw value
   portd            = scalar, U08, 34, "", 1.000, 0 ; portd raw value
   stackL           = scalar, U08, 35, "", 1.000, 0 ; low byte of stack
   tpsLast          = scalar, U08, 36, "", 1.000, 0 ; TPS last for Accel Wizard
   iTimeX           = scalar, U08, 37, "s",      1.000, 0.000
   bcDC             = scalar, U08, 38, "%", 0.3922, 0.000

   accDecEnrich     = { (engine & 0b00100000) ? 100 : ((pulseWidth-injOpen1) / (pulseWidth-(accelEnrich / 10)-injOpen1) * 100) }, "%" ; In percent, centered on 100% meaning no correction.
   batteryVoltage   = { batADC / 255.0 * 30.0                        } ; Current MS power supply voltage.
   coolant          = { tempCvt(table(cltADC, "thermfactor.inc")-40) } ; Coolant sensor temperature in user units.
   egoVoltage       = { egoADC / 255.0 * 5.0                         } ; EGO sensor voltage.
   ego2Voltage      = { fuelADC / 255.0 * 5.0                        } ; EGO sensor voltage 2.
   mat              = { tempCvt(table(matADC, "matfactor.inc")-40)   } ; Manifold temperature in user units.
   rpm              = { rpm100*100                                    } ; True RPM.
   time             = { timeNow                                      } ; "timeNow" is a parameterless built-in function.
#if CELSIUS
   egttemp          = { egtADC * 3.90625 }                              ; Setup for converting 0-5V = 0 - 1000C
#else
   egttemp          = { egtADC * 7.15625 }                             ; Setup for converting 0-5V = 0 - 1832F
#endif

; Added for second O2 sensor
#if NARROW_BAND_EGO
   afr2             = { table(fuelADC, "NBafr100.inc") / 100.0       }
   lambda2          = { afr2    / 14.7                               }
#elif ZEITRONIX_NON_LINEAR
   lambda2           = { table(fuelADC, "WBafr100Zeit.inc") / 100.0  }
   afr2              = { lambda * 14.7                               }
#elif INNOVATE_LC1_DEFAULT
   lambda2          = { fuelADC/255.0 + 0.5                          }
   afr2             = { lambda * 14.7                                }
#else
   lambda2          = { table(fuelADC, "WBlambda100MOT.inc") / 100.0 }
   afr2             = { lambda2 * 14.7                               }
#endif

#include "lambdaSensors.ini"

#if MPXH6300A
;   barometer        = { table(baroADC, "kpafactor4250.inc")          }
   barometer           = { (baroADC + 1.53) * 1.213675 }
   map                 = { (mapADC + 1.53) * 1.213675 }

#elif MPXH6400A
;   barometer        = { table(baroADC, "kpafactor4250.inc")          }
   barometer           = { (baroADC + 2.147) * 1.6197783 }
   map                 = { (mapADC + 2.147) * 1.6197783 }

#elif MPX4250
   barometer        = { table(baroADC, "kpafactor4250.inc")          }
   map              = { table(mapADC,  "kpafactor4250.inc")          } ; Manifold pressure in kPa.

#else
   barometer        = { table(baroADC, "kpafactor4115.inc")          }
   map              = { table(mapADC,  "kpafactor4115.inc")          }
#endif

   throttle         = { table(tpsADC,  "throttlefactor.inc")         }
   advSpark         = { (advance * 0.352)-10                         }
; Enhanced Stuff
   KnockAng         = { (KnockAngle * 90 / 256) }
   KnockDeg         = { -KnockAng  }
   CltIatAng        = { CltIatAngle * 90 / 256 }
   CltIatDeg        = { CltIatAng < 45? CltIatAng: -90 + CltIatAng } ; Coolant Iat added Angle
   fuelvolt         = { fuelADC < 1 ? 0.0 : fuelADC * (5/255) - 0.5 }
   fuelpress        = { fuelADC < 1 ? 0.0 : fuelvolt / 0.04 +1 }
   altDiv1          = { alternate1 ? 2 : 1                           }
   altDiv2          = { alternate2 ? 2 : 1                           }
   cycleTime1       = { rpm < 100 ? 0 : 60000.0 / rpm * (2.0-twoStroke1)             }
   nSquirts1        = { nCylinders1/divider1                         }
   dutyCycle1       = { rpm < 100 ? 0 : 100.0*nSquirts1/altDiv1*pulseWidth1/cycleTime1 }
   cycleTime2       = { rpm < 100 ? 0 : 60000.0 / rpm * (2.0-twoStroke2)             }
   nSquirts2        = { nCylinders2/divider2        }
   dutyCycle2       = { rpm < 100 ? 0 : 100.0*nSquirts2/altDiv2*pulseWidth2/cycleTime2 }

;  User defined Opening Time for Real Duty Cycle, enter your opening time and select gauge RealDuty1 or 2
   Open_Time1       = {1.0}
   Open_Time2       = {1.0}
   InjectorRating1  = {100} ;Nom Injector flow rating Injector 1
   InjectorRating2  = {100} ;Nom Injector flow rating Injector 2
   dutyCy1Real      = { rpm < 100 ? 0 : InjectorRating1*nSquirts1/altDiv1*(pulseWidth1-Open_Time1)/cycleTime1 }
   dutyCy2Real      = { rpm < 100 ? 0 : InjectorRating2*nSquirts2/altDiv2*(pulseWidth2-Open_Time2)/cycleTime2 } 

; These next two are needed to make the runtime dialog look good.
   veCurr           = { veCurr1     }
   pulseWidth       = { pulseWidth1 }

  ;  G FORCE DISPLAY  Alter Values for XOffset and YOffset to get the G at zero when stationary
  ;                   this is to compensate for any tilting the chip has at rest.

    YOffset         = { 182 }
    XOffset         = { 187 }

    YForce          = { egtADC > YOffset + 1 ? (egtADC  - YOffset) * 0.04464 : egtADC < YOffset - 1 ? (egtADC  - YOffset) * 0.04464 : 0 }  ; 1G = 312mV * 1.41 gain from amp = 440mV
    XForce          = { fuelADC > XOffset + 1 ? (fuelADC  - XOffset) * 0.04464 : fuelADC < XOffset - 1 ? (fuelADC  - XOffset) * 0.04464 : 0  }  ; 1G = 312mV * 1.41 gain from amp = 440mV

  ; Test use only
   test             = { mapDOT }
   test2            = { egtADC }

   iTimefull    = { (iTimeX*65536)+ iTime }
   RpmHitmp     = { iTimefull > 0 ? (60000000 *(2.0-twoStroke1)) / (iTimefull * nCylinders1) : 0 }
   ; get rid of the 1 or 2 rpm display that seems to worry some users
   RpmHiRes     = { RpmHitmp > 20 ? RpmHitmp : 0 }

  ; Vacuum and Boost Gauges
   vacuum = { (barometer-map)*0.2953007 } ; Calculate vacuum in in-Hg.
   boost  = { map < barometer ? 0.0 : (map-barometer)*0.1450377 } ; Calculate boost in PSIG.
   boostVac = { map < barometer ? -vacuum : (map-barometer)*0.1450377 }

  ; Speedo Gauge, when VSS connected to X6 and X7
;****************************************************************************
;  CHANGE THESE TO SUIT YOUR CAR TO GET MPG, MPH, ETC. THIS WILL ONLY WORK WITH A SUITABLE
;  VEHICLE SPEED SENSOR CONNECTED TO MSnS-EXTRA CODE.

   Speed = { 70 }    ; Change this to your actual speed @ 2.5V from VSS circuit
   fuelCC = { 2168 } ; Enter the total flow for all your injectors here in cc/Min

;****************************************************************************
   squirtmul = { divider1 < 2 ? 2 : divider1 < 3 ? 1 : divider1 < 5 ? 0.5 : divider1 < 9 ? 0.25 : divider1 < 17 ? 0.125 : 1 }
   squirts   = { alternate1 > 0 ? rpm100 / 0.6 * squirtmul : rpm100 * 2 * squirtmul / 0.6                                  } ; How many squirts per Sec
   OpenWidth = { injOpen1 * 0.1 }                                            ; Pulse width for injector opening time
   CCpHr     = { pulseWidth < 1 ? 1 : (fuelCC/60) * ((pulseWidth - OpenWidth)/1000) * squirts * 3600                                      } ; cc / hr
   mphTemp   = { fuelADC < 1 ? 0 : (fuelADC * Speed) /127.5               }  ; MPH
   mph       = { mphTemp < 1 ? 0 : mphTemp                                }  ; Ensure we get 0 mph
   USgph     = {  CCpHr / 3785                                            }  ; US Gallons / Hr
   USmpg     = { fuelADC < 1 ? 0 : mph < 1 ? 0 : mph / USgph              }  ; US Miles / Gallon
   gph       = {  CCpHr / 4546                                            }  ; Real Gallons / Hr
   mpg       = { fuelADC < 1 ? 0 : mph < 1 ? 0 : mph / gph                }  ; Real Miles / Gallon

;*****************************************************************************
;  CHANGE THESE VALUES TO FIND THE APPROXIMATE BHP FOR YOUR ENGINE.
;  CALCULATIONS WERE PROVIDED BY ERIC. THESE WILL ONLY WORK IF A SUITABLE VEHICLE SPEED
;  SENSOR IS CONNECTED TO THE MSnS-EXTRA CODE. This is unfinished!

   Cd     = { 0.33 }    ; Change this to your vehicle's Coefficient of Drag (0.25-1.0 for road vehicles)
   Mass   = { 1050 }    ; Change this to your vehicle's weight in KGs.
   Crr    = { 18 }      ; Change this to your vehicle's internal drive train loss. (8% for Nascar,
                    ; diamond-like coating on gears to 25% for road car with automatic transmission)
   Radius = { 16.15 }  ; Change this to your vehicle's driven wheel radius in inch's
   GrTms  = { 0.88 }   ; Ratio of the gear you want to test BHP in.
   DiffRa = { 3.31 }    ; Differential ratio


   floodclear = { tpsADC > 200 ? 1 : 0 }  ; For flood clear indicator on main screen

      tpsDOTTY              = { mapProportion4 ? 0 : (tpsADC - tpsLast) * 0.19 }   ; * 0.019 / 0.1 to convert it to V from ADC and to 1Sec from 0.1Sec
      mapDOTTY              = { mapProportion4 ? (mapADC - tpsLast) / 0.1 : 0 }   ; Divide by 0.1 to convert from 0.1Sec to 1Sec

      tpsDOT                = { tpsDOTTY < 0 ? 0 : tpsDOTTY } ; Only display positive or it gets confusing to read
      mapDOT                = { mapDOTTY < 0 ? 0 : mapDOTTY } ; Only display positive or it gets confusing to read

      Timeroll               =  { portc & 0b00000100 }
      waterIlog              =  { porta & 0b00010000 }

      MAFVolts               = { fuelADC * 0.0196078 }
      
      nosActive1        = { (portd & 0b00000010) ? 0 : 1 } ; "NOS/Tables On",   

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

[Datalog]
   ; Full datalog.
   ;
   ; Default user-defined log emulates the full datalog.
   ;
   ; 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.
   ;
   ;       Channel          Label          Type    Format
   ;       --------------   ----------     -----   ------
;change the next line to #set if you still want to use the older logviewer
#unset MSLVV_COMPATIBLE

#if MSLVV_COMPATIBLE
   entry = time,            "Time",        float,  "%.3f"
   entry = secl,            "SecL",        int,    "%d"
   entry = rpm100,          "RPM",         int,    "%d"
   entry = map,             "MAP",         int,    "%d"
   entry = throttle,        "TP",          int,    "%d"
   entry = egoVoltage,      "O2",          float,  "%.3f"
   entry = mat,             "MAT",         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,    "TPSacc",      int,    "%d"
   entry = veCurr1,         "Gve",         int,    "%d"
   entry = pulseWidth1,     "PW",          float,  "%.1f"

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

   entry = dutyCycle1,      "DutyCycle1",  float,  "%.1f"
   entry = dutyCycle2,      "DutyCycle2",  float,  "%.1f"

   ; Last three are for MSLVV compatibility, but we dont use these, we use the
   ; three underneath.
   entry = pulseWidth2,     "UserData1",   int,    "%d"
   entry = veCurr2,         "UserData2",   int,    "%d"
   entry = idleDC,          "UserData3",   int,    "%d"
#else

; if using the newer log viewer we have no such limits on fields - so do lots
   entry = time,            "Time",        float,  "%.3f"
   entry = secl,            "SecL",        int,    "%d"
   entry = rpm100,          "RPM/100",     int,    "%d"
   entry = map,             "MAP",         int,    "%d"
   entry = throttle,        "TP",          int,    "%d"
   entry = egoVoltage,      "O2",          float,  "%.3f"
   entry = mat,             "MAT",         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,    "TPSacc",      int,    "%d"
   entry = veCurr1,         "Gve",         int,    "%d"
   entry = pulseWidth1,     "PW",          float,  "%.1f"

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

   entry = dutyCycle1,      "DutyCycle1",  float,  "%.1f"
   entry = dutyCycle2,      "DutyCycle2",  float,  "%.1f"

   entry = pulseWidth2,     "pulseWidth2", int,    "%d"
   entry = veCurr2,         "veCurr22",    int,    "%d"
   entry = idleDC,          "idleDC",      int,    "%d"

   entry = bcDC,            "BCDuty3",     int,    "%d"

   entry = advSpark,        "Spark Angle", int,    "%d"
   entry = egttemp,         "EGT",         int,    "%d"
   entry = fuelpress,       "Fuel Press",  int,    "%d"
   entry = KnockDeg,        "Knock",       int,    "%d"
   entry = RpmHiRes,        "RPM",         int,    "%d"
   entry = barometer,       "barometer",   int,    "%d"
   entry = nosActive1,      "NOS On",      int,    "%d"
   entry = batteryVoltage,  "batt V",      float,    "%.1f"
   entry = porta,	          "porta",       int,    "%d"
   entry = portb,	          "portb",       int,    "%d"
   entry = portc,	          "portc",       int,    "%d"
   entry = portd,	          "portd",       int,    "%d"

 ;  entry = XForce,           "X GForce",     float,  "%.2f"   ; X on X7
 ;  entry = YForce,           "Y GForce",     float,  "%.2f"   ; Y on X6
 ;  entry = MAFVolts,         "MAF Volts",    float,  "%.2f"   ; MAF on X7

 ; TEST ONLY - DONT USE
 ;  entry = iTime,            "iTime",        int,    "%d"
 ;  entry = iTimeX,           "iTimeX",       int,    "%d"
 ;  entry = iTimefull,        "iTimeFull",    int,    "%d"
#endif
