Maps

From the above it can be seen that the eproms are not interchangeable between ecu types.

 

Maps/Data EPROM locations

L1 Address

L6 Address

L8 Address

P8 Address

Bytes

Inj or Ign

Description

FA90 FA94 F800 8800 32 Injection Fuel map RPM header
FAB0 FAB4 F820 8820 32 Injection Fuel map MAP header
FAD0 FAD4 F840 8840 208 Injection Fuel map table 16x13 (P8 = 256bytes 16x16)
FBA0 FBA4 F910 87C0 16 Injection Vbatt correction
FBB0 FBB4 F920 8950 16 Injection Warm up enrichment correction
FBC0 FBC4     16 Injection  
    F930   16 Injection  
FBD0 FBD4 F940 8980 16 Injection Cranking decay enrichment Map ECT header
FBE0 FBE4 F950 8970 16 Injection Cranking decay enrichment Map time header
FBF0 FBF4 F960 8990 64 Injection

Cranking decay enrichment Map table 8x8

FC30 FC34 F9A0   16 Injection WOT enrichment
FC40 FC44 F9B0 8C60 8 Injection Fuel cut Re-enable RPM
FC48 FC4C F9B8 8C68 8 Injection Fuel cut RPM
FC50 FC54 F9C0 8A70 16 Injection Injector start point phasing v RPM
FC60 FC64 F9D0 8A80 16   ACT calibration
FC70 FC74 F9E0 8A90 16   ECT calibration
FC80 FC84 F9F0 8AA0 32 Ignition Ign map RPM header
FCA0 FCA4 FA10 8AC0 16 Ignition Ign map MAP header
FCB0 FCB4 FA20 8AE0 128 Ignition Ign map table 16x8 (P8 = 160bytes 16x10)
FD42 FD46 FAB2 8CD6 2 Injection Rev limit - Hard cut
FD44 FD48 FAB4 8CD8 2 Injection Rev limit - Soft cut
FD64 FD68 FAD4 8A60 16 Injection Cranking fuel
FD74 FD78 FAE4   16   Idle RPM upper limit
FD84 FD88 FAF4   16   Idle RPM lower limit
FDED FDF1 FB5D   2   Min Amal value
FDEF FDF3 FB5F   2   Max Amal value
FDF1 FDF5 FB61   2   Boost reduce RPM value
FE07 FE0B FB77   8   Amal ACT multiplier header
FE0F FE13 FB7F   8   Amal ACT multiplier table
FE17 FE1B FB87   16   Amal map MAP header
FE37 FE3B FBA7   8   Amal map RPM header
FE47 FE4B FBB7   128   Amal map table 16x8
FECF FED3 FC3F   2   Excess boost cut out pressure
FED0 FED4 FC40   2   Excess boost reset pressure
FEDD FEE1 FC4D   16 Ignition Warm up ignition correction
    FC60   16 Injection Warm up enrichment correction
    FCCB 8D00 64 Ignition Knock limit table
    FDD8   64   Faulty MAP calculation values

The important point to note is that the addresses listed are the absolute locations in the memory map. If you read an EPROM on an EPROM programmer then the address will not have the same starting point. Hence a level 6 ecu which has its memory from E000 - FFFF will appear as 0000 - 1FFF on the programmer. So the rev limit at FD46 will be at 1D46.

Modifications

The P8 ecu is the only one which carries out a checksum test on the eprom at power up, so if you change any of the values then you will need to calculate a new checksum. This is obviously impractical when constantly changing values, so the easiest option is to disable the test so it always passes by changing the value at 94CFh from 27h to 20h. The checksum word is stored at 800Eh & 800Fh.

The stage 1 upgrade chip is usually just a standard chip with the rev limit raised and the over boost fuel cut disabled. Fuel and ignition maps are left as standard. Things become more complicated on Stage 2 and greater chips as a change of injectors for ones with greater flow rate and a 3 bar map sensor makes the map scales totally different.

Rev limit

To prevent the engine being damaged by over speeding the engine when accelerating, two rev limiters are implemented in software. The first is a soft cut at 6793rpm which cuts alternate fuel injection cycles and the second is a hard cut at 6996rpm which cuts all the fuel injection cycles. These values are usually changed to 7560rpm and 7780rpm respectively in a modified chip to allow for modifications which push the power band up the rev range.

L1=FD44 L6=FD48 L8=FAB4 P8=8CD8

The above values are the locations of the 16 bit word which defines the soft cut limit.

A typical value will be 0114 in hex which is 276 decimal.

L1=FD42 L6=FD46 L8=FAB2 P8=8CD6

The above values are the locations of the 16bit word which defines the hard cut limit.

A typical value will be 010C in hex which is 268 in decimal.

The engine speed is a value which is captured every 180 crank degrees from a 16 bit counter which is incremented at 1MHz and then divided by 16, so the faster the engine goes the smaller the number becomes. Hence 276 is 6793 rpm and 268 is 6996 rpm.

To calculate the value required use :- VALUE = 1875000 / RPM.

 

Boost limit

This is a safety device built in to the program to turn off the injectors if the boost goes too high and not re-enable it until it drops below another value. By raising the value to FF the value can never be exceeded so the boost can be turned up as high as required (as long as the fuel capacity of the injectors isn't exceeded causing a lean mixture).

L1=FECF L6=FED3 L8=FC3F

The above values are the locations of the byte which defines the excess boost cut out pressure.

A typical value will be F0 in hex which is 240 in decimal.

L1=FED0 L6=FED4 L8=FC40

The above values are the locations of the byte which defines the excess boost reset pressure.

A typical value will be DC in hex which is 220 in decimal.

The 8 bit MAP sensor value is used as the input with 0 being max vacuum and 255 being max boost. (1 bar on a 2 bar map sensor).

The P8 uses a far more complex method than a single over boost trip limit, with the value depending on engine speed, ACT and an extra over boost allowance for a short time period.

 

Fuel Map

L1 = FA90
L6 = FA94 L8=F800 P8 = 8800

 

The 256 byte block of data below is the main fuel table for a level 6 ecu.

01 55

01

A1 01 D5 02 18 02 71 02 AA 02 EE 03 41
03 AA 04 12 04 94 05 3B 06 1B 07 53 09 28 0C 35
01 20 01 5A 01 93 02 24 02 AE 03 3E 03 DF 04 AF
05 73 06 42 07 12 08 04 09 01 09 01 09 01 09 01
CE CE D4 CB D0 D0 D1 D1 D1 D1 D7 E7 F1 FB F0 E6
B5 B5 B9 B1 B5 B5 B6 B6 B6 B6 BD C8 D2 D6 D1 C6
9E 9E A0 9D 9C 9C 9E 9F 9E 9D A4 AA B5 B3 B4 A7
8D 8D 8D 89 87 88 89 8C 8A 88 8E 91 9C 96 9A 92
7A 7A 7A 74 72 74 74 77 76 74 78 78 82 7D 80 7C
66 66 66 5E 5E 60 60 63 64 61 64 60 6B 67 67 67
4E 4E 50 46 47 4B 4A 4C 4E 4C 4E 4A 52 4E 4F 51
3B 3B 3C 35 36 3B 39 3A 3D 3D 3E 39 40 3C 3C 40
29 29 2B 27 28 2A 28 28 2B 2E 2D 29 31 2C 2C 30
1B 1A 1D 1B 1B 1E 1C 1C 1E 21 1E 1C 21 1D 1C 22
0D 0C 0D 0F 10 12 11 11 13 14 0F 0F 11 0D 0E 12
09 08 08 09 0A 0C 0A 0A 0D 0B 0C 0A 0A 07 07 0C
05 06 06 06 05 05 05 05 05 04 04 04 03 02 02 02

The top two rows are the RPM headers, the next two rows are the MAP headers and the following 13 rows are the actual fuel map itself. The headers use words and the map uses bytes.

RPM header

Converting hex to decimal and using the formula RPM = 1875000 / VALUE we get

0155 01A1 01D5 0218 0271 02AA 02EE 0341 03AA 0412 0494 053B 061B 0753 0928 0C35
5498 4496 3998 3498 3000 2749 2500 2250 1999 1799 1599 1350 1150 1000 800 600

Each of the 16 rpm sites applies to one of the 16 columns in the fuel map so we have a spread from 600rpm - 5498 rpm.

The P8 uses the formula RPM = 25600000 / VALUE.

MAP header

Converting hex to decimal and then to a pressure in bar we get

0120 015A 0193 0224 02AE 033E 03DF 04AF 0573 0642 0712 0804 0901 0901 0901 0901
288 346 403 548 686 830 991 1199 1395 1602 1810 2052 2305 2305 2305 2305
0.21 0.25 0.29 0.40 0.50 0.60 0.72 0.87 1.01 1.16 1.31 1.49 1.67 1.67 1.67 1.67

The last 4 values are the same so this forces the table to be only 13 long. Each of these 13 MAP values will correspond with each of the 13 rows in the fuel map. On a 2 bar map sensor 1380 is approximately atmospheric pressure with 0 being -1 bar and 2760 being +1bar. The 16 bit map value is created from the 8 bit map value from the A-D converter but is modified by altitude compensation at power up, the mixture adjustment pot and ACT. So we have a spread from 288 which is full vacuum on deceleration (0.20 bar) to 2305 which is max boost (1.67 bar). The values are biased closer together around the idling end of the scale where the mixture is most critical for emissions / smooth running and then more spaced out under boost.

A close approximation is 16bit MAP value = 1380 x manifold pressure (bar) assuming 40'C ACT temperature.

Hence the fuel map is a 16 x 13 table of bytes.

  600 800 1000 1150 1350 1599 1799 1999 2250 2500 2749 3000 3498 3998 4496 5498
1.67 CE CE D4 CB D0 D0 D1 D1 D1 D1 D7 E7 F1 FB F0 E6
1.49 B5 B5 B9 B1 B5 B5 B6 B6 B6 B6 BD C8 D2 D6 D1 C6
1.31 9E 9E A0 9D 9C 9C 9E 9F 9E 9D A4 AA B5 B3 B4 A7
1.16 8D 8D 8D 89 87 88 89 8C 8A 88 8E 91 9C 96 9A 92
1.01 7A 7A 7A 74 72 74 74 77 76 74 78 78 82 7D 80 7C
0.87 66 66 66 5E 5E 60 60 63 64 61 64 60 6B 67 67 67
0.72 4E 4E 50 46 47 4B 4A 4C 4E 4C 4E 4A 52 4E 4F 51
0.60 3B 3B 3C 35 36 3B 39 3A 3D 3D 3E 39 40 3C 3C 40
0.50 29 29 2B 27 28 2A 28 28 2B 2E 2D 29 31 2C 2C 30
0.40 1B 1A 1D 1B 1B 1E 1C 1C 1E 21 1E 1C 21 1D 1C 22
0.29 0D 0C 0D 0F 10 12 11 11 13 14 0F 0F 11 0D 0E 12
0.25 09 08 08 09 0A 0C 0A 0A 0D 0B 0C 0A 0A 07 07 0C
0.21 05 06 06 06 05 05 05 05 05 04 04 04 03 02 02 02

The values in the table increase with manifold pressure vertically and with maximum engine torque horizontally. The values are not actual injection times as there are a number of correction factors applied such as a table multiplier, battery volts, coolant temperature etc.

Note - If you swap the MAP sensor from a 2 bar type to a 3 bar type then the table headers will change to the values in the table below.

0120 015A 0193 0224 02AE 033E 03DF 04AF 0573 0642 0712 0804 0901 0901 0901 0901
288 346 403 548 686 830 991 1199 1395 1602 1810 2052 2305 2305 2305 2305
0.27 0.33 0.38 0.52 0.65 0.79 0.94 1.14 1.33 1.53 1.73 1.96 2.20 2.20 2.20 2.20

A close approximation is 16bit MAP value = 1050 x manifold pressure (bar) assuming 40'C ACT temperature.

The P8 uses 16 sites instead of 14 and a 2.5bar map sensor.

 

Ignition Map

L1 = FC80
L6 = FC84 L8=F9F0 P8 = 8AA0

 

The 176 byte block of data below is the ignition table for a level 6 ecu.

01 20 01 39 01 55 01 77 01 A1 01 D5 02 18 02 71
02 AA 02 EE 03 41 04 12 05 3B 07 53 09 28 0E A6
00 E7 01 B0 02 24 03 3E 05 73 07 12 09 01 09 E8
30 27 26 20 18 10 0C 08 06 02 08 16 22 2C 32 36
30 2C 2E 2E 2C 1E 1A 17 14 10 20 30 38 3E 42 46
30 2D 32 38 36 34 33 32 33 37 3C 42 47 4B 4F 52
30 28 28 28 2B 2E 32 36 3C 42 47 4B 4F 52 55 58
38 28 28 1C 1B 1F 27 32 3B 48 52 57 5B 5E 60 62
40 40 40 2A 26 26 30 3C 44 53 5C 67 70 73 76 78
40 40 40 33 2F 2F 35 3C 43 50 5B 68 76 80 86 88
40 40 40 3D 3B 3C 3D 3F 42 49 56 67 7A 88 8C 8F

The top two rows are the RPM headers, the next row is the MAP header and the following 8 rows are the actual ignition map itself.

RPM header

Converting hex to decimal and using the formula RPM = 1875000 / VALUE we get

0120 0139 0155 0177 01A1 01D5 0218 0271 02AA 02EE 0341 0412 053B 0753 0928 0EA6
6510 5990 5499 5000 4496 3998 3498 3000 2749 2500 2251 1799 1400 1000 800 500

Each of the 16 rpm sites applies to one of the 16 columns in the fuel map so we have a spread from 500rpm - 6510 rpm.

The P8 uses the formula RPM = 25600000 / VALUE.

MAP header

Converting hex to decimal and then to a pressure in bar we get

00E7 01B0 0224 033E 0573 0712 0901 09E8
231 432 548 830 1395 1810 2305 2536
0.17 0.31 0.40 0.60 1.01 1.31 1.67 1.84

Hence the ignition map is a 16 x 8 table of bytes.

  500 800 1000 1400 1799 2251 2500 2749 3000 3498 3998 4496 5000 5499 5990 6510
1.84 30 27 26 20 18 10 0C 08 06 02 08 16 22 2C 32 36
1.67 30 2C 2E 2E 2C 1E 1A 17 14 10 20 30 38 3E 42 46
1.31 30 2D 32 38 36 34 33 32 33 37 3C 42 47 4B 4F 52
1.01 30 28 28 28 2B 2E 32 36 3C 42 47 4B 4F 52 55 58
0.60 38 28 28 1C 1B 1F 27 32 3B 48 52 57 5B 5E 60 62
0.40 40 40 40 2A 26 26 30 3C 44 53 5C 67 70 73 76 78
0.31 40 40 40 33 2F 2F 35 3C 43 50 5B 68 76 80 86 88
0.17 40 40 40 3D 3B 3C 3D 3F 42 49 56 67 7A 88 8C 8F

These ignition values can be easily converted into actual advance values by dividing by 4, giving a resolution of 0.25 degrees and a maximum possible advance of 63.75 degrees. The final advance applied to the engine is slightly modified by factors such as engine / air temperature, external retard select inputs etc.

  500 800 1000 1400 1799 2251 2500 2749 3000 3498 3998 4496 5000 5499 5990 6510
1.84 12.0 9.75 9.5 8.0 6.0 4.0 3.0 2.0 1.5 0.5 2.0 4.0 8.5 11 12.5 13.5
1.67 12.0 11.0 11.5 11.5 11.0 7.5 6.5 5.75 5.0 4.0 8.0 12.0 14.0 15.5 16.5 17.5
1.31 12.0 11.25 12.5 14.0 13.5 13.0 12.75 12.5 12.75 13.75 15.0 16.5 17.75 18.75 19.75 20.5
1.01 12.0 10.0 10.0 10.0 10.75 11.5 12.5 13.5 15.0 16.5 17.75 18.75 19.75 20.5 21.25 22.0
0.60 14.0 10.0 10.0 7.0 6.75 7.75 9.75 12.5 14.75 18.0 20.5 21.75 22.75 23.5 24.0 24.5
0.40 16.0 16.0 16.0 10.5 9.5 9.5 12. 15.0 17.0 20.75 23.0 25.75 28.0 28.75 29.5 30.0
0.31 16.0 16.0 16.0 12.75 11.75 11.75 13.25 15.0 16.75 20.0 22.75 26.0 29.5 32.0 33.5 34.0
0.17 16.0 16.0 16.0 15.25 14.75 15.0 15.25 15.75 16.5 18.25 21.5 25.75 30.5 34.0 35.0 35.75

The P8 uses 10 sites instead of 8 and a 2.5bar map sensor.

 

Cranking decay enrichment map

L1 = FBD0
L6 = FBD4 L8=F940 P8 = 8980

 

The 96 byte block of data below is the fuel enrichment map.

00 21 00 28 00 2F 00 35 00 41 00 51 00 71 00 A2
00 05 00 69 00 9B 00 E1 00 F0 00 F8 00 FA 00 FA
18 14 13 12 11 10 10 10 28 20 1A 18 14 12 10 10
30 28 20 1C 16 13 10 10 50 2C 24 20 19 14 10 10
50 2C 24 20 19 14 10 10 B0 50 30 26 20 15 10 10
D0 50 30 26 20 15 10 10 F0 F0 90 30 20 15 10 10

The top row is the engine coolant temperature header, the next row is the engine revolution count header and the following 4 rows are the enrichment data.

ECT header

Converting the hex from the ect a-d into temperature ('c)

0021 0028 002F 0035 0041 0051 0071 00A2
-38 -31 -18 -15 -5 5 20 65

Revolutions header

Converting hex to decimal and subtracting from 255 we get the number of engine revolutions for that column since the engine started turning.

0005 0069 009B 00E1 00F0 00F8 00FA 00FA
250 150 100 30 15 7 5 5

Hence the cranking decay enrichment map is an 8 x 8 table of bytes.

  5 5 7 15 30 100 150 250
65'C 18 14 13 12 11 10 10 10
20'C 28 20 1A 18 14 12 10 10
5'C 30 28 20 1C 16 13 10 10
-5'C 50 2C 24 20 19 14 10 10
-15'C 68 40 28 23 1C 14 10 10
-18'C B0 50 30 26 20 15 10 10
-31'C D0 50 30 26 20 15 10 10
-38'C F0 F0 90 30 20 15 10 10

These values can be can be turned into a multiplier by converting to decimal and dividing by 16.

  5 5 7 15 30 100 150 250
65'C 1.5 1.25 1.19 1.12 1.06 1 1 1
20'C 2.5 2 1.6 1.5 1.25 1.12 1 1
5'C 3 2.5 2 1.75 1.38 1.18 1 1
-5'C 5 2.75 2.25 2 1.56 1.25 1 1
-15'C 6.5 4 2.5 2.2 1.75 1.25 1 1
-18'C 11 5 3 2.38 2 1.31 1 1
-31'C 13 5 3 2.38 2 1.31 1 1
-38'C 15 15 9 3 2 1.31 1 1

These values may need to be increased if the engine runs correctly using the warm up enrichment correction once going but tends to stumble / die a few seconds after starting from an overnight cold start, but is ok after a restart. Cylinder head material, inlet port design, injector positioning can all affect the amount of extra fuel an engine needs to compensate for the fuel dropping out of the airstream before it reaches the cylinder. This is only a short term compensation as 250 revs is only about 15 seconds at 1000 rpm. It starts decaying as soon as the engine starts cranking and keeps decaying as the engine , hopefully, starts running. The amount of fuel injected can be observed to reduce during extended cranking of a non starting engine.

 

ECT calibration table

L1 = FC70
L6 = FC74 L8=F9E0 P8 = 8A90

 

These 16 bytes of data convert the 8 bit value from the a-d converter for the ect input from a nonlinear value into a more evenly spread value for use by other look up tables.

F0
F0
F0
B2
98
89
7C
71
67
5C
52
47
3A
23
00
00

Transposing the ect voltage using the table creates

-55
-43
-31
-19
-7
5
17
29
41
53
65
77
89
101
113
125

Hence the value has gone from an exponential curve to a linear value which increases by 10hex per 12'C. Changing the ect sensor for one with a different output resistance v temp curve will require modification to this table to keep the same conversion values else all the ecu tables will have to be recalibrated.

 

ACT calibration table

L1 = FC60
L6 = FC64 L8=F9D0 P8 = 8A80

 

Like the ect table, these 16 bytes of data convert the 8 bit value from the a-d converter for the act input from a nonlinear value into a more evenly spread value.

F0
E2
E2
C5
B8
AF
A6
A2
9C
98
92
8C
84
76
5E
00

Transposing the act voltage using the table creates

-55
-55
-55
-55
-55
-55
-55
-35
-15
5
25
50
75
100
125
125

The act value is not used directly in any 16 byte look ups so it has been compressed over a 9 byte span.

 

Warm up enrichment table

L1 = FBB0 L6 = FBB4 L8=F920 P8 = 8950

 

    L8=FC60  

 

 

This 16 byte table is a multiplier for the fuel injection time relative to engine coolant temperature.

7A
7A
7A
75
6D
61
54
4D
49
45
42
40
40
3F
3F
3F

This table uses the ect table as a look up offset. To convert a table value to a multiplier value you convert it to decimal and use the formula:-

multiplier = value / 64

So it becomes:-

-55'C -43'C -31'C -19'C -7'C 5'C 17'C 29'C 41'C 53'C 65'C 77'C 89'C 101'C 113'C 125'C
x1.91 x1.91 x1.91 x1.83 x1.70 x1.52 x1.31 x1.20 x1.14 x1.08 x1.03 x1.00 x1.00 x0.98 x0.98 x0.98

As can be seen from the above, the amount of fuel injected is nearly doubled at arctic temperatures and actually leaned off slightly when the temperature reaches 100'C. A value of 40hex will create a multiplier value of exactly 1, so no change is made to the fuel quantity injected.

The L8 ecu also has the same table at FC60 (with a slightly richer set of values) which is used after the engine is started for about half a minute and then changes over to the above one (unless the engine temperature was lower than about 15'C in which case it will use the table until 65'C has been reached before switching).

 

Wide open throttle (WOT) enrichment table

L1 = FC30 L6 = FC34 L8=F9A0

 

 

This 16 byte table is a multiplier for the fuel injection time relative to engine speed, which is added if the throttle is determined to be open far enough to require it.

8D
8D
8D
8D
8D
8C
8C
8C
8C
8A
91
97
97
97
98
98

This table uses the fuel map rpm header as a look up offset. To convert a table value to a multiplier value you convert it to decimal and use the formula:-

multiplier = value / 128

So it becomes:-

600 800 1000 1150 1350 1599 1799 1999 2250 2500 2749 3000 3498 3998 4496 5498
x1.10 x1.10 x1.10 x1.10 x1.10 x1.09 x1.09 x1.09 x1.09 x1.08 x1.13 x1.18 x1.18 x1.18 x1.19 x1.19

As can be seen from the above, the amount of extra fuel injected is 10 percent at low rpm and 18 to 19 percent extra when exceeding 3000rpm, to keep a safe rich mixture when accelerating hard.

 

Cranking fuel table

L1 = FD64
L6 = FD68 L8=FAD4 P8 = 8A60

 

This 16 byte table is used to control the injection period for the first injection cycle when the the engine is cranking over.

F9
F9
F4
9C
45
27
1D
19
15
11
0D
0D
0D
0D
0D
0D

This table uses the ect table as a look up offset. To convert a value to an injection time you multiply the looked up number by 100h, convert to decimal and multiply by 4uS (which is the injector clock frequency). So it becomes:-

-55'C -43'C -31'C -19'C -7'C 5'C 17'C 29'C 41'C 53'C 65'C 77'C 89'C 101'C 113'C 125'C
255mS 255mS 250mS 160mS 71mS 40mS 29.7mS 25.6mS 21.5mS 17.4mS 13.3mS 13.3mS 13.3mS 13.3mS 13.3mS 13.3mS

This table is the equivalent of pumping the throttle pedal on an old carburetor fed engine to squirt extra fuel into the manifold. As can be seen from the above, at very cold temperatures the injectors will fire a large amount of fuel into the manifold to compensate for fuel condensing on the cold walls. Changing the injectors for ones with more flow will need a proportional reduction in these values to prevent the engine flooding before it can even start. Also some engines with more efficient designs of manifold / injector spray patterns can cope with a lot smaller values.

 

Amal Map

L1 = FE17
L6 = FE1B L8 = FB87

 

The 176 byte block of data below is the amal table for a level 6 ecu.

00 85 00 95 00 B4 00 B9 00 BC 00 C3 00 C5 00 C8
00 C9 00 CC 00 D1 00 D2 00 D5 00 D6 00 DB 00 DC
01 14 01 20 01 39 01 46 01 77 01 D5 02 71 02 EE
00 04 82 8C C8 FF FF FF FF FF FF FF FF FF FF FF
00 00 00 04 50 5A C8 FF FF FF FF FF FF FF FF FF
00 00 00 00 04 14 8C C8 FF FF FF FF FF FF FF FF
00 00 00 00 04 14 8C C8 FF FF FF FF FF FF FF FF
00 00 00 00 00 00 04 14 8C C8 FF FF FF FF FF FF
00 00 00 00 00 00 00 00 04 32 53 C8 C8 C8 C8 C8
00 00 00 00 00 00 00 00 00 00 00 00 00 4C 4C 4C
00 00 00 00 00 00 00 00 00 00 00 00 00 04 04 04

The top two rows are the MAP headers, the next row is the RPM header and the following 8 rows are the actual amal map itself.

MAP header

This uses the 8 bit corrected MAP value so converting hex to decimal and then to a pressure in bar we get

0085 0095 00B4 00B9 00BC 00C3 00C5 00C8 00C9 00CC 00D1 00D2 00D5 00D6 00DB 00DC
133 149 180 185 188 195 197 200 201 204 209 210 213 214 219 220
1.18 1.32 1.59 1.63 1.66 1.72 1.73 1.76 1.77 1.79 1.84 1.85 1.87 1.88 1.92 1.93

Each of the 16 map sites applies to one of the 16 columns in the amal map so we have a spread from 1.18bar - 1.93bar.

RPM header

Converting hex to decimal and using the formula RPM = 1875000 / VALUE we get

0114 0120 0139 0146 0177 01D5 0271 02EE
6793 6510 5990 5752 5000 3998 3000 2500

Hence the amal map is a 16 x 8 table of bytes.

  1.93 1.92 1.88 1.87 1.85 1.84 1.79 1.77 1.76 1.73 1.72 1.66 1.63 1.59 1.32 1.18
2500 00 04 82 8C C8 FF FF FF FF FF FF FF FF FF FF FF
3000 00 00 00 04 50 5A C8 FF FF FF FF FF FF FF FF FF
3998 00 00 00 00 04 14 8C C8 FF FF FF FF FF FF FF FF
5000 00 00 00 00 04 14 8C C8 FF FF FF FF FF FF FF FF
5752 00 00 00 00 00 04 14 8C C8 FF FF FF FF FF FF FF
5990 00 00 00 00 00 00 00 00 04 32 53 C8 C8 C8 C8 C8
6510 00 00 00 00 00 00 00 00 00 00 00 00 00 4C 4C 4C
6793 00 00 00 00 00 00 00 00 00 00 00 00 00 04 04 04

The amal table is used to create a pwm value to drive the valve with FF being fully open (maximum boost) and 00 being fully closed (minimum boost). As can be seen from the pattern of bytes above, the valve is fully open at low revs and low boost pressure (top right) and then progressively closed as the revs rise above 5752rpm or the boost exceeds 1.76 bar absolute. The value is further modified by air charge temperature (boost reduced if ACT too high or too low) and also if the revs are held above 6250rpm. The level 8 map has altered MAP headers and table values to allow a higher boost pressure in general and also more boost at higher rpm. A change to a 3 bar map sensor will require changes to the MAP header to allow for the modified range.

 

Amal ACT multiplier header / table

L1 = FE07
L6 = FE0B L8 = FB77

 

The 16 bytes of data, shown below, are the same for all ecu types. The first 8 bytes are the header for the next 8 bytes which are the table.

8B
93
9E
A9
B0
B9
C0
C9
00
80
FF
FF
F5
E4
D2
C8

The header bytes define which ACT value relates to which column in the next table

8B 93 9E A9 B0 B9 C0 C9
0'C 9'C 22'C 39'C 50'C 64'C 75'C 89'C

The table itself contains the multiplier values in the range of 0 to 1

00 80 FF FF F5 E4 D2 C8
x 0.0 x 0.5 x 1.0 x 1.0 x 0.96 x 0.89 x 0.82 x 0.78

Hence we get

0'C 9'C 22'C 39'C 50'C 64'C 75'C 89'C
x 0% x 50% x 100% x 100% x 96% x 89% x 82% x 78%

The multiplier is used to modify the amal pwm value. Full boost is only available with an air charge temperature from 22'C to 39'C. Above 80'C the boost will be reduced by about 20% to reduce the risk of knocking and below 0'C the valve will be totally closed causing boost to reduce to its minimum. The lower end temperatures are set low to prevent engine damage when thrashing an engine from cold and would be unlikely to be encountered on a hot engine with a standard intercooler in the UK but may be encountered with a very big intercooler.

 

Injector start point phasing

L1 = FC50
L6 = FC54 L8=F9C0 P8 = 8A70

 

This 16 byte table below for the level 6 is used to control the point at which the injection period begins v engine rpm.

80
80
80
80
80
60
60
60
60
40
40
20
20
20
20
20

This table uses the rpm header from the fuel map as a header.

600 800 1000 1150 1350 1599 1799 1999 2250 2500 2749 3000 3498 3998 4496 5498
80 80 80 80 80 60 60 60 60 40 40 20 20 20 20 20
270' 270' 270' 270' 270' 180' 180' 180' 180' 90' 90' 0' 0' 0' 0' 0'

All angles are multiples of 90' and are taken from the cylinder being at TDC on its firing stroke (in preparation for the next cycle). At idling rpm the injection period will be short, so it is started 270 degrees late, so it occurs just before the inlet valve opens (90' before tdc on exhaust stroke). At high rpm the injection starts straight away to give maximum time for the injector before the inlet closes. Only values of 20h,40h,60h,80h are used (the larger the number the greater the delay). The L8 makes the change to 0' delay at a lower rpm then the L1 & L6.