Introduction

Select Monitor Adapter
Subaru Diagnostic Ports
How to build a PC adapter
Protocol
Software
Troubleshooting
Eavesdropping

Engine Control Unit (ECU)
Description
Reading Error Codes
Reverse Engineering
Modifying
ROM images

Transmission Control Unit (TCU)
Description
Reading Error Codes
Reverse Engineering
Power Mode
Modifying
ROM images

Other Control Units
Air Conditioning Unit
4WS Control Unit
Cruise Control Unit

OBD2 Information
Select Monitor Cartridge

Downloads
Links to other sites

Custom TCU Development



Subaru 4EAT Power Mode

From the driver's perspective, the SVX TCU has two modes: Normal mode for normal driving, and Power mode that causes the gears to upshift at higher RPM for times when you want more acceleration. The method for engaging power mode depends on the target market of the car. I believe that other Subaru models with a 4EAT transmission and JECS TCU may have a similar function.

JDM cars

The JDM SVX has a switch next to the shifter that engages Normal or Power mode. In addition, Power mode is automatically engaged if you kick down on the throttle pedal. Some JDM owners prefer to keep the switch in Power mode position because it makes the car feel more sporty and responsive even at lower RPMs.

I traced the wiring of my JDM car and found that the Power Mode Switch connects pin A4 of the TCU to ground, that is pin 4 of the 1st TCU connector.

USDM cars

The USDM SVX does not have a switch for power mode. Power mode can only be engaged by kicking down on the throttle pedal. Nomake Wan examined the wiring on his USDM car and found pin A4 was not connected. So he grounded it to see what would happen. When he put shifter in D, the power mode came on, just like the Japanese cars.

Since then, a lot of USDM SVX owners have connected up switches to enable power mode and the feedback has been overwhelmingly positive. It makes the car feel much more responsive and sporty to drive.

When writing the program for the USDM TCU, Subaru clearly gave themselves the option of having a Power Mode switch, but for some reason did not follow through to installing it on the car.

See these threads on the SVX Network for Nomake's HOWTO and feedback from people who have tried this mod.

Power Mode Selection
Power Mode Switch Installed, Very Pleased

EUDM cars

The European SVX differs from the others in that it has three modes instead of two. There is Normal mode, Power mode when you kick down on the throttle, and Economy mode activated by a button on the shifter.

The Economy mode switch connects to pin A4 of the TCU. The same pin that is used by the Power mode switch on the JDM cars. The only way to make a Power Mode switch for the European TCU is to reprogram the TCU.

I have created a modified TCU ROM that allows European SVX owners to have a Power Mode switch. With my modified ROM installed, Economy Mode is gone and the Economy switch selects either Normal or Power mode.

The Australian SVX uses the same TCU ROM as the Euro model and therefore also has Economy mode, but the switch is not wired. If you have an Australian SVX and want to make it more economical, you can wire a switch to pin A4. Alternatively, if you want to make the car feel sportier and more fun to drive then you can use my modified ROM.

How it works

Grounding pin A4 of the TCU causes bit 6 (0x40) of address 0x0011 in the TCU memory to change from 0 to 1. The TCU program looks at the value of this bit when deciding which shift mode to use. Below are extracts from the TCU program of JDM, USDM and UK cars. This is the subroutine that determines whether to use Normal or Power mode. I have added comments to make it easier to read.

JDM Model


e76f 12 8a 02 20 brset (0x008A), 0x02, [0xE793] ; If TPS_Faulty goto e793
e773 12 3a 80 1c brset (0x003A), 0x80, [0xE793] ; If VSS_Faulty goto e793
e777 12 11 20 18 brset (0x0011), 0x20, [0xE793] ; If Cruise_Engaged goto e793
e77b 12 12 40 14 brset (0x0012), 0x40, [0xE793] ; If Manual Switch goto e793
e77f 13 11 40 04 brclr (0x0011), 0x40, [0xE787] ; If NOT Power Switch goto e787
e783 c6 02       ldab 0x02                      ; Mode=Power
e785 20 55       bra [0xE7DC]                   ; goto e7dc
e787 12 5a 02 08 brset (0x005A), 0x02, [0xE793] ; If Mode=Power goto e793
e78b 96 4d       ldaa (0x004D)
e78d 84 07       anda 0x07                      ; If Stick in D,3 or 2
e78f 81 03       cmpa 0x03                      ; goto e796
e791 25 03       bcs [0xE796]
e793 5f          clrb                           ; Mode=Normal        
e794 20 46       bra [0xE7DC]                   ; Goto e7dc
e796 ce c9 04    ldx 0xC904
e799 96 18       ldaa (0x0018)                  ; Decide which mode to use
e79b 5f          clrb                           ; based on speed and throttle
e79c a1 00       cmpa (X+0x00)
.....
e7dc d7 5a       stab (0x005A)                  ; Store Mode
e7de 39          rts                            ; Exit

In the JDM code, the command at location e77f says if the Power switch is off, goto e787. Otherwise (ie. Power Switch is on), the program sets the B register to 2 and goes to e7dc. At e7dc it stores the value of the B register at location 005a, which is the variable that indicates which shift map to use. The value of 0x005a is 0 for "Normal Mode", 1 for "Power Mode due to throttle" and 2 for "Power Mode due to switch"


USDM Model

e6cc 12 8a 02 16 brset (0x008A), 0x02, [0xE6E6] ; If TPS_Faulty goto e6e6
e6d0 12 3a 80 12 brset (0x003A), 0x80, [0xE6E6] ; If VSS_Faulty goto e6e6
e6d4 12 11 20 0e brset (0x0011), 0x20, [0xE6E6] ; If Cruise_Engaged goto e6e6
e6d8 96 4d       ldaa (0x004D) 
e6da 84 07       anda 0x07                      ; If stick in D goto e6e9
e6dc 27 0b       beq [0xE6E9]
e6de 12 12 40 04 brset (0x0012), 0x40, [0xE6E6] ; If Manual_Switch goto e6e6
e6e2 81 03       cmpa 0x03
e6e4 25 03       bcs [0xE6E9]                   ; If stick in 123 goto e6e9
e6e6 5f          clrb                           ; Mode=Normal
e6e7 20 4b       bra [0xE734]                   ; goto e734
e6e9 5f          clrb
e6ea 12 11 40 45 brset (0x0011), 0x40, [0xE733] ; If Power_Switch goto e733
....
Decide which mode to use based on Speed and Throttle
Go to e734
....
e733 5c          incb                           ; Mode=Power
e734 d7 5a       stab (0x005A)                  ; Store Mode
e736 39          rts                            ; Exit

In the USDM code, the state of the Power switch is checked when the stick is in D or when the manual switch is OFF and the stick is in 1, 2 or 3. In this case the value of 0x005A is 0 for normal mode and 1 for power mode, regardless of how power mode was engaged.


UK Model

e5f7 12 8a 02 18 brset (0x008A), 0x02, [0xE613] ; If TPS_Faulty goto e613
e5fb 12 3a 80 14 brset (0x003A), 0x80, [0xE613] ; If VSS_Faulty goto e613
e5ff 12 11 20 10 brset (0x0011), 0x20, [0xE613] ; If Cruise_Engaged goto e613
e603 12 12 40 0c brset (0x0012), 0x40, [0xE613] ; If Manual Switch goto e613
e607 12 11 40 08 brset (0x0011), 0x40, [0xE613] ; If Economy Switch goto e613
e60b 96 4d       ldaa (0x004D)
e60d 84 07       anda 0x07                      ; If Stick in D,3 or 2
e60f 81 03       cmpa 0x03                      ; goto e616
e611 25 03       bcs [0xE616]
e613 5f          clrb                           ; Mode=Normal
e614 20 47       bra [0xE65D]                   ; Goto e65d
e616 5f          clrb                
e617 ce c8 fe    ldx 0xC8FE                     ; Decide which mode to use 
e61a 96 18       ldaa (0x0018)                  ; based on Speed and Throttle
e61c 5f          clrb
e61d a1 00       cmpa (X+0x00)
.....
e65d d7 5a       stab (0x005A)                  ; Store Mode        
e65f 39          rts                            ; Exit

In the UK code, you can see that the Economy switch prevents the Power Mode from being engaged by kickdown of the throttle. When the Economy switch is on, the mode gets set to "Normal" and the subroutine exits. But there is more to Economy mode than that. Elsewhere in the program, the Economy switch is checked again and a different shift map is used if Economy Switch is engaged.

Modified UK TCU

e5f7 5f          clrb                           ; Mode=Normal
e5f8 12 8a 02 61 brset (0x008A), 0x02, [0xE65D] ; If TPS_Faulty goto e65d
e5fc 12 3a 80 5d brset (0x003A), 0x80, [0xE65D] ; If VSS_Faulty goto e65d
e600 12 11 20 59 brset (0x0011), 0x20, [0xE65D] ; If Cruise_Engaged goto e65d
e604 12 12 40 55 brset (0x0012), 0x20, [0xE65D] ; If Manual Switch goto e65d
e608 12 11 40 04 brset (0x0011), 0x40, [0xE610] ; If Economy Switch goto e610
e60c c6 02       ldab 0x02                      ; Mode=Power
e60e 20 4d       bra [0xE65D]                   ; Goto e65d
e610 96 4d       lda (0x004D)
e612 84 07       anda 0x07                      ; If Stick not D32 goto e65d
e614 81 03       cmpa 0x03                        
e616 24 45       bcc [0xE65D]
e618 ce c8 fe    ldx 0xC8FE                     ; Decide which mode to use
e61b 96 18       ldaa (0x0018)                  ; based on Speed and Throttle
e61d a1 00       cmpa (X+0x00)
.....
e65d d7 5a       stab (0x005A)                  ; Store Mode
e65f 39          rts                            ; Exit

Rather than having a separate "clrb" for each possible execution path, I have put a single one at the start, and I have changed the destination of the "brset" instruction to go directly to e65d. This creates a few bytes of space where I can insert the extra code.

The instruction at e608 says, if the economy switch is on, goto e610, which carries out the normal processing - power mode on kickdown. However, if the ecomony switch is off, the instruction at e60c will set the B register to 2 and go to e65d, which stores the value of the B register at location 005a. Power mode engaged.

In another part of the program, I have removed the Economy mode shift map. The TCU will use the Normal mode shift map when the Economy Switch is on. You can download the modified firmware from the ROM images page. See the TCU modifying page for instructions on how to replace the TCU ROM.