View Single Post
Old 12-12-2015, 05:14 PM   #42
ztan
Senior Member
 
Join Date: Jul 2013
Drives: Toyota 86
Location: Gold Coast, Australia
Posts: 311
Thanks: 44
Thanked 363 Times in 145 Posts
Mentioned: 60 Post(s)
Flex Fuel Timing

For this code, I'm using Base Timing B as a E85 table, Base Timing A as an E0 table and interpolating between them based on E%.

The stock ROM has a value (FFF8ADB8 in A01G) which interpolates between the tables and we'll hijack that. Base Timing A gets used after a flash in the first few minutes AVCS is calibrating then switches to Base Timing B for the rest of the time.

Stock code for the base timing table pull:
Code:
ROM:00069C76 D2 46                       mov.l   #RAM_ECT, r2
ROM:00069C78 F8 28                       fmov.s  @R2, fr8
ROM:00069C7A FF 8A                       fmov.s  fr8, @r15
ROM:00069C7C D2 45                       mov.l   #RAM_E_Load, r2
ROM:00069C7E FD 28                       fmov.s  @R2, fr13
ROM:00069C80 0E 80 AD 70                 movi20  #RAM_Base_Timing, r14
ROM:00069C84 35 E1 70 0D                 fmov.s  @((RAM_RPM_1 - RAM_Base_Timing),r14), fr5
ROM:00069C88 FC 5C                       fmov    fr5, fr12
ROM:00069C8A D4 43                       mov.l   #Table_Base_Timing_B, r4
ROM:00069C8C D2 3E                       mov.l   #Pull_3D_A, r2
ROM:00069C8E 42 0B                       jsr     @R2 ; Pull_3D_A
ROM:00069C90 F4 DC                       fmov    fr13, fr4
ROM:00069C90
ROM:00069C92 E0 5C                       mov     #h'5C, r0 ; '\'
ROM:00069C94 FE 07                       fmov.s  fr0, @(r0,r14)  ; ADCC
ROM:00069C96 FE E6                       fmov.s  @(r0,r14), fr14
ROM:00069C98 3F E1 70 12                 fmov.s  @((RAM_Base_Timing_Interp_Factor - RAM_Base_Timing),r14), fr15
ROM:00069C9C D4 3F                       mov.l   #Table_Base_Timing_A, r4
ROM:00069C9E F4 DC                       fmov    fr13, fr4
ROM:00069CA0 D2 39                       mov.l   #Pull_3D_A, r2
ROM:00069CA2 42 0B                       jsr     @R2 ; Pull_3D_A
ROM:00069CA4 F5 CC                       fmov    fr12, fr5
ROM:00069CA4
ROM:00069CA6 E0 60                       mov     #h'60, r0 ; '`'
ROM:00069CA8 FE 07                       fmov.s  fr0, @(r0,r14)  ; FFF8ADD0
ROM:00069CAA FE F2                       fmul    fr15, fr14      ; FFF8ADB8*Base Timing B result
ROM:00069CAC F0 9D                       fldi1   fr0
ROM:00069CAE F0 F1                       fsub    fr15, fr0       ; 1.0-FFF8ADB8
ROM:00069CB0 F8 E6                       fmov.s  @(r0,r14), fr8
ROM:00069CB2 FE 8E                       fmac    fr0, fr8, fr14  ; Base_Timing A *(1-FFF8ADB8) + Base_Timing_B * FFF8ADB8
Modified Flex Fuel Timing code:
Code:
00069C76 D2 46                       mov.l   #RAM_ECT, r2
00069C78 F8 28                       fmov.s  @R2, fr8
00069C7A FF 8A                       fmov.s  fr8, @r15
00069C7C D2 45                       mov.l   #RAM_E_Load, r2
00069C7E FD 28                       fmov.s  @R2, fr13
00069C80 0E 80 AD 70                 movi20  #RAM_Base_Timing, r14
00069C84 35 E1 70 0D                 fmov.s  @((RAM_RPM_1 - RAM_Base_Timing),r14), fr5
00069C88 FC 5C                       fmov    fr5, fr12
00069C8A D4 43                       mov.l   #Table_Base_Timing_E85, r4
00069C8C D2 3E                       mov.l   #Pull_3D_A, r2
00069C8E 42 0B                       jsr     @R2 ; Pull_3D_A
00069C90 F4 DC                       fmov    fr13, fr4
00069C92 D2 02                       mov.l   #FlexFuel_Timing_Interpolation, r2
00069C94 42 4B                       jsr/n   @R2 ; FlexFuel_Timing_Interpolation
00069C96 A0 03                       bra     loc_69CA0
00069C98 00 09                       nop
00069C98             ; ---------------------------------------------------------------------------
00069C9A FF FF                       .data.w h'FFFF
00069C9C 00 0B 98 50 off_69C9C:      .data.l FlexFuel_Timing_Interpolation
00069C9C                                                     ; DATA XREF: Base_Timing_Lookup
00069CA0             ; ---------------------------------------------------------------------------
00069CA0
00069CA0             loc_69CA0:                              ; CODE XREF: Base_Timing_Lookup
00069CA0 D2 39                       mov.l   #Pull_3D_A, r2
00069CA2 42 0B                       jsr     @R2 ; Pull_3D_A
00069CA4 F5 CC                       fmov    fr12, fr5
00069CA6 E0 60                       mov     #h'60, r0 ; '`'
00069CA8 FE 07                       fmov.s  fr0, @(r0,r14)  ; FFF8ADD0: Base Timing E0 Result
00069CAA FE F2                       fmul    fr15, fr14      ; Base timing E85 * FF_Timing_Interpolant
00069CAC F0 9D                       fldi1   fr0
00069CAE F0 F1                       fsub    fr15, fr0       ; 1-FF_Timing_Interpolant
00069CB0 F8 E6                       fmov.s  @(r0,r14), fr8
00069CB2 FE 8E                       fmac    fr0, fr8, fr14  ; (Base timing E0 * (1-FF_Timing_Interpolant)) + (Base timing E85 * FF_Timing_Interpolant)

000B9850             FlexFuel_Timing_Interpolation:          ; CODE XREF: Base_Timing_Lookup
000B9850                                                     ; DATA XREF: Base_Timing_Lookup
000B9850 4F 22                       sts.l   pr, @-r15
000B9852 E0 5C                       mov     #h'5C, r0 ; '\'
000B9854 FE 07                       fmov.s  fr0, @(r0,r14)
000B9856 FE E6                       fmov.s  @(r0,r14), fr14
000B9858 D4 19                       mov.l   #RAM_Flex_Timing_Interpolant, r4
000B985A FF 48                       fmov.s  @r4, fr15
000B985C D4 24                       mov.l   #Table_Base_Timing_E0, r4
000B985E F4 DC                       fmov    fr13, fr4
000B9860 4F 26                       lds.l   @r15+, pr
000B9862 00 6B                       rts/n
Below are daily drive logs moving slowly from E5 to E60 displaying the interpolation value as well as base timing from a significantly knock limited area on E0 : 3200 +/- 50 RPM and 0.8 +/- 0.05 Load
Attached Images
  
ztan is offline   Reply With Quote