Jump to content
Ultimate Subaru Message Board
presslab

4EAT Paddle shifters

Recommended Posts

This is about my paddle shifter project on my GL-10 with the 4EAT automatic. I used a 1990 Legacy TCU because it was easier to modify the code, it uses a much faster 68HC11 processor vs the stock GL-10 TCU which is an old Hitachi type.

 

The first thing was to graft the Legacy TCU onto the GL-10 harness. It's quite straightforward - I basically matched up the wires using the wiring diagrams. There are a few differences, like the "1 hold" switch, but these things aren't needed once the paddle shift is in place. The Legacy also uses a atmospheric sensor input which I left disconnected. The tach input to the Legacy TCU is 0-5V where as the GL-10 TCU is right off the coil. I initially hooked it straight up and it worked, however I wasn't really happy with it so I used a zener diode and a resistor to clip the signal.

 

 

Apparantly the Legacy 4EAT has a stronger high clutch, as initially the 2-3 shift was pretty slow. The transfer clutch has changed as well. To resolve the 2-3 shift problem, I modified the maps in the TCU ROM to make the 2-3 shift faster. This solved that problem.

 

Initially I modified the maps for the transfer clutch; this made the AWD work again, but it wasn't so great. Sure, it worked as well as it did with the GL-10 TCU but there was a lot of room for improvement. There was a delay in engagement, and it sometimes spun the front tires on takeoff. I decided to upgrade the Duty C solenoid/valve body in my 4EAT to a Legacy unit, along with the orifice plate right behind the Duty C valve body. There were obvious differences in these parts, it seems like it is designed to flow much more fluid volume to the transfer clutch unit. I also replaced the friction discs while I was in there. It's a tad grabby now, but it works much better; I'm back to using the original Legacy TCU transfer clutch maps in place. I'm sure the clutch plates just need to break in a bit, as the cluch was pretty tight when I put it back together.

 

 

The TCU was modified by soldering a socket onto the circuit board. I was going to use a different Legacy TCU but it had no holes to solder the socket! I'm not sure what year that TCU was. After the socket is in place, there is a 0-ohm resistor on the bottom of the board that needs to be moved to enable the new socket. The ROM chip I am using is a SST27SF512; this EEPROM is easily reprogrammed without a UV eraser.

 

The paddles are just bent metal rods that I tack welded to some switches. They work pretty good. I made a small metal frame that attached to the steering column; the switches screw down into that. The paddles use the "manual" and "power" button inputs to the TCU. The paddle code will protect against overrev on downshift, upshift at redline, and downshift to 1st when stopped.

 

My most recent modification is a DCCD knob. It's a six position rotary switch with FWD, 75%, 100%, 150%, 200%, 4WD settings. It still allows the TCU to calculate the transfer clutch value but it then it modifies it depending on the knob setting; 100% would be stock, 200% would be twice as aggressive as stock, etc. The DCCD knob switch has some 1N4001 diodes wired in series between each pole. The FWD switch pole is attached to ground and the common is attached to the atmospheric sensor input. FWD=0V, 75%=0.5V, 100%=1V, 150%=1.5V, 200%=2V, 4WD=2.5V. If the switch is disconnected the code defaults to 100%.

post-9154-136027629691_thumb.jpg

post-9154-136027629945_thumb.jpg

Edited by presslab

Share this post


Link to post
Share on other sites

It seems the forum does not allow text file attachements anymore, so here is the code in this post. Unfortunately the formatting is messed up so it's hard to read.

 

  ; Paddle shift TCU mod for '90 Legacy AWD TCU 31711AA911, v705005  ; Ryan Press  ; version 1.1prevPaddleFlags  EQU $D0paddleFlags  EQU $D1paddleGear  EQU $D2ignorePaddleCtr  EQU $D3signedSlipRPM  EQU $D4tempVar   EQU $D6paddleFlagOn  EQU $1paddleFlagUp  EQU $2paddleFlagDown  EQU $4paddleFlagStopped EQU $8vehicleSpeed  EQU $14inShaftRPM  EQU $19engineRPM  EQU $32currentGear  EQU $45shiftFlags1  EQU $4FgearParm  EQU $BCpowerMode  EQU $51paddleUpPort  EQU $08paddleDownPort  EQU $07paddleUpBit  EQU $40paddleDownBit  EQU $40redlineTable  EQU $CDFFLookupShift  EQU $D99CCalcVSS1  EQU $D6EDCalcSol3  EQU $DF46CalcPowerMode  EQU $DA84IGNORECT  EQU 8      ; Number of cycles to ignore input from paddlesSTOPPEDKPH  EQU 3      ; Vehicle speed <= STOPPEDKPH then we are stopped org $F000 ldaa gearParm staa paddleGear ldaa paddleFlags anda #(~(paddleFlagUp | paddleFlagDown) & $FF)  ; Clear paddle flags staa paddleFlags ldaa paddleUpPort bita #paddleUpBit bne GetDownPaddle bset paddleFlags, paddleFlagUpGetDownPaddle ldaa paddleDownPort bita #paddleDownBit bne CheckOnOff bset paddleFlags, paddleFlagDownCheckOnOff brclr prevPaddleFlags, paddleFlagUp, CheckOnOff1  ; Check if both paddles pressed, but not previously brclr prevPaddleFlags, paddleFlagDown, CheckOnOff1 bra CheckPaddlesCheckOnOff1 brclr paddleFlags, paddleFlagUp, CheckPaddles brclr paddleFlags, paddleFlagDown, CheckPaddles ldaa #IGNORECT      ; Reset paddle ignore staa ignorePaddleCtr        brset paddleFlags, paddleFlagOn, CheckOnOff2        bset paddleFlags, paddleFlagOn    ; Paddle mode off, so turn it on jmp ExitCheckOnOff2 bclr paddleFlags, paddleFlagOn    ; Paddle mode on, so turn it off jmp Exit CheckPaddles tst ignorePaddleCtr beq CheckPaddles1 dec ignorePaddleCtr jmp ExitCheckPaddles1        brset paddleFlags, paddleFlagOn, CheckRedline   ; Exit if not paddle shift mode jmp ExitCheckRedline ldx #redlineTable      ; Get redline rpm from table ldb paddleGear abx ldd engineRPM lsld lsld tab ldaa 0,x sba        ; compare engineRPM to redline bcc NotRedline inc paddleGear      ; Redlined, shift up ldaa #IGNORECT      ; Reset paddle ignore staa ignorePaddleCtr bra ExitNotRedline ldaa vehicleSpeed cmpa STOPPEDKPH      ; If we just stopped, set gear to 0 bhi NotStopped brset paddleFlags, paddleFlagStopped, CheckUpPaddle bset paddleFlags, paddleFlagStopped clra staa paddleGear bra ExitNotStopped bclr paddleFlags, paddleFlagStoppedCheckUpPaddle brset prevPaddleFlags, paddleFlagUp, CheckDownPaddle  ; Check if up paddle pressed, but not previously brclr paddleFlags, paddleFlagUp, CheckDownPaddle ldaa #IGNORECT      ; Reset paddle ignore staa ignorePaddleCtr ldaa    paddleGear      ; Increment gear but only if gear < 3 cmpa    #3 bhs     Exit inc paddleGear bra ExitCheckDownPaddle brset prevPaddleFlags, paddleFlagDown, Exit   ; Check if down paddle pressed, but not previously brclr paddleFlags, paddleFlagDown, Exit  ldaa #IGNORECT      ; Reset paddle ignore staa ignorePaddleCtr tst paddleGear      ; Decrement gear but only if gear not zero beq     Exit dec paddleGear  ; Downshift overrev protection  ; Check for over-rev, multiply RPM by ratio difference  ; newRatio / curRatio * inShaftRPM + (engineRPM - inShaftRPM)  ; use CalcVSS1 instead which calculates inShaftRPM with VSS and currentGear ldd engineRPM      ; Calculate TC slip subd inShaftRPM std signedSlipRPM ldaa currentGear      ; Save currentGear staa tempVar ldaa paddleGear staa currentGear jsr CalcVSS1      ; Use CalcVSS1 function to get inShaftRPM ldaa tempVar staa currentGear      ; Restore currentGear ldd inShaftRPM addd signedSlipRPM lsld lsld sta tempVar jsr CalcVSS1      ; Put VSS1 variables back to normal ldx #redlineTable      ; Get redline rpm from table ldab paddleGear abx ldaa 0,x ldab tempVar sba bcc Exit inc paddleGear      ; Would be over redline, so put it backExit ldaa paddleFlags staa prevPaddleFlags ldaa paddleGear staa gearParm        brset paddleFlags, paddleFlagOn, Return   ; Exit if not paddle shift mode jmp LookupShift      ; Execute automatic shift lookupReturn rts  org $F600        brset paddleFlags, paddleFlagOn, SetSS3   ; If in paddle shift mode, set solenoid 3 jmp CalcSol3      ; Execute automatic shift solenoid 3 calcSetSS3 bclr shiftFlags1, $10     ; Set shift solenoid 3 off for engine braking rts org $F650        brset paddleFlags, paddleFlagOn, SetPwr   ; If in paddle shift mode, set power mode jmp CalcPowerModeSetPwr ldaa #1 staa powerMode rts

 

  ; Driver controlled center diff mod for '90 Legacy AWD TCU 31711AA911 v705005  ; Ryan Press  ; version 1.0dccdInput  EQU $11      ; Previously used as atmospheric pressure inputCalcSolCDuty  EQU $E062CalcSolCReturn  EQU $E23CsolCtargetDuty  EQU $72solPeriod  EQU $C005 org $F800 jsr CalcSolCDuty  ldx #dccdMap ldaa dccdInputmapLoop: cmpa 0,x bls mapLoopEnd inx inx bra mapLoopmapLoopEnd: ldd solPeriod ; $4E20 = 100% subd solCtargetDuty ; solC = period - ((period - solCduty) * dccdMap / 64) ldab 1,x   cmpb #$FF  ; if dccdMap is $FF then just lock it up beq fourwd mul lsld bcs fourwd lsld bcs fourwd jmp CalcSolCReturn fourwd: ldd solPeriod ; Set duty to max (4WD) jmp CalcSolCReturn dccdMap: fcb $B, $0  ; FWD fcb $21, $30 ; 75% fcb $37, $40 ; 100% (no change) fcb $4D, $60 ; 150% fcb $61, $80 ; 200% fcb $75, $FF ; 4WD fcb $FF, $40 ; DCCD input disconnected (no change)

Share this post


Link to post
Share on other sites

Ho-Ly Crap :eek:

 

 

I'm officially beyond impressed. I would absolutely LOVE to do this on my XT6. but I definitely wouldn't have a clue on where to start in the reprogramming of the TCU.

 

could it be set up to have a switch/button for a full-auto mode?

Edited by Numbchux

Share this post


Link to post
Share on other sites

This is awesome!

 

I'd like to know more about modifying the TCU as i will be putting an early legacy 4sp auto in my 83 leone sedan in the near future.

 

Is it possible to modify the shift points and the aggressiveness of the gear changes? I really wanna learn more.

 

How exactly did you hack it?

Share this post


Link to post
Share on other sites
Ho-Ly Crap :eek:

 

 

I'm officially beyond impressed. I would absolutely LOVE to do this on my XT6. but I definitely wouldn't have a clue on where to start in the reprogramming of the TCU.

 

could it be set up to have a switch/button for a full-auto mode?

 

Thanks. :)

 

If you get serious about this, I could email you my ROM file, although you'd need an EEPROM burner. You'd need up upgrade your transfer clutch if it's the same as mine was.

 

Yes, it's currently set up to enable/disable paddle mode by pulling both paddles at once. Once out of paddle mode it works automatic just like before.

Share this post


Link to post
Share on other sites
This is awesome!

 

I'd like to know more about modifying the TCU as i will be putting an early legacy 4sp auto in my 83 leone sedan in the near future.

 

Is it possible to modify the shift points and the aggressiveness of the gear changes? I really wanna learn more.

 

How exactly did you hack it?

 

Yes, it's possible to modify the shift points, torque converter lockup, line pressure, transfer clutch, etc. Phil over at www.alcyone.org.uk has been doing some work with SVX TCUs, which are similar to the Legacy ones. I used his tcuscan software to interface to the select monitor port on the Legacy TCU. The tcuscan software had all the wrong memory locations though, so I had to figure this out; while the Legacy and the SVX TCUs use the same type microprocessor, the circuit board and the ROM are similar but not the same.

 

To hack it I downloaded the ROM through the select monitor interface. I then used IDA Pro software to disassemble the ROM to the assembly source code. This is the lengthy part, where I had to figure out what the code meant and what it was doing.

 

Once I figured out where to hook into the code, I made my paddle and dccd assembly code and compiled it. I then used a hex editor to modify the ROM file so that it would execute my code before it executed the original code. I stuck my code in some unused ROM locations.

 

Then, the ROM file was burned into a chip and stuck on the TCU. Okay, it wasn't that simple, more like crash and burn. :lol: But after a while I got it to work and with some more trial and error the paddle and dccd was working just the way I wanted.

Share this post


Link to post
Share on other sites

that is totally awesome. had you ever done this before for a vehicle?

 

i think it should be mentioned that this is an extremely intense project, beyond the means of most folks. i like that you had to do some welding and assembly code to do this, that's great!

 

probably one of the most technical and difficult projects ever posted on here. not many people have the skill or time to put into something that in depth on the software side (particularly here). others have done it, but they're usually unwilling to talk about it.

Edited by grossgary

Share this post


Link to post
Share on other sites
that is totally awesome. had you ever done this before for a vehicle?

 

i think it should be mentioned that this is an extremely intense project, beyond the means of most folks. i like that you had to do some welding and assembly code to do this, that's great!

 

probably one of the most technical and difficult projects ever posted on here. not many people have the skill or time to put into something that in depth on the software side (particularly here). others have done it, but they're usually unwilling to talk about it.

 

Thanks Gary, this is my first time modding any ROM on a car but I'm pretty good at this kind of stuff. I used to do the hardware/software for motion control, servo loops, that kind of stuff.

 

About 6 months back I quit my job because I was about to have knee surgery and I hated who I worked for; that gave me some time to tinker with stuff. I have a job again but just doing computer repair, it pays the bills for now. I'm thinking of moving to Canada soon but this isn't the best time of year. :rolleyes: My citizenship has been approved and I should get my certificate any day now.

Share this post


Link to post
Share on other sites
So if you can do this to a TCU, is it possible to do the same to an EA82T ECU and modify the fuel maps?

 

 

I'm sure it's possible, but I believe it uses a different CPU; I haven't cracked the cover open on my ECU. It's a lot different, like Macintosh vs Windows. (Although those use the same CPU now.) :lol:

Share this post


Link to post
Share on other sites

sweetness, what did you do previously? with those skill sets i can't imagine it would be that hard to get a job....if you're willing to relocate of course.

 

moving to Canada, oh man is that a huge move! what prompted that?

 

the EA82T ECU can be reprogrammed. i mean really ANYTHING can be done if you have the resources. it might cost $32,000 but it can be done. years ago there used to be a company that did modify EA/ER ECU's. i actually talked to them a really long time ago but don't recall anything about them. though it seems they were out of Australia.

 

actually there might even be some info on the subaruxt boards about that. someone was playing with the EA chips not too long ago i believe.

Share this post


Link to post
Share on other sites
Thanks. :)

 

If you get serious about this, I could email you my ROM file, although you'd need an EEPROM burner. You'd need up upgrade your transfer clutch if it's the same as mine was.

 

Yes, it's currently set up to enable/disable paddle mode by pulling both paddles at once. Once out of paddle mode it works automatic just like before.

 

I will probably take you up on that offer eventually. but no way am I delving into anything this serious until the loyale has it's new motor and the 4runner is back on the road (so not until summer sometime, most likely).

 

I think you've hit the nail on the head with what you've done. full auto shifting, as well as full manual (I'm assuming when you're using the paddles, it doesn't downshift on it's own like it does with the stock selecters). and the DCCD knob is genious!!

 

did you make the DCCD knob, or use an STi one?

 

 

replacing/upgrading the transfer clutches will probably happen next summer, regardless. as there's quite a bit of slip right now.

Share this post


Link to post
Share on other sites
sweetness, what did you do previously? with those skill sets i can't imagine it would be that hard to get a job....if you're willing to relocate of course.

 

moving to Canada, oh man is that a huge move! what prompted that?

 

I was an EE for a company that made automated measuring machines. It was a crappy place, I'm much happier now that I'm not there any more. Canada has less people, beautiful scenery, and lots of outdoor stuff to do; perfect for me. I'm done with the "rat race," it's not worth it.

 

I'm checking out Vancouver Island, and I've been up there twice. Lately I've been looking for jobs and there aren't many. Maybe I'll go back to school.

 

 

did you make the DCCD knob, or use an STi one?

 

My DCCD control is this switch; a few dollars from the surplus store:

post-9154-1360276300_thumb.jpg

 

I still need to make a decal with the switch settings. Maybe an Avery label printed on color inkjet would look good. A quick spray of matte clear coat to finish it off.

Share this post


Link to post
Share on other sites

so, I've been thinking about doing this for the last few days, and a problem occurred to me....My XT6 (being a 6-cyl) will have a different rpm signal calibration. so the legacy TCU would not work properly.

 

any chance this would work with an SVX TCU? I know an SVX TCU can control a legacy 4EAT....and I happen to know someone parting out an SVX....so getting my hands on the TCU and plugs would be quite easy.

Share this post


Link to post
Share on other sites
so, I've been thinking about doing this for the last few days, and a problem occurred to me....My XT6 (being a 6-cyl) will have a different rpm signal calibration. so the legacy TCU would not work properly.

 

any chance this would work with an SVX TCU? I know an SVX TCU can control a legacy 4EAT....and I happen to know someone parting out an SVX....so getting my hands on the TCU and plugs would be quite easy.

 

Hmm, yes you are right. I'm sure it's possible to modify the /4 to /6 in a Legacy TCU. OTOH I don't see any reason why a SVX TCU would not work. There are some SVX ROMs on the www.alcyone.org.uk site, so you wouldn't necessarily need to download your TCU ROM through the select monitor.

 

It would be worthwile to investigate the XT6 4EAT vs a SVX 4EAT to see if the number of clutch discs is similar, etc. Differences could be worked out by modifying the maps but it adds more work, of course.

Share this post


Link to post
Share on other sites

boy, I know so little about Autos....I think I'm in over my head :eek:

 

 

will have to do some research. and pull a bunch of parts off that SVX (duty C and stuff....since the TC is shot anyway). maybe this summer the XT6 will get paddle shifters....

Share this post


Link to post
Share on other sites

techncially it may work. In the real world i dont know. Differnt torque curves, stall speeds, power curves. Will be interesting to find out.

 

nipper

Share this post


Link to post
Share on other sites

since a legacy trans can run just fine in an XT6 (takes mechanical work to make it work of course), i don't see any reason it wouldn't "work".

 

the RPM signal as you said should be carefully looked at, but might be a simple work around.

Share this post


Link to post
Share on other sites
since a legacy trans can run just fine in an XT6 (takes mechanical work to make it work of course), i don't see any reason it wouldn't "work".

 

the RPM signal as you said should be carefully looked at, but might be a simple work around.

 

you've seen a legacy 4EAT run with an ER27? Which TCU? I know GLoyale did it in his EA82, but again, 4-cyl rpm signal.

Share this post


Link to post
Share on other sites
you've seen a legacy 4EAT run with an ER27? Which TCU? I know GLoyale did it in his EA82, but again, 4-cyl rpm signal.
i do know someone that did it, though i don't know all the details. i'm fairly certain you can swap the harness and front diff and bolt it right up.

 

i was planning on doing this a year ago along with a front LSD, still have the EJ 4EAT i was going to use, but then i bought a manual trans XT6 so i abandoned the idea.

 

wouldn't surprise me if there's something over at XT forum about this.

Share this post


Link to post
Share on other sites

I know an EA bellhousing can be put an on EJ 4EAT (Gloyale did it). but I'm mostly concerned about the 4-cyl TCU + 6-cyl relationship.

 

I've been hunting around on subaruxt.com and subaru-svx. as well as that alcyones site that presslabs linked to (HO-LY-CRAP!!!!).

 

I think what I'm going to do, is wire EJ TCU plugs (I've got at least 2 sets at my house from harnesses I've stripped). in the XT6 in addition to the existing plugs. This way I can try a few different TCUs and see which matches the shift points of the XT6 best. And, if I find one that works well, then I can start modifying code, plug it in, drive it around the block, and if it doesn't work well, plug the ER27 TCU in there, and drive it to work.

 

 

 

I've been incredibly inspired by this project!! thanks presslabs :banana:

Share this post


Link to post
Share on other sites

that sounds like a great way to attack this chux, good luck!

 

i guess my thinking is that if an XT6 TCU ran an EJ transmission, then opposite should work as well?

Share this post


Link to post
Share on other sites

I think what I'm going to do, is wire EJ TCU plugs (I've got at least 2 sets at my house from harnesses I've stripped). in the XT6 in addition to the existing plugs. This way I can try a few different TCUs and see which matches the shift points of the XT6 best. And, if I find one that works well, then I can start modifying code, plug it in, drive it around the block, and if it doesn't work well, plug the ER27 TCU in there, and drive it to work.

 

The two plugs sound like a great idea! Did you mean EG33 (SVX) TCU plugs?

 

I've been looking into the ROM on how the TCU gets the engine RPM. I'm nearly certain I found it. On the Legacy $C00B = 4. On the SVX $C00B = 6. This number is used to determine how many times the RPM interrupt service routine is called before calculating the engine RPM; essentially a divisor. So it looks like it's as easy as changing one byte in the Legacy ROM.

 

With a 6 cyl engine on the EJ TCU the most noticable thing would be the forced shift at "redline" which would be too low. Also the engine RPM is used for TC lockup and Duty Solenoid A & C calcs.

Edited by presslab

Share this post


Link to post
Share on other sites
The two plugs sound like a great idea! Did you mean EG33 (SVX) TCU plugs?

 

I've been looking into the ROM on how the TCU gets the engine RPM. I'm nearly certain I found it. On the Legacy $C00B = 4. On the SVX $C00B = 6. This number is used to determine how many times the RPM interrupt service routine is called before calculating the engine RPM; essentially a divisor. So it looks like it's as easy as changing one byte in the Legacy ROM.

 

With a 6 cyl engine on the EJ TCU the most noticable thing would be the forced shift at "redline" which would be too low. Also the engine RPM is used for TC lockup and Duty Solenoid A & C calcs.

 

from what I remember (don't have anything in front of me, but have worked on many of both harnesses), the EG33 and EJ TCU plugs are the same. so swapping between those TCUs would be easy. if not, getting my hands on the plugs will be quite easy, so 3 sets of plugs would also be doable :lol:

 

although, if the rpm signal is just the one byte. it might not matter!

 

and yes, I've been reading up on things, since the shift points themselves are determined based on TPS signal, and speed, for the most part, it wouldn't matter. except when you do romp on it a bit, it'll think it's hit redline a third earlier.

 

I also want to dig through some FSMs, and compare gear ratios, otherwise when the TCU compares the speed to what gear it should be in, things will work out. (my buddy had that problem when he put a jdm wrx 4EAT in his impreza LX. it worked fine, except the gear ratios were all off, and then when he put the jdm TCU in there, it was expecting a 7k redline, but the ECU would only allow 6200.)

 

that sounds like a great way to attack this chux, good luck!

 

i guess my thinking is that if an XT6 TCU ran an EJ transmission, then opposite should work as well?

 

yea, it's a plan....I'll try to document things as best I can. might even contribute on the alcyone boards, even though most of that is over my head.

 

Perfect logic, only problem is, that rpm signal. the TCU (as mentioned above) uses rpm for a couple things, and if the TCU is looking for the rpm signal from a 4-cyl, but getting it from a 6, it'll be thrown off. ever seen an EG33 swap hooked up to the stock tach? it'll bury long before it actually hits redline. but again, if that's just one byte that needs to be changed to adjust how it calculates the rpm, than that's easy.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×