diff --git a/README.md b/README.md
index 6ff1291..f9f5316 100644
--- a/README.md
+++ b/README.md
@@ -1,25 +1,48 @@
# MSQur
-'Masker' I guess? Supposed to be a play on imgur.
MegaSquirt MSQ file sharing and viewing site.
+Pronounced 'masker' I guess? Supposed to be a play on imgur.
+
Parses MSQ "XML" in tandem with an associated INI (config) file and displays it in a familiar format for viewing and comparing.
-Try it now at: https://msqur.com/
+Try it now at: https://msqur.com
### Build Status:
-* msqur.com [![Build Status](https://travis-ci.org/nearwood/msqur.svg?branch=msqur.com)](https://travis-ci.org/nearwood/msqur)
+* [msqur.com](https://msqur.com) [![Build Status](https://travis-ci.org/nearwood/msqur.svg?branch=msqur.com)](https://travis-ci.org/nearwood/msqur)
* master [![Build Status](https://travis-ci.org/nearwood/msqur.svg?branch=master)](https://travis-ci.org/nearwood/msqur)
+## Development status
+
+Firmware support:
+
+ - [ ] MS1
+ - [ ] MSnS-extra (partial)
+ - [x] MS2
+ - [x] MS2Extra
+ - [x] MS3
+ - [ ] Speeduino
+
+## Contributing
+
+This is basically a one-man operation. I welcome any contributions: code, styles, text content, or simply spelling & grammar.
+If you're interesting in helping out, please first take a look at the existing [issues](issues) and see if you can offer any assistance with them.
+If you don't see your issue or new idea listed there you can [create a new issue](issues/new). Please be detailed.
+
+If you'd like to run a copy to develop yourself, read the [Installation](#Installation) section below.
+
### Installation
#### Needed software
-* MariaDB, PHP
-* PDO extension for PHP.
+- PHP 7.x with the following extensions:
+ - PDO
+ - OpenSSL
+- MySQL/MariaDB
-#### Recommended software
+#### Optional software
+* Web server (Apache/nginx/etc.)
* phpMyAdmin - For managing the DB
#### Development Setup
@@ -33,6 +56,18 @@ Try it now at: https://msqur.com/
1. Update DB with update scripts in sequential order (patse into phpMyAdmin or piped to `sqlcmd`, etc.)
1. Hit webserver to start using it (eg. `php -S`, etc.)
+### Source tree description
+
+* `db` - Database scripts
+* `doxygen` - Doxygen configuration and generated code documentation
+* `src` - PHP source
+ * `ini` - Megasquirt configuration files
+ * `view` - PHP/JS frontend source
+ * `lib` - JS 3rd party libraries
+ * `img` - Static images
+ * `tests` - PHP Unit Tests (TODO)
+
+
### Update & Deployment Instructions
> These steps are outdated
@@ -48,13 +83,13 @@ msqur is licensed under the GPL v3.0. A copy of this license is included in the
### Who do I talk to?
-* Nicholas Earwood
+* Nick
* nearwood@gmail.com
* https://nearwood.dev/
### Credits
-[CamHenlin](https://github.com/CamHenlin)
+* [CamHenlin](https://github.com/CamHenlin)
> This section needs to be updated
diff --git a/deploy.sh b/deploy.sh
index 8337dd9..430f4e0 100755
--- a/deploy.sh
+++ b/deploy.sh
@@ -1,6 +1,6 @@
#. script.config
-mkdir -p ~\/.ssh
+# mkdir -p ~/.ssh
openssl aes-256-cbc -K $encrypted_571de2096706_key -iv $encrypted_571de2096706_iv -in .travis/travis_ci.enc -out .travis/id_rsa -d
eval "$(ssh-agent -s)"
diff --git a/src/about.php b/src/about.php
index fb15a9e..cac16e1 100644
--- a/src/about.php
+++ b/src/about.php
@@ -22,23 +22,25 @@
?>
About
-
Created out of a need to share .MSQ files.
- I was tired of downloading files and having to open them in MegaTune Tuner Studio.
- So, I created this site. It's open source, so feel free to contribute.
- Since going "live" I only add things here and there whenever I have time or the urge to add features/fixes.
+
Created out of a need to share .MSQ files.
+
I was tired of downloading files and having to open them in MegaTune Tuner Studio, so I created this site.
The frontend is Javascript (jQuery and a little Angular.js). The backend that does most of the work was made with PHP and data is stored in a SQL database.
");
+ if (DEBUG) debug("Add engine: \"$make\", \"$code\", $displacement, $compression, $turbo");
//TODO use any existing one before creating
$st = $this->db->prepare("INSERT INTO engines (make, code, displacement, compression, induction) VALUES (:make, :code, :displacement, :compression, :induction)");
@@ -151,7 +166,7 @@ public function addEngine($make, $code, $displacement, $compression, $turbo)
}
}
- if (DEBUG) debug("
Add engine returns: $id
");
+ if (DEBUG) debug("Add engine returns: $id");
return $id;
}
@@ -178,7 +193,7 @@ public function needReingest($id)
}
else
{
- if (DEBUG) debug("
No result for $id
");
+ if (DEBUG) debug("No result for $id");
echo '
Invalid MSQ
';
$st->closeCursor();
}
@@ -202,17 +217,17 @@ public function resetReingest($id)
try
{
- if (DEBUG) debug('
Updating HTML cache...
');
+ if (DEBUG) debug('Updating HTML cache...');
$st = $this->db->prepare("UPDATE metadata m SET m.reingest=FALSE WHERE m.id = :id");
DB::tryBind($st, ":id", $id);
if ($st->execute())
{
- if (DEBUG) debug('
Reingest reset.
');
+ if (DEBUG) debug('Reingest reset.');
$st->closeCursor();
return true;
}
else
- if (DEBUG) debug('
Unable to update cache.
');
+ if (DEBUG) debug('Unable to update cache.');
$st->closeCursor();
}
@@ -233,13 +248,13 @@ public function getMSQ($id)
{
if (DISABLE_MSQ_CACHE)
{
- if (DEBUG) debug('
Cache disabled.
');
+ if (DEBUG) debug('Cache disabled.');
return FALSE;
}
if ($this->needReingest($id))
{
- if (DEBUG) debug('
Flagged for reingest.
');
+ if (DEBUG) debug('Flagged for reingest.');
$this->resetReingest($id);
return FALSE;
}
@@ -260,14 +275,14 @@ public function getMSQ($id)
$html = $result['html'];
if ($html === NULL)
{
- if (DEBUG) debug('
No HTML cache found.
');
+ if (DEBUG) debug('No HTML cache found.');
return FALSE;
}
- else if (DEBUG) debug('
Cached, returning HTML.
');
+ else if (DEBUG) debug('Cached, returning HTML.');
}
else
{
- if (DEBUG) debug("
No result for $id
");
+ if (DEBUG) debug("No result for $id");
echo '
Invalid MSQ
';
return null;
}
@@ -297,7 +312,7 @@ public function getMSQForDownload($id)
$result = $st->fetch(PDO::FETCH_ASSOC);
$st->closeCursor();
$xml = $result['xml'];
- if (DEBUG) debug('
Cached, returning HTML.
');
+ if (DEBUG) debug('Cached, returning HTML.');
}
else
{
@@ -409,7 +424,7 @@ public function getFirmwareList()
try
{
- if (DEBUG) debug("
Getting firmware list...
");
+ if (DEBUG) debug("Getting firmware list...");
$st = $this->db->prepare("SELECT DISTINCT firmware FROM `metadata`");
if ($st->execute())
@@ -439,7 +454,7 @@ public function getFirmwareVersionList($firmware = null)
try
{
- if (DEBUG) debug("
Getting firmware version list...
");
+ if (DEBUG) debug("Getting firmware version list...");
if ($firmware == null)
{
$st = $this->db->prepare("SELECT DISTINCT signature FROM `metadata`");
@@ -472,7 +487,7 @@ public function getEngineMakeList()
try
{
- if (DEBUG) debug("
Getting engine make list...
");
+ if (DEBUG) debug("Getting engine make list...");
$st = $this->db->prepare("SELECT DISTINCT make FROM `engines`");
if ($st->execute())
@@ -497,7 +512,7 @@ public function getEngineCodeList($make = null)
try
{
- if (DEBUG) debug("
Getting engine code list...
");
+ if (DEBUG) debug("Getting engine code list...");
if ($make !== null && gettype($make) == "string")
{
@@ -537,19 +552,19 @@ public function updateCache($id, $html)
try
{
- if (DEBUG) debug('
Updating HTML cache...
');
+ if (DEBUG) debug('Updating HTML cache...');
$st = $this->db->prepare("UPDATE msqs ms, metadata m SET ms.html=:html WHERE m.msq = ms.id AND m.id = :id");
//$xml = mb_convert_encoding($html, "UTF-8");
DB::tryBind($st, ":id", $id);
DB::tryBind($st, ":html", $html);
if ($st->execute())
{
- if (DEBUG) debug('
Cache updated.
');
+ if (DEBUG) debug('Cache updated.');
$st->closeCursor();
return true;
}
else
- if (DEBUG) debug('
Unable to update cache.
');
+ if (DEBUG) debug('Unable to update cache.');
$st->closeCursor();
}
@@ -581,7 +596,7 @@ public function updateEngine($id, $engine)
try
{
- if (DEBUG) debug('
Updating engine information...
');
+ if (DEBUG) debug('Updating engine information...');
$st = $this->db->prepare("UPDATE engines e, metadata m SET e.numCylinders = :nCylinders, twoStroke = :twoStroke, injType = :injType, nInjectors = :nInjectors, engineType = :engineType WHERE e.id = m.engine AND m.id = :id");
DB::tryBind($st, ":id", $id);
DB::tryBind($st, ":nCylinders", $engine['nCylinders']);
@@ -596,12 +611,12 @@ public function updateEngine($id, $engine)
DB::tryBind($st, ":engineType", $engine['engineType']);
if ($st->execute())
{
- if (DEBUG) debug('
Engine updated.
');
+ if (DEBUG) debug('Engine updated.');
$st->closeCursor();
return true;
}
else
- if (DEBUG) debug('
Unable to update engine metadata.
');
+ if (DEBUG) debug('Unable to update engine metadata.');
$st->closeCursor();
}
@@ -626,13 +641,14 @@ public function updateMetadata($id, $metadata)
if (!array_keys_exist($metadata, 'fileFormat', 'signature', 'firmware', 'author'))
{
+ if (DEBUG) debug('Invalid MSQ metadata: ' . $metadata);
echo '
Incomplete MSQ metadata.
';
return false;
}
try
{
- if (DEBUG) debug('
Updating HTML cache...
');
+ if (DEBUG) debug('Updating HTML cache...');
$st = $this->db->prepare("UPDATE metadata md SET md.fileFormat = :fileFormat, md.signature = :signature, md.firmware = :firmware, md.author = :author WHERE md.id = :id");
//$xml = mb_convert_encoding($html, "UTF-8");
DB::tryBind($st, ":id", $id);
@@ -642,12 +658,12 @@ public function updateMetadata($id, $metadata)
DB::tryBind($st, ":author", $metadata['author']);
if ($st->execute())
{
- if (DEBUG) debug('
Metadata updated.
');
+ if (DEBUG) debug('Metadata updated.');
$st->closeCursor();
return true;
}
else
- if (DEBUG) debug('
Unable to update metadata.
');
+ if (DEBUG) debug('Unable to update metadata.');
$st->closeCursor();
}
@@ -708,6 +724,7 @@ private function dbError($e)
{
if (DEBUG)
{
+ error("DB Error: " . $e->getMessage());
echo '
';
@@ -722,7 +739,7 @@ private function dbError($e)
*/
public function getXML($id)
{
- if (DEBUG) debug('
Getting XML for id: ' . $id . '
');
+ if (DEBUG) debug('Getting XML for id: ' . $id);
if (!$this->connect()) return null;
@@ -732,14 +749,16 @@ public function getXML($id)
{
$st = $this->db->prepare("SELECT xml FROM msqs INNER JOIN metadata ON metadata.msq = msqs.id WHERE metadata.id = :id LIMIT 1");
DB::tryBind($st, ":id", $id);
- if ($st->execute())
+ if ($st->execute() && $st->rowCount() === 1)
{
- if (DEBUG) debug('
";
+ error("Error or empty file: $file");
return null;
}
- else if (DEBUG) debug("
Opened: $file
");
+ else if (DEBUG) debug("Opened: $file");
$globals = array();
$curve = array();
@@ -110,7 +131,7 @@ public static function parse($file, $something)
{
$currentSection = substr($line, 1, -1);
$values[$currentSection] = array();
- if (DEBUG) debug("
Reading section: $currentSection
");
+ if (DEBUG) debug("Reading section: $currentSection");
continue;
}
@@ -123,7 +144,7 @@ public static function parse($file, $something)
//For the menu, this is whether the menu item is visible or enabled.
INI::parseExpression($line);
- //if (DEBUG) debug("
Skipping expression in line: $line
");
+ //if (DEBUG) debug("Skipping expression in line: $line");
continue;
}
@@ -161,7 +182,7 @@ public static function parse($file, $something)
case "curve": //start of new curve
if (!empty($curve))
{//save the last one, if any
- if (DEBUG) debug('
Parsed curve: ' . $curve['id'] . '
');
+ if (DEBUG) debug('Parsed curve: ' . $curve['id']);
//var_export($curve);
$values[$currentSection][$curve['id']] = $curve;
}
@@ -173,7 +194,7 @@ public static function parse($file, $something)
$curve['id'] = $value[0];
$curve['desc'] = trim($value[1], '"');
}
- else if (DEBUG) debug("
Invalid curve: $key
");
+ else if (DEBUG) debug("Invalid curve: $key");
break;
case "topicHelp":
if (is_array($curve))
@@ -188,7 +209,7 @@ public static function parse($file, $something)
$curve['xLabel'] = $value[0];
$curve['yLabel'] = $value[1];
}
- else if (DEBUG) debug("
Invalid curve column label: $key
");
+ else if (DEBUG) debug("Invalid curve column label: $key");
break;
case "xAxis":
$value = array_map('trim', explode(',', $value));
@@ -198,7 +219,7 @@ public static function parse($file, $something)
$curve['xMax'] = $value[1];
$curve['xSomething'] = $value[2];
}
- else if (DEBUG) debug("
Invalid curve X axis: $key
");
+ else if (DEBUG) debug("Invalid curve X axis: $key");
break;
case "yAxis":
$value = array_map('trim', explode(',', $value));
@@ -208,7 +229,7 @@ public static function parse($file, $something)
$curve['yMax'] = $value[1];
$curve['ySomething'] = $value[2];
}
- else if (DEBUG) debug("
Invalid curve Y axis: $key
");
+ else if (DEBUG) debug("Invalid curve Y axis: $key");
break;
case "xBins":
$value = array_map('trim', explode(',', $value));
@@ -218,7 +239,7 @@ public static function parse($file, $something)
//$curve['xBinVar'] = $value[1]; //The value read from the ECU
//Think they all have index 1 except bogus curves
}
- else if (DEBUG) debug("
Invalid curve X bins: $key
");
+ else if (DEBUG) debug("Invalid curve X bins: $key");
break;
case "yBins":
$value = array_map('trim', explode(',', $value));
@@ -226,7 +247,7 @@ public static function parse($file, $something)
{
$curve['yBinConstant'] = $value[0];
}
- else if (DEBUG) debug("
Invalid curve Y bins: $key
");
+ else if (DEBUG) debug("Invalid curve Y bins: $key");
break;
case "gauge": //not all have this
break;
@@ -239,7 +260,7 @@ public static function parse($file, $something)
case "table": //start of new curve
if (!empty($table))
{//save the last one, if any
- if (DEBUG) debug('
Parsed table: ' . $table['id'] . '
');
+ if (DEBUG) debug('Parsed table: ' . $table['id']);
//var_export($curve);
$values[$currentSection][$table['id']] = $table;
}
@@ -253,7 +274,7 @@ public static function parse($file, $something)
$table['desc'] = trim($value[2], '"');
//$table['page'] = $value[3]; //Don't care for this one AFAIK.
}
- else if (DEBUG) debug("
Invalid table: $key
");
+ else if (DEBUG) debug("Invalid table: $key");
break;
case "topicHelp":
if (is_array($table))
@@ -269,7 +290,7 @@ public static function parse($file, $something)
//$table['xBinVar'] = $value[1]; //The value read from the ECU
//Think they all have index 1 except bogus tables
}
- else if (DEBUG) debug("
Invalid table X bins: $key
");
+ else if (DEBUG) debug("Invalid table X bins: $key");
break;
case "yBins":
$value = array_map('trim', explode(',', $value));
@@ -277,7 +298,7 @@ public static function parse($file, $something)
{
$table['yBinConstant'] = $value[0];
}
- else if (DEBUG) debug("
Invalid table Y bins: $key
");
+ else if (DEBUG) debug("Invalid table Y bins: $key");
break;
case "zBins": //not all have this
$value = array_map('trim', explode(',', $value));
@@ -285,7 +306,7 @@ public static function parse($file, $something)
{
$table['zBinConstant'] = $value[0];
}
- else if (DEBUG) debug("
Invalid table Z bins: $key
");
+ else if (DEBUG) debug("Invalid table Z bins: $key");
break;
}
break;
@@ -310,7 +331,6 @@ public static function parse($file, $something)
//Should be global values (don't think any ini's have them)
assert($currentSection === NULL);
$globals[$key] = INI::defaultSectionHandler($value);
- continue; //Skip the section values assignment below
break;
}
}
diff --git a/src/ini/msns-extra/024s.ini b/src/ini/msns-extra/024s.ini
new file mode 100644
index 0000000..6e5d4d1
--- /dev/null
+++ b/src/ini/msns-extra/024s.ini
@@ -0,0 +1,2624 @@
+;-------------------------------------------------------------------------------
+
+[MegaTune]
+ MTversion = 2.25 ; MegaTune itself; needs to match exec version.
+
+ queryCommand = "S"
+ versionInfo = "T"
+ signature = "MSnS-extra format 024s *********"
+ ;!! Suitable for use with 024s7 through 024s13
+
+;-------------------------------------------------------------------------------
+
+[Constants]
+ ; msValue = userValue / scale - translate
+ ; userValue = (msValue + translate) * scale
+ endianness = big
+ nPages = 8
+ burnCommand = "B"
+ pageSize = 200, 200, 200, 200, 200, 200, 200, 200
+ pageActivate = "P\001", "P\002", "P\003", "P\000" , "P\004" , "P\005", "P\006", "P\007"
+ pageReadCommand = "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"
+ 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"
+
+ pageActivationDelay = 50
+ ;USB serial port users may need to increase the following value
+ writeBlocks = on ; Default is on.
+ interWriteDelay = 1 ; Becomes "interCommandDelay" if writeBlocks is "on"
+
+ ; 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
+ #else
+ 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", "INVALID", "INVALID"
+ 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
+
+ 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
+#else
+ tpsBins2 = array, U08, 170, [ 12], "TPS", 1.0, 0.0, 0.0, 255.0, 0
+#endif
+
+ ; crankCold2 = scalar, U08, 144, "ms", 0.1, 0.0, 0.0, 25.5, 1
+ ; crankHot2 = scalar, U08, 145, "ms", 0.1, 0.0, 0.0, 25.5, 1
+ ; asePct2 = scalar, U08, 146, "%", 1.0, 0.0, 0.0, 255.0, 0
+ ; aseCount2 = scalar, U08, 147, "", 1.0, 0.0, 0.0, 255.0, 0
+ ; wueBins2 = array, U08, 148,[ 10], "%", 1.0, 0.0, 0.0, 255.0, 0
+ ; taeBins2 = array, U08, 158,[ 4], "ms", 0.1, 0.0, 0.0, 25.5, 1
+ ; taeColdA2 = scalar, U08, 162, "ms", 0.1, 0.0, 0.0, 25.5, 1
+ ; tpsThresh2 = scalar, U08, 163, "v/s",0.1953125, 0.0, 0.2, 49.8, 3
+ ; taeTime2 = scalar, U08, 164, "ms", 0.1, 0.0, 0.0, 25.5, 1
+ ; tdePct2 = scalar, U08, 165,
+
+#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", "INVALID", "INVALID"
+ 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, 191[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
+ #else
+ 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, U08, 170, "Deg", 0.352, 0, 0, 90, 0
+ CrankAng = scalar, U08, 171, "Deg", 0.352, -28.4, -10, 80, 0
+ IgHold = scalar, U08, 172, "", 1, 0, 0, 100, 0
+; TrigPlus = bits, U08, 173[0:0], "0", "+22.5"
+; TrigPPlus = bits, U08, 173[1:1], "0", "+22.5"
+ 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"
+
+ 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,0 255,0
+
+ fidleUse = bits, U08, 1, [0:0], "Idle control*", "Spark output^"
+ led17Use = bits, U08, 1, [1:1], "Squirt*^", "Spark output"
+ 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"
+
+ 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], "Missing teeth", "2nd trigger"
+ egoIgnCount = bits, U08, 11, [1:1], "mSec", "Ign Pulses*^"
+ whlsim = bits, U08, 11, [2:2], "off", "on"
+ taeIgnCount = bits, U08, 11, [3:3], "Sec*^", "Cycles"
+ ;spare = bits, U08, 11, [4:4], "Off", "On"
+ 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"
+ pwmIdle = bits, U08, 12, [3:3], "B&G On-Off*^", "Fielding PWM"
+ out3sparkd = bits, U08, 12, [4:4], "Output3", "Spark output D"
+ ; dwellcrankmode = bits, U08, 12, [5:5], "Set dwell after spark", "Charge at trigger point*^"
+ 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, 4, 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*^"
+
+#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, 3500, 0
+ VLaunch = bits, U08, 46[1:1], "Off", "On"
+; 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
+ #if CELSIUS
+ fastIdleTemp = scalar, U08, 34, "°C", 0.555, -72.0, -40, 102
+ slowIdleTemp = scalar, U08, 35, "°C", 0.555, -72.0, -40, 102
+ #else
+ fastIdleTemp = scalar, U08, 34, "°F", 1.0, -40.0, -40, 215
+ slowIdleTemp = scalar, U08, 35, "°F", 1.0, -40.0, -40, 215
+ #endif
+ fastIdleRPM = scalar, U08, 36, "RPM", 10.0, 0.0, 10, 2550
+ slowIdleRPM = scalar, U08, 37, "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, 38, "%", 0.502, -26.0, 0.0, 255
+; HARD CUT TYPE SETTINGS FOR REV LIMITER AND LAUNCH AND OVER BOOST
+ HCutType = bits, U08, 46[4:5], "INVALID", "Spark Cut Only", "Fuel & Spark", "Fuel Only"
+ HCutSpark = scalar, U08, 45, "Sparks", 1,0, 0, 20, 0
+ HCutLCType = bits, U08, 76[0:1], "INVALID", "Spark Cut Only", "Fuel & Spark", "Fuel Only"
+ 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 & Spark", "Fuel Only"
+ 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
+;wheel decoder
+ numteeth = scalar, U08, 90, "", 1, 0, 0, 63
+ trig1 = scalar, U08, 25, "", 1, 0, 0, 63
+ trig2 = scalar, U08, 26, "", 1, 0, 0, 63
+ trig3 = scalar, U08, 27, "", 1, 0, 0, 63
+ trig4 = scalar, U08, 28, "", 1, 0, 0, 63
+ trig1ret = scalar, U08, 29, "", 1, 0, 0, 63
+ trig2ret = scalar, U08, 30, "", 1, 0, 0, 63
+ trig3ret = scalar, U08, 31, "", 1, 0, 0, 63
+ trig4ret = scalar, U08, 32, "", 1, 0, 0, 63
+;late leading for rotary. This had better get used! and it didn't......
+; trig1r = scalar, U08, 140, "", 1, 0, 0, 63
+; trig2r = scalar, U08, 141, "", 1, 0, 0, 63
+; trig3r = scalar, U08, 142, "", 1, 0, 0, 63
+
+; 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, 197, "°C", 0.555, -72, -40, 102, 0
+ #else
+ OvrRunClt = scalar, U08, 197, "°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"
+ DecEnrichment = bits, U08, 116[5:5], "TPSdot*^(DT)", "MAPdot"
+ KPaDotBoost = bits, U08, 66[4:4], "Never", "In Boost"
+ DecayAccel = bits, U08, 116[6:6], "None*^(DT)", "Decay"
+ DecayAcPoint = scalar, U08, 198, "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
+; 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, 199, [3:3], "No", "Yes"
+
+; 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
+
+;Dwell control
+;running dwell variable railed to 6 - who needs more than 6ms?
+;mindischarge railed to 1.5ms. ought to be max 1ms I guess?
+ 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, 6, 1
+ mindischg = scalar, U08, 143, "ms", 0.1, 0, 0, 1.5, 1
+
+ idle_dc_lo = scalar, U08, 122, "dc%", 1, 0, 0, 100, 0
+; idle_dc_hi = 0
+ idleperiod = scalar, U08, 144, "ticks", 1, 0, 0, 255, 0
+ idlekickrpm = scalar, U08, 145, "RPM", 100, 0, 100, 6000, 0
+ idlekickdc = scalar, U08, 146, "dc%", 1, 0, 0, 100, 0
+ idledashdc = scalar, U08, 147, "dc%", 1, 0, 0, 100, 0
+ idlemindc = scalar, U08, 148, "dc%", 1, 0, 0, 100, 0
+
+ pwmidlewhen = bits, U08, 109[6:7], "INVALID", "Warmup only", "Closed loop only", "Warmup+closed loop"
+; bc_default = scalar, U08, 124, "dc%", 1, 0, 0, 100, 0
+ #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
+ #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
+ #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
+ #endif
+
+ DecelBoost = bits, U08, 92, [7:7], "Never*^" , "Above KPa Setpoint"
+
+
+; 300 KPA SENSOR
+ KPA300Sens = bits, U08, 116, [0:1], "B+G Sensor*^", "300KPa", "INVALID", "400KPa"
+ KPA300BARO = scalar, U08, 131, "%", 0.39216, 0, 0, 100, 0
+ KPA300Corr = scalar, U08, 175, "%", 0.39216, 0, 0, 100, 0
+
+; 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, 176,[ 4], "ms", 0.1960784, 0.0, 0.0, 25.5, 1
+ maeRates4 = array, U08, 180,[ 4], "ms", 10, 0.0, 0.0, 2550, 0
+ maeBins4 = array, U08, 184,[ 4], "ms", 0.1, 0.0, 0.0, 25.5, 1
+ taeBins4 = array, U08, 188,[ 4], "ms", 0.1, 0.0, 0.0, 25.5, 1
+ taeColdA4 = scalar, U08, 192, "ms", 0.1, 0.0, 0.0, 25.5, 1
+ tpsThresh4 = scalar, U08, 193, "v/s", 0.1953125, 0.0, 0.2, 49.8, 3
+ taeTime4 = scalar, U08, 194, "ms", 0.1, 0.0, 0.0, 25.5, 1
+ tdePct4 = scalar, U08, 195, "%", 1.0, 0.0, 0.0, 255.0, 0
+ taeColdM4 = scalar, U08, 196, "%", 1.0, 0.0, 0.0, 250.0, 0
+ mapProportion4 = bits, U08, 66[7:7], "TPSdot*^(DT)", "MAPdot"
+
+ AccelMapASE = bits, U08, 199, [2:2], "Normal", "Off during ASE"
+
+
+ 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
+ #else
+ tpsBins4 = array, U08, 156, [ 12], "TPS", 1.0, 0.0, 0.0, 255.0, 0
+ #endif
+
+ ; crankCold5 = scalar, U08, 168, "ms", 0.1, 0.0, 0.0, 25.5, 1
+ ; crankHot5 = scalar, U08, 169, "ms", 0.1, 0.0, 0.0, 25.5, 1
+ ; asePct5 = scalar, U08, 170, "%", 1.0, 0.0, 0.0, 255.0, 0
+ ; aseCount5 = scalar, U08, 171, "", 1.0, 0.0, 0.0, 255.0, 0
+ wueBins5 = array, U08, 172,[ 10], "%", 1.0, 0.0, 0.0, 255.0, 0
+ ; primePulse5 = scalar, U08, 182, "ms", 0.1, 0.0, 0.0, 25.5, 1
+
+ CrankPWT1 = scalar, U08, 183, "mS", 0.1, 1, 0, 25.5, 1
+ CrankPWT2 = scalar, U08, 184, "mS", 0.1, 1, 0, 25.5, 1
+ CrankPWT3 = scalar, U08, 185, "mS", 0.1, 1, 0, 25.5, 1
+ CrankPWT4 = scalar, U08, 186, "mS", 0.1, 1, 0, 25.5, 1
+ CrankPWT5 = scalar, U08, 187, "mS", 0.1, 1, 0, 25.5, 1
+ CrankPWT6 = scalar, U08, 188, "mS", 0.1, 1, 0, 25.5, 1
+ CrankPWT7 = scalar, U08, 189, "mS", 0.1, 1, 0, 25.5, 1
+ CrankPWT8 = scalar, U08, 190, "mS", 0.1, 1, 0, 25.5, 1
+ CrankPWT9 = scalar, U08, 191, "mS", 0.1, 1, 0, 25.5, 1
+ CrankPWT10 = scalar, U08, 192, "mS", 0.1, 1, 0, 25.5, 1
+; Priming SETTINGS
+ AlwaysPrime = bits, U08, 193[0:0], "Prime Pulse>0*^", "Always"
+ PrimeLate = bits, U08, 193[1:2], "Power Up*^", "INVALID", "Twice","After 2 Secs"
+ PrimeTBox = bits, U08, 193[3:3], "Priming Table", "Standard Prime"
+; CLT vs MAT for cranking pulse width
+ crankpwip = bits, U08, 193, [4:5], "INVALID", "CLT only*^", "MAT only", "CLT,MAT average"
+
+ CrankRPM = scalar, U08, 194, "rpm", 100.0, 0.0, 100, 1000, 0
+ tpsflood = scalar, U08, 195, "raw", 1.0, 0.0, 0.0, 255.0, 0
+ PrimePulse = scalar, U08, 196, "mS", 0.1, 0.0, 0.0, 25.5, 1
+
+
+ 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
+ #else
+ 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 DIYWB_NON_LINEAR
+ afrBins1 = array, U08, 0, [8x8], "Volts", 0.0196, 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
+ #else
+ 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 DIYWB_NON_LINEAR
+ afrBins2 = array, U08, 80, [8x8], "Volts", 0.0196, 0, 0.0, 5.0, 2
+#elif TECHEDGE_LINEAR
+ afrBins2 = array, U08, 80, [8x8], "AFR", 0.0392, 229, 9.0, 19.0, 1
+#elif INNOVATE_1_2_LINEAR
+ afrBins2 = array, U08, 80, [8x8], "AFR", 0.1961, 0, 0.0, 20.0, 1
+#elif INNOVATE_0_5_LINEAR
+ afrBins2 = array, U08, 80, [8x8], "AFR", 0.0392, 255, 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; Youll 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
+ #else
+ tpsBins7 = array, U08, 152, [ 8], "TPS", 1.0, 0.0, 0.0, 255.0, 0
+ #endif
+
+
+ page = 8 ; boost controller targets+ rotary split table
+ ;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
+
+#if SPEED_DENSITY
+ #if MPXH6300A
+ splitkpaBins = array, U08, 186, [ 6], "kPa", 1.213675, 1.53, 20.0, 304.0, 0
+ #elif MPXH6400A
+ splitkpaBins = array, U08, 186, [ 6], "kPa", 1.6197783, 2.147, 20.0, 400.0, 0
+ #else
+ splitkpaBins = array, U08, 186, [6], "kpa", 1, 0, 0.0, 255.0, 0
+ #endif
+#else
+ splittpsBins = array, U08, 186, [ 6], "TPS", 1.0, 0.0, 0.0, 255.0, 0
+#endif
+
+ splitTable = array, U08, 144, [6x6], "deg", 0.352, -28.4, -10.0, 80.0, 0
+ splitrpmBins = array, U08, 180, [ 6], "RPM", 100.0, 0.0, 100, 25500, 0
+ rotary2 = bits, U08, 192, [0:0], "Off", "On"
+ fixedsplit = scalar, U08, 193, , "deg", 0.352, -28.4, -10.0, 30.0, 0
+;-------------------------------------------------------------------------------
+
+[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.
+ ;
+ ;----------------------------------------------------------------------------
+
+ menu = "Fuel Tables&1+3"
+ subMenu = std_constants, "&Constants 1", 1
+ subMenu = egoControl1, "&Exhaust Gas Settings", 1
+ subMenu = veTable1Tbl, "&VE Table 1", 0
+ subMenu = afrTable1Tbl, "A&FR Targets for VE Table 1", 0, { AfrTar }
+ subMenu = veTable3Tbl, "VE Table &3", 0, { UseVE3 }
+ subMenu = afrTable2Tbl, "AF&R Targets for VE Table 3", 0, { UseVE3 & AfrTar2 }
+
+ menu = "Crank/WarmUp"
+ subMenu = CrankTble, "Cranking Settings", 5
+ subMenu = AfterStTbl, "After start Enrichment Settings", 6
+ subMenu = std_warmup, "&Warmup Wizard", 5
+
+ menu = "Fuel Table&2(DT)", { inj2t }
+ subMenu = std_constants, "&Constants 2 (DT)", 2
+ subMenu = egoControl2, "&Exhaust Gas Settings", 2
+ subMenu = veTable2Tbl, "&VE Table 2 (DT)"
+
+ menu = "&General"
+ subMenu = fuelTable, "&Fuel table selection"
+ subMenu = LambdaSet, "&Lambda AFR Settings"
+ subMenu = OpenLoop, "&Open Loop Mode"
+ subMenu = OvrBoo, "Over &Boost Protection"
+ subMenu = HardLim, "&Hard Cut/Limiter Type"
+ subMenu = RevLimiterS, "Re&v Limiter", 4
+ subMenu = LaunchSettings, "Launch &Control"
+ subMenu = OvrRun, "Over &Run Settings"
+ subMenu = AccelDecc, "&Accel Deccl Mode"
+ subMenu = traction, "Anti-Rev System (&Traction Control)"
+ subMenu = traction2, "Anti-Rev System cont...", 0, {TractionOn}
+ subMenu = idleControl, "&Idle Control", 0, { !fidleUse }
+ 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 }
+
+ 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 = 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 = splitTbl, "Rotary split Table ", 0, { rotary2 }
+
+ menu = "&Code Config"
+ subMenu = codeBase, "&Codebase and outputs function"
+ subMenu = advanced, "(NEW)&Advanced code options"
+ subMenu = wheeldecoder, "Wheel decoder settings", 0, { wheelon }
+ subMenu = MapSettings, "MA&P Sensor Settings"
+ subMenu = BarroCor, "&Barometric Correction"
+ subMenu = outputs, "&Outputs"
+ subMenu = outputs2, "S&hift light/ fan/ Output 3+4"
+ subMenu = WaterInj, "&Water Injection Settings", 0, { !x2use }
+ subMenu = NosSystem, "&Nitrous System"
+ subMenu = Staged, "&Staged Injection"
+
+ menu = "&Tuning"
+ subMenu = std_realtime, "&Realtime Display"
+ subMenu = std_accel, "&Acceleration Wizard", 4
+ 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 }
+
+ menu = "Help"
+ 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 = Shelp3, "&Spark Settings"
+ subMenu = Shelp4, "Spar&k Table Selection"
+ 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"
+
+;-------------------------------------------------------------------------------
+
+[UserDefined]
+
+ dialog = egoControl1, "EGO Control",1
+
+ field = "EGO Sensor Type", egoType1
+ field = "EGO Switch Point", egoSwitch1
+ field = "Ignition Events per Step", egoCount1
+ field = "Controller Step Size", egoDelta1
+ field = "Controller Authority ±", egoLimit1
+ field = "Active Above Coolant Temp", egoTemp1
+ field = "Active Above RPM", egoRPM1
+ field = ""
+ field = "PLEASE NOTE:"
+ field = "For Warmup and Accel bins please see"
+ field = "Warmup and Accel Wizards in Tuning"
+
+
+ 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 = "Ignition Events per Step", egoCount2, {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}
+ ; field = ""
+ ; field = "PLEASE NOTE:"
+ ; field = "For Warmup and Accel bins please see"
+ ; field = "Warmup and Accel Wizards in Tuning"
+
+
+ dialog = codeBase, "Power cycle after changes", 4
+ topicHelp = Chelp1
+ field = "F1 for HELP"
+ field = ""
+ 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 function", led17Use
+ field = "LED18 function", led18Use
+ field = "LED19 function", led19Use
+ field = "Multiplex ignition?", toy_dli
+ field = "X2 function", x2use
+ field = "X4 function", boostUse
+ field = "output3 function", out3sparkd
+
+dialog = wheeldecoder, "Power cycle after changes", 4
+ topicHelp = Fhelp1
+ field = "F1 for HELP"
+ field = ""
+ field = "Wheel decoder base teeth", numteeth
+ field = "2nd trigger / missing teeth", wd_2trig
+ field = "Missing teeth", onetwo, { !wd_2trig }
+ 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 = "ONLY for late leading rotary"
+; field = "Trig pos A 2", trig1r
+; field = "Trig pos B 2", trig2r
+; field = "Trig pos C 2", trig3r
+
+
+
+dialog = advanced, "Power cycle after changes",4
+ topicHelp = Chelp2
+ field = "F1 for HELP"
+ field = ""
+ field = "Functions from DT (*=B+G default)"
+ field = "EGO Correction Step Counter", egoIgnCount
+ field = "Accel Timer", taeIgnCount
+ field = "Hybrid Alpha N", hybridAN
+ field = ""
+ field = "KPa in Alpha-n Calcs:", AlphBaroCor, {algorithm1}
+ field = ""
+ field = "EDIS multispark", edismulti, { edis }
+ field = "EDIS multispark rpm limit", edismultirpm, { edis & edismulti }
+
+dialog = MapSettings, "Power Cycle after Changes",4
+ topicHelp = Chelp7
+ field = "F1 for HELP"
+
+ field = "ENSURE B+G SELECTED UNLESS Non"
+ field = "Standard MAP sensor fitted"
+ field = "Type of MAP Sensor:", KPA300Sens, { mapSensor1 }
+ field = ""
+ field = "Ensure ini file #set correctly if"
+ field = "anything other than B+G selected"
+ field = "*ALL KPa settings will change*"
+ field = ""
+ field = "Baro Correction factor needs to be:"
+ field = "24% for GM 300KPa sensor"
+ field = "28% for 6300A series sensor"
+ field = "78% for 6400A series sensor"
+ field = "Baro Correction Factor", KPA300BARO, {mapSensor1 & KPA300Sens}
+ field = "KPa Correction factor needs to be:"
+ field = "24% for GM 300KPa sensor"
+ field = "28% for 6300A series sensor"
+ field = "50% for 6400A series sensor"
+ field = "KPa Correction Factor", KPA300Corr, {mapSensor1 & KPA300Sens}
+
+ dialog = fuelTable, "Fuel Table selection",4
+ topicHelp = Fhelp2
+ field = "F1 for HELP"
+ field = ""
+ 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 = "F1 for HELP"
+ field = ""
+ 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 = "F1 for HELP"
+ field = ""
+ 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) 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) 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 = "F1 for HELP"
+ field = ""
+ 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
+ field = "Shift light Lower Threshold", ShiftLower, { shiftUse }
+ field = "Shift Light Upper Threshold", ShiftUpper
+;, { shiftUse & (!wd_2trig) }
+ field = "Fan control (X2 or LED18)"
+ field = "Fan on temperature", efanontemp, { x2use + out4FAN }
+ field = "Fan off temperature", efanofftemp, { x2use + out4FAN }
+
+dialog = sparkSettings,"Spark Settings",3
+ topicHelp = Shelp3
+ field = "F1 for HELP"
+ field = ""
+ field = "Trigger Angle = Setting + Additions"
+ field = "e.g. 77+45= 122"
+ field = "Trigger Angle ", TrigAng
+ field = "Trigger Angle addition", Trig_plus
+ 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", CrankAng, { TrigCrank + edis }
+ field = "Hold Ignition", IgHold
+ field = "Spark Output Inverted", IgInv
+ field = ""
+ field = "Fixed Angle (-10 = use map)", FixAng
+ field = "Trim Angle", Trim
+
+dialog = rotarySettings,"Rotary Settings",8
+ 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 = "-1 means trailing OFF"
+ field = "0 means fire simultaneously"
+ field = "other values are the trailing delay in degrees"
+ field = ""
+ field = "Fixed split for testing (-10 = map)", fixedsplit, { rotary2 }
+
+dialog = dwellSettings,"Dwell Settings",4
+ topicHelp = Fhelp1
+ field = "F1 for HELP"
+ field = ""
+ 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 = Fhelp1
+ field = "ONLY FOR USE ON STIM - DO NOT USE ON CAR"
+ field = ""
+ field = "Wheel simulator", whlsim
+ field = "Number of steps/outputs", whlsimcnt
+
+ dialog = idleControl, "Fielding 2-Wire Idle Control", 4
+ topicHelp = Fhelp1
+ field = "F1 for HELP"
+ field = ""
+ field = "Algorithm", pwmIdle
+ field = "When to use PWM idle", pwmidlewhen, { pwmIdle }
+ field = "Idle duty cycle at lower temp", idle_dc_lo, { pwmIdle & (pwmidlewhen !=0) & (pwmidlewhen != 2) }
+ field = "Idle duty cycle at upper temp = 0%"
+ field = "Throttle Threshold", idleThresh, { pwmIdle }
+ field = "Fast Idle (lower) Temp", fastIdleTemp, { pwmIdle }
+ field = "Slow Idle (upper) Temp", slowIdleTemp, { pwmIdle }
+ field = "Fast Idle RPM", fastIdleRPM, { pwmIdle & (pwmidlewhen >1) }
+ field = "Slow Idle RPM", slowIdleRPM, { pwmIdle & (pwmidlewhen >1) }
+ field = "Idle tuning settings"
+ field = "Recalc every x ignition events", idleperiod, { pwmIdle & (pwmidlewhen >1) }
+ field = "Low rpm to kick up duty", idlekickrpm, { pwmIdle & (pwmidlewhen >1) }
+ field = "Kick up duty cycle", idlekickdc, { pwmIdle & (pwmidlewhen >1) }
+ field = "Dashpot duty cycle", idledashdc, { pwmIdle & (pwmidlewhen >1) }
+ field = "Minimum duty cycle", idlemindc, { pwmIdle & (pwmidlewhen >1) }
+; upper idle duty cycle is always zero
+
+ dialog = boostIAT, "IAT Related Boost",4
+ topicHelp = Fhelp1
+ field = "F1 for HELP"
+ field = ""
+ 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 = "F1 for HELP"
+ field = ""
+ 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"
+
+; ENHANCED STUFF
+ dialog = LaunchSettings, "Launch Control", 4
+ topicHelp = Fhelp5
+ field = "F1 for HELP"
+ field = ""
+ field = "Launch Control"
+ field = "Launch Control", launchUse
+ field = "Retard Ignition above ", LachRpm, {launchUse && ignmode}
+ field = "Retard to : ", LachDeg, {launchUse && ignmode}
+ field = "Enable Launch when TPS above ", LachTps, {launchUse}
+ field = "Launch Control Hard Rev Limit", LaunchLim, {launchUse}
+ field = "Variable Launch", VLaunch, {launchUse}
+
+ dialog = LambdaSet, "Lambda Sensor Targets", 4
+ topicHelp = Fhelp3
+ field = "F1 for HELP"
+ field = ""
+ 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 = Fhelp1
+ field = "F1 for HELP"
+ field = ""
+ 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 = "F1 for HELP"
+ field = ""
+ 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 = "F1 for HELP"
+ field = ""
+ 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 = "F1 for HELP"
+ field = ""
+ 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 = "F1 for HELP"
+ field = ""
+ field = "Use Spark Table 1"
+ field = "untill 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 = "F1 for HELP"
+ field = ""
+ field = "OVER BOOST PROTECTION"
+ field = "Over Boost Hard Cut if Boost hits", OvrBKpa
+
+dialog = HardLim, "Hard Cut/Limiter Type", 4
+ topicHelp = Fhelp4
+ field = "F1 for HELP"
+ field = ""
+ 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 = "F1 for HELP"
+ field = ""
+ field = "Nitrous Control", nitrousUse
+ field = "Turn NOS on when above", NosRpm, {nitrousUse}
+ field = "And Coolant Temp above", NosClt, {nitrousUse}
+ field = "And TPS >", NosTps, {nitrousUse}
+ field = ""
+ field = "Additional Fuel PW @ NOS min rpm", NosPWLo, {nitrousUse}
+ field = "NOS Max RPM", NosRpmMax, {nitrousUse}
+ field = "Additional Fuel PW @ NOS Max RPM", NosPWHi, {nitrousUse}
+ field = ""
+ field = "If ST2 off Retard Ignition by" NosAngle, {nitrousUse}
+ field = ""
+ field = "If Dual Table enrich ", DtNos, {nitrousUse}
+ field = ""
+ field = "Turbo Anti-Lag System: (see help)", NosLagSystem, {nitrousUse}
+ field = "Fire NOS when conditions above met"
+ field = "and MAP above", NosLowKpa, {nitrousUse & NosLagSystem}
+ field = "and MAP below", NosHiKpa, {nitrousUse & NosLagSystem}
+
+dialog = Staged, "Staged Injection", 4
+ topicHelp = Chelp6
+ field = "F1 for HELP"
+ field = ""
+ 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 = "Restart MS after changes"
+
+dialog = OvrRun, "Over Run Fuel Cut", 4
+ topicHelp = Chelp8
+ field = "F1 for HELP"
+ field = ""
+ 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 = "F1 for HELP"
+ field = ""
+ field = "Accel Enrichments Trigger:", AccDecEnrich
+ field = "Decel Enrichments Trigger:", DecEnrichment
+ 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 = ""
+ field = "Please see the Accel Wizard in the Tuning Section"
+
+dialog = BarroCor, "Barometric Correction", 4
+ topicHelp = Chelp3
+ field = "F1 for HELP"
+ field = ""
+ field = "To aid 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
+
+dialog = traction, "Anti-Rev System(Traction Control)", 4
+ topicHelp = Fhelp1
+ field = "F1 for HELP"
+ field = ""
+ 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 = "F1 for HELP"
+ field = ""
+ 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 = CrankTble, "Cranking / Prime Table", 5
+ topicHelp = Chelp9
+ field = "F1 for HELP"
+ field = "Cranking RPM", CrankRPM
+ field = "TPS value for flood clear", tpsflood
+
+ 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 = "F1 for HELP"
+ field = "ASE Timer", aseIgnCount
+ field = "ASE TOTAL Time", ASETime
+ field = ""
+ field = "ASE Mode", ASEFixDe
+ field = "MAP mode during ASE", VEFixASE
+ field = ""
+ 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
+
+;*************************** HELP STUFF ***************************************
+help = Fhelp1, "General Help"
+ webHelp = "http://megasquirt.sourceforge.net/extra/"
+ text = "For MS (fuel only) select *. "
+ text = "For MSnS select ^ "
+ text = " "
+ text = "For more help or problems please see the Extra Website by clicking the Web Help button. "
+ text = " "
+ text = "If you can't find an answer there post a thread on http://www.msefi.com "
+ text = "or contact"
+ text = " james@nscc.info "
+ 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 "
+ text = "GammaE On or OFF = :"
+ text = "Accel Enrich, WarmUpEnrich + AirTemp Corr "
+ text = " "
+ text = "INJECTOR CH2 (PW2)"
+ text = "Either use VE Table 1 or 2, 1=Normal 2=DT "
+ text = "GammaE On or Off = :"
+ text = "Accel Enrich, WarmUpEnrich + AirTemp Corr "
+ text = "Pulse Inj CH2 during cranking"
+ text = "Do you want CH2 to add fuel whilst cranking "
+ text = " "
+ 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 "
+ text = "VE3 will replace VE1 when NOS running or Pin6 JP1 low. "
+ 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. "
+
+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. "
+ text = " "
+ text = "There are also 2 AFR target tables. "
+ text = "Table 1 contains the target AFR's for"
+ text = "VE Table 1. "
+ text = "Table 2 contains the target AFR's for"
+ text = "VE Table 3. "
+ 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. "
+ 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. "
+ text = " "
+ text = "We have added the facility to run from the target tables when above a certain TPS setpoint. "
+ text = "If you want to use this set Use Targets to Above TPS and set the TPS setpoint. "
+ text = " "
+
+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. "
+ 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. "
+ text = "Then select how many sparks to cut"
+ text = "in each mode(xx). "
+ text = "So you will get xx cuts in every yy sparks. "
+
+help = Fhelp5, "Launch Control"
+ webHelp = "http://megasquirt.sourceforge.net/extra/launch.htm"
+ text = "Active low input TOMI Header JP1 Pin4 "
+ text = "This holds the RPM by first activating a ignition retard "
+ text = "then a hard cut to help you get a good Launch "
+ text = " "
+ 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. "
+ text = "This is for use with a thumb switch"
+ text = "so launch rpm can be altered at the"
+ text = "track. "
+
+help = Fhelp6, "Accel Decel Mode"
+ webHelp = "http://megasquirt.sourceforge.net/extra/mapdot.html"
+ text = "Select between TPSdot / MAPdot accel/decel enrichment "
+ text = " "
+ text = "The Accel Timer can be changed from Seconds to Engine Cycle counts. "
+ text = " "
+ text = "Normal MS mode finds the increase in PW and holds that till the Accel Timer has timed out. "
+ text = "By selecting Decay it will find the increase to add then it will linearly decrease the Enrichment, "
+ text = "to the Decay Value by the time the Accel Timer has timed out. "
+ text = " "
+ text = "If in MAP mode then you turn off"
+ text = "the accel/decel enrichment when"
+ text = "the engine goes into boost. "
+ text = " "
+ text = "You can also turn just the Decel off in either mode when in Boost to prevent a lean condition in boost "
+ text = " "
+ text = "Please see the Accel Wizard in the Tuning Section"
+
+help = Shelp1, "Knock Detection"
+ text = "Please see: "
+ webHelp = "http://megasquirt.sourceforge.net/extra/knock.html"
+ text = "for more info on this function. "
+
+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. "
+ text = "There is also a max setpoint to"
+ text = "limit the added advance by. "
+ text = " "
+ 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. "
+help = Shelp3, "Spark Settings"
+ webHelp = "http://megasquirt.sourceforge.net/extra/"
+ text = "Trigger Angle: "
+ text = "If you need an angle between 90-112.5"
+ text = "then select the '+22.5' and"
+ text = "enter the angle needed -22.5 "
+ text = "If you need an angle between 112.5-125"
+ text = "then select '+45'"
+ text = "then enter the angle needed -45 "
+ text = "The actual Trigger Angle is : "
+ text = "Trigger Angle + 22.5 or 45 if selected "
+ text = "e.g. 78 + 45 = 123 "
+ text = " 88 + 22.5 = 110.5 "
+ text = " 65 + 0 = 65 "
+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. "
+ 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. "
+ 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. "
+
+help = Chelp1, "Codebase and Output functions"
+ webHelp = "http://megasquirt.sourceforge.net/extra/setup.html"
+ text = "Select all code types OFF for Fuel only"
+ text = "other wise select only one code type. "
+ text = " "
+ text = "Choose I/O pin usage. "
+ text = "FIdle = idle control for fuel only "
+ text = " spark output for MSnS/Edis "
+ text = ""
+ text = "X2 output = Water Inj Pump Out "
+ text = " Cooling Fan Out "
+ text = ""
+ text = "X4 output = Output1 "
+ text = " Boost Control "
+ text = ""
+ text = "Shift Light outputs are on PTC3 and 4 "
+help = Chelp2, "Advanced code options"
+ text = "If using Alpha-n mode then you can still have the KPa "
+ text = "in the fuel calculations. But ensure the MAP sensor connection is "
+ text = "upstream of the throttle. Near the air filter is recommended."
+ text = " "
+ text = " "
+ text = "EGO Correction Step Counter in mSec or "
+ text = "ignition pulses "
+ text = " "
+ text = "Accel Time in Sec's or Engine Cycles "
+ text = " "
+ text = "Interpolated Priming pulse, using the"
+ text = "cranking PW "
+ text = " "
+ text = "Hybrid Alpha N system adds KPa to"
+ text = "Alpha_N for use in Ferrari F40 turbos "
+
+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. "
+ 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. "
+ text = "Now you can limit the BarCorr to the presets. "
+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 "
+ text = " "
+ text = "The output X2 will come on"
+ text = "when the setpoints are met, the IAT"
+ text = "setpoint is ignored when it has started. "
+ text = " "
+ text = "If NOS is not selected then: "
+ text = "Output X3 is pulsed at the same rate"
+ text = "as CH2. This can be used to drive"
+ text = "a fast acting solenoid. "
+ 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. "
+ text = " "
+ text = "NB: O2 correction is turned"
+ text = "off during water injection "
+help = Chelp5, "NOS System"
+ webHelp = "http://megasquirt.sourceforge.net/extra/nitrous.html"
+ text = "Water Inj output X3 will not work in"
+ text = "this mode. "
+ 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. "
+ text = " "
+ 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. "
+ text = " "
+ 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. "
+ text = "See http://megasquirt.sourceforge.net/extra/ "
+ text = "for a suitable wiring diagram. "
+
+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! "
+ 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. "
+ 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. "
+
+help = Chelp7, "MAP Sensor Selection"
+ text = "The code can be used with differnet MAP sensors for capability of up to 400KPa. "
+ text = " "
+ text = "This is for the hard core users who would know what to do with the settings, normal "
+ text = "MS users are STRONGLY advised to leave this set to B+G SENSOR. Any other setting needs "
+ text = "a different pressure sensor fitting to the MS PCB or SEVERE lean conditions can be created."
+ text = " "
+ text = "When using a different sensor you will also need to SET the relavent sensor in the INI file for MT "
+ text = "This can be done by opening the msns-extra.ini file and changing UNSET to SET for your sensor."
+
+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 breaking 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 "
+ text = "Soft Limit setpoint to reduce engine power and to try to reduce engine speed. "
+ text = "If the soft limit point is maintained for the limiter max time setpoint then the "
+ text = "hard limiter will cut in. This will also come in when the RPM reaches the Hard Limit setpoint "
+ text = "the hard limiter can be used in fuel only mode or in spark modes"
+
+help = Chelp9, "Cranking/Priming Table"
+ webHelp = ""
+ text = "CRANKING RPM "
+ text = "The Cranking RPM value lets the MegaSquirt know when the engine is cranking or when it is running. A good starting point would be 300 as most engines crank around 200 RPM; the rule of thumb being about 100 RPM higher than your actual cranking RPM. Do not set this too high because if your RPM dips due to a low idle or a slight stall it will make the MegaSquirt think it is cranking and also reinitiate the afterstart"
+ text = "enrichment period. Set it too low and it will try and use the VE table for crank pulsewidths instead of the Cranking/Priming PW Table, which is not good either. "
+ text = " "
+ text = "TPS VALUE FOR FLOOD CLEAR "
+ text = "Sometimes you might want to temporarily stop the injectors from injecting fuel during cranking to clear a flooded engine. This is achieved by holding down the gas pedal during cranking. The MegaSquirt needs to know at what point of gas pedal deflection it should turn off the injectors and a good starting point would be just before floored. "
+ text = "To get this value, go to Tools, Calibrate TPS, and push the gas pedal almost all the way to the floor - about where you think the fuel should be cut off and hit Get Current. Remember this value and hit CANCEL on the Calibrate TPS dialog. Insert this value for the TPS Flood Clear. If this value is set too low then you will not get any fuel during cranking. If you set this value too high, then you won't be able to press the pedal enough to trigger the Flood Clear. "
+ text = " "
+ text = "PRIME PUMP WHEN "
+ text = "Values for this item are either Prime Pulse > 0 or Always. If you select the first option, the pump will only be primed if the priming pulsewidth setting is greater than zero. If you select the latter option, Always, the pump will be primed regardless of your priming pulsewidth. You will most likely want to use Always as it will get your fuel pressure up before cranking, but you don't necessarily have to inject any fuel. The priming period is two seconds. "
+ text = " "
+ text = "FIRE PRIMING PULSE "
+ text = "The Fire Priming Pulse option allows you to select when a priming pulse is fired. If you select Power Up, a priming pulse will be fired immediately upon turning on the ignition. If you select Twice, one priming pulse will be fired when you first key the ignition on and the second pulse will be fired after a second has passed. If you select After 2 Secs, there will be one priming pulse two seconds after turning on the ignition. "
+ text = "The first option was in the original stock code, however, it will not necessarily work for a cold-start because there there may not already be fuel pressure in the rail when you turn the ignition on. The other two options are just different methods of firing the priming pulse. If you select Twice, then there will most likely be no"
+ text = "fuel injected on the first pulse, unless there is already fuel pressure in the fuel rail, and then there sould be fuel injected on the next pulse. If you select the After 2 Secs option, it will give the fuel pump time to build up pressure. With that option, however, remember that if you try and start the car before allowing two seconds to elapse, no priming pulse will ever be injected. "
+ text = " "
+ text = "PRIMING PW SOURCE "
+ text = "There are two options for the Priming PW Source. You can either select Standard Prime which will inject a fixed amount of fuel as specified in the Standard Priming PW box, or you can select Priming PW Table which will have your priming PW be based off the Cranking/Priming PW Table. If you would like more control over your priming pulsewidths for varying temperatures,"
+ text = "then select Priming PW Table and the values specified in the Cranking/Priming PW Table will be used as the priming pulsewidth for the given temperature. "
+ text = " "
+ text = "STANDARD PRIMING PW "
+ text = "If you selected Standard Prime for the Priming PW Source, then this is where you select how long the injectors will stay open when the priming pulse is fired. This value is in milliseconds. "
+ text = " "
+ text = "CRANKING PULSE WIDTH TEMPS "
+ text = "Here you can select what temperature lookup method you would like to use for the Cranking/Priming PW Table during cranking. CLT Only uses the coolant temperature and is the original Megasquirt option. This is what most people use and if you have a standard setup with a coolant sensor, this is most likely what you will want to use. If you would like to use the manifold temperature instead, select MAT Only. You can also select CLT, MAT Average which uses an average of the two temperatures. "
+ text = " "
+ text = "CRANKING/PRIMING PW TABLE "
+ text = "In older versions of the MegaSquirt firmware, the cranking pulsewidth was handled by a linear interpolation between a high and low temperature pair. A linear curve was not necessarily optimal for some people so now you have the option of setting your cranking pulsewidth at various temperatures. "
+ text = "If you're migrating over from a MegaSquirt version that only used two values, use those as your high and low values in the Cranking/Priming PW Table and then guess the values in between. Then, when you start your car, you can adjust the pulsewidth values for the various temperatures that yield the most reliable and fastest starts. "
+
+
+help = Chelp10, "After Start Enrichment (ASE)"
+ webHelp = ""
+ text = "It's been found that during winter the cranking and after start enrichments need tweeking "
+ text = "in order to get the engine to start and run without restarting it several times from cold. "
+ text = "The reason is felt that the after start and cranking enrichments dont follow temperature in a "
+ text = "linear format. So if you find this is the case you can use this table to tweek areas where it "
+ text = "is difficult to start. It has been found that the areas for concern are around 32F (0C) "
+ text = " "
+ text = " "
+ text = "After Start Enrich Counter is the length of time in Seconds or engine cycles that the "
+ text = "after start enrich runs for. The percentage added is decayed down to zero as the time expires "
+ text = " "
+ text = " "
+ text = "Set ASE Mode to FIXED for a timed period of ASE that does not decay, after the timer the ASE will "
+ text = "then decay as usual during the TOTAL ASE time period thats left. This has a temp setpoint as "
+ text = "it should only be needed when the coolant temperatures are fairly low. "
+ text = " "
+ text = " "
+ text = "Setting MAP to a fixed value helps to maintain a constant PW during the initial start where the "
+ text = "map drops quickly from around 100KPa to the tickover KPa. This is held during the FIXED time period."
+ text = "The FIXED period is a period of time at the start of the TOTAL ASE time. 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 "
+ text = "seperate Ego correction for CH2"
+ text = "only for use when CH2 = VE Table2"
+;-------------------------------------------------------------------------------
+
+[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
+#else
+ 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
+#else
+ 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
+#else
+ yBins = tpsBins3, tpsADC
+#endif
+ zBins = advTable1
+ gridHeight = 3.0
+ upDownLabel = "RETARDED", "ADVANCED"
+
+ table = sparkTbl2, sparkMap2, "Ignition Advance Table 2. See Spark Table selection", 5
+ xBins = rpmBins4, rpm
+#if SPEED_DENSITY
+ yBins = mapBins4, map
+#else
+ 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
+#else
+ 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
+#else
+ 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
+#else
+ yBins = tpsBins7, tpsADC
+#endif
+ zBins = afrBins2
+#elif WB_1_0_LINEAR
+ table = afrTable1Tbl, afrTable1Map, "AFR Targets for VE Table 1 (Volts)", 7
+ xBins = rpmBins6, rpm
+#if SPEED_DENSITY
+ yBins = mapBins6, map
+#else
+ 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
+#else
+ 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
+#else
+ 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
+#else
+ 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
+#else
+ 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
+#else
+ 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", 8
+ xBins = splitrpmBins, rpm
+#if SPEED_DENSITY
+ yBins = splitkpaBins, map
+#else
+ 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
+ baroADCGauge = barometer, "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
+
+ #if NARROW_BAND_EGO
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "volts", 0, 1.0, 0.2, 0.3, 0.6, 0.8, 2, 2
+ #else
+ egoGauge = egoVoltage, "Exhaust Gas Oxygen", "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, "Accel Enrich", "%", 50, 150, -1, -1, 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
+ deadGauge = deadValue, "---", "", 0, 1, -1, -1, 2, 2, 0, 0
+ dutyCycle1Gauge = dutyCycle1, "Duty Cycle 1", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ dutyCycle2Gauge = dutyCycle2, "Duty Cycle 2", "%", 0, 100, -1, -1, 85, 90, 1, 1
+ egoCorrGauge = egoCorrection, "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
+
+ 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, 120, -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
+ ;-------------------------------------------------------------------------------
+
+[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
+
+; gauge1 = tachometer ; normal rpm x100 gauge
+ gauge2 = cltGauge
+ gauge3 = pulseWidth1Gauge
+ gauge4 = dutyCycle1Gauge
+#if SPEED_DENSITY
+ gauge5 = mapGauge
+#else
+ gauge5 = tpsADCGauge
+#endif
+ gauge6 = accelEnrichGauge
+ gauge7 = egoCorrGauge
+ gauge8 = advanceGauge
+
+; Various Gauges for use in the msns-extra code, remove the ";" and renumber
+
+ gauge1 = RpmHiResGauge ; hi-res gauge
+; 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
+; gauge4 = test2Gauge
+
+;new trial indicators
+; expr off-label on-label, off-bg, off-fg, on-bg, on-fg
+; indicator = { tpsaen }, "Not Accelerating", "AE", cyan, white, red, black
+
+; Look in the new colors24b.ini for the basic ones, add more or tell me what to add.
+
+ 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 }, "", "FLOOD CLEAR", white, black, red, black
+; indicator = { portc & 0b00010000 }, "Trig2", "Trig2", 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.
+
+ ; The four radio buttons on the tuning screen select a "page" of six
+ ; gauges. The gauge numbering is the same as the front page, across
+ ; then down.
+ ; 1 2
+ ; 3 4
+ ; 5 6
+ ;
+ ; gaugeColumns allows you to hide or show gauges in column 2 (i.e.,
+ ; gauges 2, 4 and 6).
+
+ gaugeColumns = 2 ; Only 1 or 2 are valid.
+
+ ; Page 1 Page 2 Page 3 Page 4
+ pageButtons = "&EGO", "&WUE", "PW&1", "PW&2"
+ gauge1 = tachometer, tachometer, tachometer, tachometer
+ gauge2 = mapGauge, mapGauge, mapGauge, mapGauge
+ gauge3 = egoGauge, egoGauge, egoGauge, egoGauge
+ gauge4 = egoCorrGauge, warmupEnrichGauge, pulseWidth1Gauge, pulseWidth2Gauge
+ gauge5 = veBucketGauge, veBucketGauge, veBucketGauge, veBucketGauge
+ gauge6 = accelEnrichGauge, accelEnrichGauge, dutyCycle1Gauge, dutyCycle2Gauge
+
+;-------------------------------------------------------------------------------
+
+[OutputChannels]
+ ; The number of bytes MegaTune should expect as a result
+ ; of sending the "A" command to MegaSquirt is determined
+ ; by the value of ochBlockSize, so be very careful when
+ ; you change it.
+
+ deadValue = { 0 } ; Convenient unchanging value.
+ ochGetCommand = "R" ; was "a" and before that "A"
+ ochBlockSize = 38 ; 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, "%", 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
+;not in code T2X = scalar, U08, 38, "s", 1.000, 0.000
+
+ accDecEnrich = { accelEnrich + ((engine & 0b00100000) ? tdePct4 : 100) }
+ 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.
+ 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(egoADC, "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
+; Added for AFR Tables
+
+#include "lambdaSensors.ini"
+
+; Another way of doing it for the Tech Edge linear output:
+; afr = { 9.0 + 0.039216 * egoADC } ; WBLIN, Mot ADC
+; afr = { 9.0 + 0.039063 * egoADC } ; WBLIN, AVR ADC
+;
+; For the Lambdaboy thingy, the three points given
+; (11=2.05, 14.7=4.21, 16=4.98) are damn close to a straight line.
+; Without seeing a graph or table of it, I'd guess it's a linear
+; output from AFR of 7.5 to 16 (0V to 5V), which gives:
+; afr = { 7.5 + 0.0335875 * egoADC } ; LBoy, MOT ADC
+; afr = { 7.5 + 0.0334563 * egoADC } ; LBoy, AVR ADC
+
+
+#if MPXH6300A
+ barometer = { table(baroADC, "kpafactor4250.inc") }
+ map = { (mapADC + 1.53) * 1.213675}
+
+#elif MPXH6400A
+ barometer = { table(baroADC, "kpafactor4250.inc") }
+ 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 }
+
+ ; These next two are needed to make the runtime dialog look good.
+ veCurr = { veCurr1 }
+ pulseWidth = { pulseWidth1 }
+
+ ; Test use only
+ test = {mapDOT}
+ test2 = {egtADC}
+
+ ; Hi Res RPM only for 4 or greater cylinder engines.
+
+; TimeDivisor = {(nCylinders1) > 6 ? 0.86 : (nCylinders1) > 4 ? 0.82 : (nCylinders1) > 2 ? 0.75 : 1}
+; RpmHiResCalc = { (60000000 / ((cTime * (nCylinders1) + 1) / (2.0-twoStroke1))) * TimeDivisor}
+; RpmHiRes = { rpm100 < 5 ? rpm : (nCylinders1) < 3 ? rpm : RpmHiResCalc}
+ iTimefull = { (iTimeX*65536)+ iTime }
+ RpmHiRes = { iTimefull > 0 ? (60000000 *(2.0-twoStroke1)) / (iTimefull * nCylinders1) : 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 }
+;-------------------------------------------------------------------------------
+
+[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
+ ; -------------- ---------- ----- ------
+ 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"
+
+#unset TestCode
+#if TestCode
+ entry = waterIlog, "Water Inj", int, "%d"
+ entry = Timeroll, "TimeRoll", int, "%d"
+
+#else
+ entry = veCurr2, "Gve2", int, "%d"
+ entry = pulseWidth2, "PW2", float, "%.1f"
+#endif
+ 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"
+
+
+ ; These four are for datalogging the egt,fuel pressure, spark angle
+ ; and knock retard. Only 3 can be used at once for MSLVV compatability.
+
+ entry = egttemp, "EGT", int, "%d"
+ entry = advSpark, "Spark Angle", int, "%d"
+ ; entry = fuelpress, "Fuel Press", int, "%d"
+ entry = KnockDeg, "Knock", int, "%d"
+
+ ; TEST ONLY - DONT USE
+ ; entry = iTime, "iTime", int, "%d"
+ ; entry = iTimeX, "iTimeX", int, "%d"
+ ; entry = iTimefull, "iTimeFull", int, "%d"
diff --git a/src/ini/msns-extra/msns-extra.029q-29w.ini b/src/ini/msns-extra/029q.ini
similarity index 100%
rename from src/ini/msns-extra/msns-extra.029q-29w.ini
rename to src/ini/msns-extra/029q.ini
diff --git a/src/ini/msns-extra/029w.ini b/src/ini/msns-extra/029w.ini
new file mode 100644
index 0000000..d84e200
--- /dev/null
+++ b/src/ini/msns-extra/029w.ini
@@ -0,0 +1,3458 @@
+;-------------------------------------------------------------------------------
+[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 *. "
+ text = "For MSnS select ^ "
+ text = " "
+ text = "For more help or problems please see the Extra Website by clicking the Web Help button. "
+ text = " "
+ text = "If you can't find an answer there post a thread on http://www.msefi.com "
+ text = "or contact"
+ text = " james@nscc.info "
+ 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 "
+ text = "GammaE On or OFF = :"
+ text = "Accel Enrich, WarmUpEnrich + AirTemp Corr "
+ text = " "
+ text = "INJECTOR CH2 (PW2)"
+ text = "Either use VE Table 1 or 2, 1=Normal 2=DT "
+ text = "GammaE On or Off = :"
+ text = "Accel Enrich, WarmUpEnrich + AirTemp Corr "
+ text = "Pulse Inj CH2 during cranking"
+ text = "Do you want CH2 to add fuel whilst cranking "
+ text = " "
+ 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 "
+ text = "VE3 will replace VE1 when NOS running or Pin6 JP1 low. "
+ 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. "
+
+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. "
+ text = " "
+ text = "There are also 2 AFR target tables. "
+ text = "Table 1 contains the target AFR's for"
+ text = "VE Table 1. "
+ text = "Table 2 contains the target AFR's for"
+ text = "VE Table 3. "
+ 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. "
+ 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. "
+ text = " "
+ text = "We have added the facility to run from the target tables when above a certain TPS setpoint. "
+ text = "If you want to use this set Use Targets to Above TPS and set the TPS setpoint. "
+ text = " "
+
+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. "
+ 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. "
+ text = "Then select how many sparks to cut"
+ text = "in each mode(xx). "
+ text = "So you will get xx cuts in every yy sparks. "
+
+help = Fhelp5, "Launch Control"
+ webHelp = "http://megasquirt.sourceforge.net/extra/launch.htm"
+ text = "Active low input TOMI Header JP1 Pin4 "
+ 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 "
+ text = "then a hard cut to help you get a good Launch "
+ text = " "
+ 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. "
+ text = "This is for use with a thumb switch"
+ text = "so launch rpm can be altered at the"
+ text = "track. "
+ text = " "
+ 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 "
+ text = " "
+ text = "The Accel Timer can be changed from Seconds to Engine Cycle counts. "
+ text = "Note that a value of 0.3 could mean 0.3 seconds or 3 ignition pulses. "
+ text = "The Cycles option is useful because the enrichment will reduce at higher rpms "
+ text = " "
+ text = "Normal MS mode finds the increase in PW and holds that till the Accel Timer has timed out. "
+ text = "By selecting Decay it will find the increase to add then it will linearly decrease the Enrichment, "
+ text = "to the Decay Value by the time the Accel Timer has timed out. "
+ text = " "
+ text = "If in MAP mode then you turn off"
+ text = "the accel/decel enrichment when"
+ text = "the engine goes into boost. "
+ text = " "
+ text = "You can also turn just the Decel off in either mode when in Boost to prevent a lean condition in boost "
+ text = " "
+ 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. "
+ 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. "
+ 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. "
+ text = " "
+ text = "--B&G on/off simply opens or closes a valve to provide additional air below a temperature threshold "
+ text = " "
+ 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. "
+ text = " "
+ 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. "
+ text = " "
+ text = " "
+ text = "Warmup Settings: "
+ text = "--Lower temp idle frequency is the higher duty cycle required to start and run a cold engine. "
+ text = "--Upper temp idle frequency is the duty cycle the idle valve will be scaled down to as the engine warms up. "
+ text = " "
+ 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 = " "
+ text = "--Idle valve frequency "
+ text = " "
+ 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 "
+ text = " "
+ 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 "
+ text = " "
+ 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. "
+ text = "Some valves may emit a buzzing sound which can be eliminated by increasing the frequency above 100 hertz. "
+ text = " "
+ 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 "
+ text = " "
+ text = " "
+ text = "Closed Loop Settings: "
+ text = " "
+ text = "This is fairly experimental code, but with careful manipulation of variables it should be possible to"
+ text = "produce a stable idle. "
+ text = " "
+ text = "-- Cranking (dc) is the duty cycle required at cranking. "
+ text = "-- Minimum (dc) is the duty cycle slightly lower than a warm idle dc when regulated. "
+ text = "-- Closed (dc) is the duty cycle where the valve closes. "
+ 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. "
+ 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%. "
+ text = "--Fast Idle RPM is the idle target for the engine at, or below the fast idle temperature. "
+ text = "--Slow Idle RPM is the idle target for the engine at, or above the slow idle temperature (fully warmed up). "
+ text = " "
+ text = "The two RPM set points are linearly interpolated between the two temperatures to provide a smooth"
+ text = "transition during warmup "
+ text = " "
+ text = "--TPS Threshold is the point above which the idle valve closes in ADC (as it is no longer needed). "
+ 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 "
+ 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. "
+ 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 "
+ text = "See next help section 'Idle Control (Closed Loop Settings)' for more information. "
+
+help = Ihelp2, "Idle Control (Closed Loop Settings)"
+ webHelp = "http://megasquirt.sourceforge.net/extra/pwmidle.html"
+ text = "More Closed Loop Settings "
+ text = " "
+ text = "Deadband range "
+ text = "This is a range of rpm that you do not want it to bother changing duty cycle to regulate idle. "
+ text = "30 to 50 rpm seems to be good here try smaller values unitl it seems stable. "
+ text = " "
+ text = "Adaptive idle control "
+ 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 = " "
+ 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 "
+ 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 "
+ text = " "
+ text = "Idle Timing "
+ text = " "
+ text = " "
+ text = "Questions can be directed to http://msefi.com"
+
+help = Shelp1, "Knock Detection"
+ text = "Please see: "
+ webHelp = "http://megasquirt.sourceforge.net/extra/knock.html"
+ text = "for more info on this function. "
+
+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. "
+ text = "There is also a max setpoint to"
+ text = "limit the added advance by. "
+ text = " "
+ 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. "
+help = Shelp3, "Spark Settings"
+ webHelp = "http://megasquirt.sourceforge.net/extra/"
+ text = "Trigger Angle: "
+ text = "This is the angle BTDC when the trigger tooth/vane etc. passes the sensor "
+ text = "Typically you should aim for 60-70deg. "
+ text = "If using an OEM distributor setup like HEI7 or TFI then 5-15deg is typical "
+ text = "Do NOT use a value between 15 and 40 deg or your engine will not run correctly. "
+ text = " "
+ text = "If you need an angle between 90-112.5"
+ text = "then select the '+22.5' and"
+ text = "enter the angle needed -22.5 "
+ text = "If you need an angle between 112.5-125"
+ text = "then select '+45'"
+ text = "then enter the angle needed -45 "
+ text = "The actual Trigger Angle is : "
+ text = "Trigger Angle + 22.5 or 45 if selected "
+ text = "e.g. 78 + 45 = 123 "
+ text = " 88 + 22.5 = 110.5 "
+ text = " 65 + 0 = 65 "
+ text = " "
+ 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 = " "
+ 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. "
+ 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. "
+ 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. "
+
+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 = " "
+ 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 = " "
+ 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 = " "
+ text = "Trigger numbers must follow in sequence"
+ text = "
"
+ 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 = " i.e. triggers A,C,E fire coil A; triggers B,D,F fire coil B "
+ 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 "
+ text = "i.e. distributor must have SparkA only; 4cyl wasted spark SparkA, SparkB only "
+ text = " 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 "
+ 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 = " "
+ text = "Choose I/O pin usage. "
+ text = "FIdle = usually idle control "
+ text = " previously it has been used as spark output "
+ text = " "
+ text = "LED17/D14 is prefferred SparkA output "
+ text = "Spark outputs must be used in sequence, i.e. for two outputs you must use A,B "
+ text = ""
+ text = "X2 (JS0) output = Water Inj Pump Out "
+ text = " Cooling Fan Out "
+ text = ""
+ text = "X4 (JS2) output = Output1 "
+ text = " Boost Control "
+ text = ""
+ text = "Shift Light outputs are on PTC3 and 4 (JS7 and JS8 for V3 pcb's) "
+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. "
+ text = " "
+ 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 = " "
+ text = " "
+ text = " "
+ text = "Air Density Correction is most likely built into the MAF you are using, so set"
+ text = " to BUILT INTO MAF."
+ text = " "
+ 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. "
+ 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. "
+ text = "Now you can limit the BarCorr to the presets. "
+ text = " "
+ 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 = " "
+
+ 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 = " "
+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 "
+ text = " "
+ text = "The output X2 will come on"
+ text = "when the setpoints are met, the IAT"
+ text = "setpoint is ignored when it has started. "
+ text = " "
+ text = "If NOS is not selected then: "
+ text = "Output X3 is pulsed at the same rate"
+ text = "as CH2. This can be used to drive"
+ text = "a fast acting solenoid. "
+ 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. "
+ text = " "
+ text = "NB: O2 correction is turned"
+ text = "off during water injection "
+help = Chelp5, "NOS System"
+ webHelp = "http://megasquirt.sourceforge.net/extra/nitrous.html"
+ text = "Water Inj output X3 will not work in"
+ text = "this mode. "
+ 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. "
+ text = " "
+ 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. "
+ text = " "
+ 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. "
+ text = "See http://megasquirt.sourceforge.net/extra/ "
+ text = "for a suitable wiring diagram. "
+
+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! "
+ 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. "
+ 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. "
+
+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 "
+ text = "Soft Limit setpoint to reduce engine power and to try to reduce engine speed. "
+ text = "If the soft limit point is maintained for the limiter max time setpoint then the "
+ text = "hard limiter will cut in. This will also come in when the RPM reaches the Hard Limit setpoint "
+ 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 "
+ 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. "
+ text = " "
+ text = "FIRE PRIMING PULSE "
+ 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. "
+ 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. "
+ text = " "
+ text = "PRIMING PW SOURCE "
+ 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. "
+ text = " "
+ text = "STANDARD PRIMING PW "
+ 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. "
+ text = " "
+ text = "CRANKING PULSE WIDTH TEMPS "
+ 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. "
+ text = " "
+ text = "CRANKING/PRIMING PW TABLE "
+ 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. "
+
+ 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. "
+
+help = Chelp9a, "Cranking/Priming Table"
+ webHelp = ""
+ text = "CRANKING RPM "
+ 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. "
+ text = " "
+ text = "TPS VALUE FOR FLOOD CLEAR "
+ 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. "
+ 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. "
+ text = " "
+ 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 "
+ text = "in order to get the engine to start and run without restarting it several "
+ text = "times from cold. "
+ text = "The reason is felt that the after start and cranking enrichments dont follow "
+ text = "temperature in a "
+ text = "linear format. So if you find this is the case you can use this table to "
+ text = "tweek areas where it "
+ text = "is difficult to start. It has been found that the areas for concern are around "
+ text = "32F (0C) "
+ text = " "
+ text = " "
+ text = "After Start Enrich Counter is the length of time in Seconds or engine cycles "
+ text = "that the "
+ text = "after start enrich runs for. The percentage added is decayed down to zero as "
+ text = "the time expires "
+ text = " "
+ text = " "
+ text = "Set ASE Mode to FIXED for a timed period of ASE that does not decay, after "
+ text = "the timer the ASE will "
+ text = "then decay as usual during the TOTAL ASE time period thats left. This has a "
+ text = "temp setpoint as "
+ text = "it should only be needed when the coolant temperatures are fairly low. "
+ text = " "
+ text = " "
+ text = "Setting MAP to a fixed value helps to maintain a constant PW during the "
+ text = "initial start where the "
+ 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 "
+ 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 = " "
+ 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. "
+ 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 : "
+ text = " Air Density = (MAT Related Air Density) * Coolant related correction % "
+ text = "E.G. Air Density = 120 * 110 % = 132"
+ text = " "
+ 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 = " "
+ 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 = " "
+ 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 = " "
+ text = "We have allowed the temperatures to be user defined, suggested temps would be : "
+ text = "Temp 1 = -40 F "
+ text = "Temp 2 = -20 F "
+ text = "Temp 3 = 0 F "
+ text = "Temp 4 = 20 F "
+ text = "Temp 5 = 50 F "
+ text = "Temp 6 = 80 F "
+ text = "Temp 7 = 120 F "
+
+help = OpenLoopHelp, "Open Loop Mode"
+ text = "You can turn off closed loop oxygen sensor monitoring above a TPS position"
+ text = "or kpa value. "
+ 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. "
+ 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. "
+ text = "If your ignition driver/coil are getting warm or hot then the dwell is too high "
+ text = "Min discharge is the time the coil is allowed to spark before charging starts again. "
+ text = " "
+ 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. "
+ text = " "
+ 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 "
+ 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
diff --git a/src/ini/msns-extra/msns-extra.29y.ini b/src/ini/msns-extra/029y3.ini
similarity index 99%
rename from src/ini/msns-extra/msns-extra.29y.ini
rename to src/ini/msns-extra/029y3.ini
index d7224c5..68e6980 100644
--- a/src/ini/msns-extra/msns-extra.29y.ini
+++ b/src/ini/msns-extra/029y3.ini
@@ -32,8 +32,8 @@
customWBAfrLow = scalar, U16, ":1", 0.01, 0, 0, 25, 2
customWBAfrHigh = scalar, U16, ":1", 0.01, 0, 0, 25, 2
- crankPrime_tempC = array, S16, [10], "C°", 0.1, 0, -40, 240, 1, noMsqSave
- crankPrime_tempF = array, S16, [10], "F°", 0.1, 0, -40, 240, 1, noMsqSave
+ crankPrime_tempC = array, S16, [10], "C�", 0.1, 0, -40, 240, 1, noMsqSave
+ crankPrime_tempF = array, S16, [10], "F�", 0.1, 0, -40, 240, 1, noMsqSave
outputPinMenuView = bits, U08, [0:1], "Output pins 1 - 2", "Output Pins 3 - 4", "OutPut Pins 1,2,3,4", "INVALID"
diff --git a/src/msq.php b/src/msq.php
index 8b4f867..961e970 100644
--- a/src/msq.php
+++ b/src/msq.php
@@ -48,29 +48,38 @@ private function msqConstant($constant, $value, $help)
public function parseMSQ($xml, &$engine, &$metadata)
{
$html = array();
- if (DEBUG) debug('
Parsing MSQ...
');
+ if (DEBUG) debug('Parsing XML...');
$errorCount = 0; //Keep track of how many things go wrong.
+ libxml_use_internal_errors(true);
$msq = simplexml_load_string($xml);
-
- if ($msq)
- {
+
+ if ($msq === false) {
+ error("Failed to parse XML.");
+ foreach(libxml_get_errors() as $error) {
+ error($error->message);
+ }
+
+ $html['header'] = '
Unable to load the corresponding configuration file for that MSQ. Please file a bug!
';
$html['msqHeader'] = $msqHeader;
- return $html;
+ return $html; //TODO Signal caller to skip engine/metadata updates
}
$html['msqHeader'] = $msqHeader;
@@ -99,10 +108,10 @@ public function parseMSQ($xml, &$engine, &$metadata)
{
if (in_array($curve['id'], $this->msq_curve_blacklist))
{
- if (DEBUG) debug('
Skipping curve: ' . $curve['id'] . '
');
+ if (DEBUG) debug('Skipping curve: ' . $curve['id']);
continue;
}
- else if (DEBUG) debug('
Curve: ' . $curve['id'] . '
');
+ else if (DEBUG) debug('Curve: ' . $curve['id']);
//id is just for menu (and our reference)
//need to find xBin (index 0, 1 is the live meatball variable)
@@ -123,14 +132,14 @@ public function parseMSQ($xml, &$engine, &$metadata)
$yAxis = preg_split("/\s+/", trim($yBins));
$html["curves"] .= $this->msqTable2D($curve, $curve['xMin'], $curve['xMax'], $xAxis, $curve['yMin'], $curve['yMax'], $yAxis, $help);
}
- else if (DEBUG) debug('
');
+ if (DEBUG) debug('Adding engine: ' . $_POST['make'] . ', ' . $_POST['code'] . ', ' . $_POST['displacement'] . ', ' . $_POST['compression'] . ', ' . $_POST['aspiration']);
$engineid = $msqur->addEngine($_POST['make'], $_POST['code'], $_POST['displacement'], $_POST['compression'], $_POST['aspiration']);
$fileList = $msqur->addMSQs($files, $engineid);
diff --git a/src/view/footer.php b/src/view/footer.php
index 8ce1a7c..14f66bd 100644
--- a/src/view/footer.php
+++ b/src/view/footer.php
@@ -2,7 +2,7 @@
diff --git a/src/view/msqur.css b/src/view/msqur.css
index e0d7743..c5c82d7 100644
--- a/src/view/msqur.css
+++ b/src/view/msqur.css
@@ -14,25 +14,25 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see . */
-* {
+body, button {
font-family: "Verdana", sans-serif;
}
div.error {
- color: red;
+ color: darkred;
}
div.warn, div.warning {
- color: orange;
+ color: darkorange;
}
div.info {
- color: green;
+ color: #111;
}
div.debug {
font-family: monospace !important;
- color: dark-gray;
+ color: black;
}
div#navigation {
diff --git a/src/view/splash.php b/src/view/splash.php
index a28dd08..2848ca1 100644
--- a/src/view/splash.php
+++ b/src/view/splash.php
@@ -1,37 +1,23 @@
Overview
-
View MSQ files online. Upload your Tuner Studio .msq files to view and share them.
+
View MSQ files online. Upload your Tuner Studio .msq files to view and share them.
How to use this site:
-
+
To add your MSQ file to share and view online:
-
Click on the upload button:
-
-
-
- Click the "Browse" button (or area) and select the MSQ file you want to upload. Note that you can upload more than one at a time, using the same engine information for each:
-
-
-
- Now enter in the engine information for the MSQ file(s):
-
-
-
- Click upload, and you should see links to your MSQ file(s) if successful. You can copy (right-click and select "Copy Link Location" or something like that), or click on it to view the file.
-
-
-
- Now you can browse the various sections of your MSQ file:
-
-
-
- Since I don't have the configuration files for every single Megasquirt version, you might see an error like this:
-
-
-
- If so, please email me (nearwood@gmail.com) with your "INI" file (msqur tries to give you a hint as to the version it needs).
-
+
Click on the upload button:
+
+
Click the "Browse" button (or area) and select the MSQ file you want to upload. Note that you can upload more than one at a time, using the same engine information for each:
+
+
Now enter in the engine information for the MSQ file(s):
+
+
Click upload, and you should see links to your MSQ file(s) if successful. You can copy (right-click and select "Copy Link Location" or something like that), or click on it to view the file.
+
+
Now you can browse the various sections of your MSQ file:
+
+
Since I don't have the configuration files for every single Megasquirt version, you might see an error like this:
+
+
+
If so, please email me (nearwood@gmail.com) with your "INI" file (msqur tries to give you a hint as to the version it needs).
Developers
-
- Interested in contributing? Check out msqur's repository. Msqur's source is licensed under the GPL.
-
+
Interested in contributing? Check out msqur's repository. Msqur's source is licensed under the GPL.