Assembly of P59 OS603 Trans MPH Tables

They go by many names, P01, P59, VPW, '0411 etc. Also covering E38 and newer here.
Post Reply
RADustin
Posts: 162
Joined: Fri Oct 17, 2014 9:44 am

Assembly of P59 OS603 Trans MPH Tables

Post by RADustin »

I'm looking for some guidance on getting the Trans MPH tables disassembled. I have the 603 OS bin loaded in Ghidra and much of the assembly and logic flow is there. All the symbols are loaded and I've named and commented many variables through the PIDs and such.

One thing that is completely stumping me is the part throttle MPH tables for the trans shifting. Obviously I see the table in the bin, but there are no references to it.

For example, using the part throttle MPH upshift table for performance mode located at 1A4DE. It's just sitting there with no references, so clearly Ghrida hasn't run correctly.
P59 68K instrut snip2.png
P59 68K instrut snip2.png (19.16 KiB) Viewed 1228 times
I believe a pointer is located at 2FD8. But I don't really know how to prove this, nor do I know how to take things further and understand if the 2FD8 pointer is located within another table that would have references to it??? I'm completely stuck.
P59 68K instrut snip3.png
P59 68K instrut snip3.png (32.99 KiB) Viewed 1228 times
My goal is to map how the shift pattern modes are set(I've done this, how performance is selected, or normal, or perf kickdown, normal kickdown..ect) and how they select from the proper MPH table. I'd like to eventually write in some simple code to use trans temp to select different part throttle shift tables- eventually setting it up to shift sooner when the trans is cold....to give my big converter daily some nicer street manors when cold. In the mean time this is a great learning experience.

Just wondering if someone can walk me through the logic references with these tables? I'd also like to know how to determine the table axis data. From tuning I know it's TPS, but I'd like to trace that reference like I didn't know it already. I've mapped several of the different TPS parameters but also like I found with mapping the shift pattern modes I never run into a TBLU instruction to lookup the MPH from this table. I've mapped the upshift required flags as well but still don't see a TBLU at the end. So I'm clearing missing some links to tie it all together.

Appreciate any bits of help I can get, big or small. It all adds up!

Thanks All!
kur4o
Posts: 950
Joined: Sun Apr 10, 2016 9:20 pm

Re: Assembly of P59 OS603 Trans MPH Tables

Post by kur4o »

trans tables use an indexed look up. Even on some there is double lookup. Code loads the indexed address than adds some bytes to it, depending what needs to be loaded. Usually all tables order follow some logic from the index. Double indexed is code loads index1 than adds some bytes to it->where index 2 is located-> than adds even more bytes to get the final address for that specific table.


Usually code have all kind of variables based on raw values stored for tablelookup. You need to find all tps scalars that are derived, so pcm can use correct scaling for table lookup.
RADustin
Posts: 162
Joined: Fri Oct 17, 2014 9:44 am

Re: Assembly of P59 OS603 Trans MPH Tables

Post by RADustin »

kur4o wrote:trans tables use an indexed look up. Even on some there is double lookup. Code loads the indexed address than adds some bytes to it, depending what needs to be loaded. Usually all tables order follow some logic from the index. Double indexed is code loads index1 than adds some bytes to it->where index 2 is located-> than adds even more bytes to get the final address for that specific table.


Usually code have all kind of variables based on raw values stored for tablelookup. You need to find all tps scalars that are derived, so pcm can use correct scaling for table lookup.
do you have any links or other read where I can learn more about the index lookup and how I can spot it/find it within assembly when ghrida doesn't?

I'm not sure worried about the TPS logic as I'm not looking to do anything with that. I merely just want to select the performance or cruise shift tables instead of normal tables based on fluid temperature. I need to figure out how the shift tables work so I'm sure I'm modifying the 'shift pattern' variable at the correct spot so that I don't causes unintended consequences. It seems like a simple project to get me started in actually modify the code flow....but I need to learn how to map the logic of these index/offset tables.
exo3901
Posts: 13
Joined: Fri Feb 11, 2022 2:00 am

Re: Assembly of P59 OS603 Trans MPH Tables

Post by exo3901 »

I am not sure how it switches between performance or normal modes but the shift lookup uses, I believe, some form of the current gear pid. You may be able to find a reference to shift tables by searching for the addresses of tables. Ghidra does not seem to create a reference to them automatically in all cases. But the functions will look similar when they are looking up a shift table. It should pull a memory value(current gear) to Dx and use the value as an offset to lookup either an address which returns the shift table address or just straight to the shift table. If you know the right memory values for current gear you should be able to manually change them and watch the function reference jump around the shift tables/shift table addresses.

I am trying to understand the same basics as well, but it is very confusing. I can try to find an example of what I am trying to describe.
Post Reply