Flex Fuel Control

A1C calibration can be modified and configured to operate all EFI-SD4x ECUs in 4 cylinder, 6 cylinder and 8 cylinder configurations.
wwhite
Posts: 400
Joined: 2021 Feb 16, 15:53
Location: Victoria, BC, Canada
Vehicle Information: 1994 Flarside, XLT, 351w E4OD
SD48b, Quarter Horse, Burn2

Re: Flex Fuel Control

Unread post by wwhite »

efloth wrote: 2024 Dec 13, 14:23 It appears that the 106 KAM addresses are from [74d] to [7b7] based on this routine. Thinking of using [7b8] for KAMAFR

Code: Select all

a10d: ad,6a,30            ldzbw R30,6a           wR30 = 6a;    # 106 entries
a110: 01,38               clrw  R38              R38 = 0;
a112: b3,fe,3c,3a         ldb   R3a,[Rfe+3c]     R3a = [bc92];
a116: 38,3a,1c            jb    B0,R3a,a135      if (B0_R3a = 0)  {
a119: af,31,4d,07,3a      ldzbw R3a,[R30+74d]    wR3a = [R30+74d];    # ADAPTIVE FUEL TABLE
a11e: 64,3a,38            ad2w  R38,R3a          R38 += R3a;    # SUM OF ADAPTIVE FUEL CELLS
a121: e0,30,f5            djnz  R30,a119         R30--;
                                                 if (R30 != 0) goto a119;    # loop all KAM entries
                                                 
The code routine above is for KAM_VALIDATION_PROCEDURE.

bc92 "CHKFLG", usually zero, if 1, then KAM is assumed to be valid.
efloth
Posts: 399
Joined: 2021 Feb 15, 22:12
Location: Sacramento CA
Vehicle Information: 1991 F150 4.9L J1X 80lb Injectors E85
1995 F150 5.8L MOB1

Re: Flex Fuel Control

Unread post by efloth »

I have checked and cannot find any reference to any memory address in the 7b8-7d9 range in the A1C code. I can see that [74c] is KAM_CHKSUM so it is possible the KAM Address space is below the 106 adaptive fuel entries. Is the KAM address range documented somewhere? I'll be reading on that.
wwhite
Posts: 400
Joined: 2021 Feb 16, 15:53
Location: Victoria, BC, Canada
Vehicle Information: 1994 Flarside, XLT, 351w E4OD
SD48b, Quarter Horse, Burn2

Re: Flex Fuel Control

Unread post by wwhite »

I commented the code above.
Comments are from LHBH1 documents.

I’ll check for specifics later.
efloth
Posts: 399
Joined: 2021 Feb 15, 22:12
Location: Sacramento CA
Vehicle Information: 1991 F150 4.9L J1X 80lb Injectors E85
1995 F150 5.8L MOB1

Re: Flex Fuel Control

Unread post by efloth »

KAMQA is the first KAM address [700]. FWIW here is a simple patch to always force KAMs to be reset.
Screenshot 2024-12-18 122930.png
efloth
Posts: 399
Joined: 2021 Feb 15, 22:12
Location: Sacramento CA
Vehicle Information: 1991 F150 4.9L J1X 80lb Injectors E85
1995 F150 5.8L MOB1

Re: Flex Fuel Control

Unread post by efloth »

If this screenshot is accurate the KAM Locations are from [700] to [8ff] but only [700] to [7b7] are being used.
Screenshot 2024-12-18 130929.png
Only the 6 ISCKAM and 106 Adaptive Fuel locations are checksum'd (stored at [702] for ISC and [74C] for fuel). The remaining KAM locations are assumed to be correct unless KAMQA-KAMQC are found to be different than their initial special pattern values.
efloth
Posts: 399
Joined: 2021 Feb 15, 22:12
Location: Sacramento CA
Vehicle Information: 1991 F150 4.9L J1X 80lb Injectors E85
1995 F150 5.8L MOB1

Re: Flex Fuel Control

Unread post by efloth »

[716] looks like a winner:

Code: Select all

700	KAMQA
702	ISKSUM
705	KAM_BIT_FLAGS
706	BPKAM
707	BPKYON
708	BPPTWT
709	BPPTWThi
70a	ISCKAM0
70c	ISCKAM1
70e	ISCKAM2
710	ISCKAM3
712	ISCKAM4
714	ISCKAM5
716	AVAILABLE for use -  KAMAFR
718	KAMQB
747	KWUCTR
748	KAMQC
74A	LTMTBLrc
74C	KAM_CHKSUM
74D-7B7	Adaptive Fuel
efloth
Posts: 399
Joined: 2021 Feb 15, 22:12
Location: Sacramento CA
Vehicle Information: 1991 F150 4.9L J1X 80lb Injectors E85
1995 F150 5.8L MOB1

Re: Flex Fuel Control

Unread post by efloth »

Part 1 done.

Before:

Code: Select all

50a9: 6d,e5,8b,3c         ml2w  R3c,8be5         lR3c *= 8be5;
After:

Code: Select all

50a9: 6f,ee,96,3c         ml2w  R3c,[Ree+96]     lR3c *= [716];
wwhite
Posts: 400
Joined: 2021 Feb 16, 15:53
Location: Victoria, BC, Canada
Vehicle Information: 1994 Flarside, XLT, 351w E4OD
SD48b, Quarter Horse, Burn2

Re: Flex Fuel Control

Unread post by wwhite »

How are you going to initialize 0x716 on startup, and set 0x716?

I have comments in my code:

Code: Select all

DETERMINE BASE FUEL FLOW (BASEFF)
# BASEFF is used in the foreground fuel  calculation  and  contains  base  fuel
#   flow, unadjusted for transient fuel, AE fuel, or injector hardware.
50a5: a3,e4,f0,3c         ldw   R3c,[Re4+f0]     R3c = [KAMRF1];
50a9: 6d,e5,8b,3c         ml2w  R3c,8be5         lR3c *= 8be5;                     
# 0x8be5 = 35813; 2^19 = 524288; 524288/35813 = 14.64
So, 8b35 is the stoichiometric for gas in hex, why not just change the stoichiometric to the ratio it should be for the fuel you are running?

Flex fuel should be stoichiometric 9.76, so why set a ram variable, when you can set it statically like it was?

9.76 = 524288 / FLEX_STOICH
FLEX_STOICH = (524288 / 9.76 ) = 53718 = 0xd1d6

Can you not just change 8be5 to d1d6?
efloth
Posts: 399
Joined: 2021 Feb 15, 22:12
Location: Sacramento CA
Vehicle Information: 1991 F150 4.9L J1X 80lb Injectors E85
1995 F150 5.8L MOB1

Re: Flex Fuel Control

Unread post by efloth »

That is what I have done for the last year. The problem is e85 is not available everywhere and my wife always ends up with a random fuel mix when she drives it. Also, running gasoline occasionally cleans out any goo that builds up on the injectors.

[716] will be initialized to AAAA (12:1) when KAMs are determined to be invalid. In the logic I will also re-initialize if the value ends up less than 9 or greater than 15 just for safety reasons. The truck also has two tanks that can end up with a different mix. The idea is to always have the ECU adjust for the correct OL operation when cruising or WOT.
efloth
Posts: 399
Joined: 2021 Feb 15, 22:12
Location: Sacramento CA
Vehicle Information: 1991 F150 4.9L J1X 80lb Injectors E85
1995 F150 5.8L MOB1

Re: Flex Fuel Control

Unread post by efloth »

Part 2 done. Initialization of [716] as AAAA

Before:

Code: Select all

3a2e: c7,ee,80,42         stb   R42,[Ree+80]     [700] = R42;
3a32: c7,ee,98,30         stb   R30,[Ree+98]     [718] = R30;
3a36: c7,ee,c8,32         stb   R32,[Ree+c8]     [748] = R32;
After:

Code: Select all

3a2e: ef,cf,68            call  a300             Sub_a300 ();
3a31: ff                  nop                    
3a32: c7,ee,98,30         stb   R30,[Ree+98]     [718] = R30;
3a36: c7,ee,c8,32         stb   R32,[Ree+c8]     [748] = R32;

Sub_a300:
a300: c7,ee,80,42         stb   R42,[Ree+80]     [700] = R42;
a304: a1,aa,aa,42         ldw   R42,aaaa         R42 = aaaa;
a308: c3,ee,96,42         stw   R42,[Ree+96]     [716] = R42;
a30c: f0                  ret                    return;
Post Reply