[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: BIN differences (including howell730.bin)



On Mon, Jun 19, 2000 at 04:12:10PM -0400, trax wrote:
> Quick question,
> 
> I used a BIN compare utility to illustrate the differences between two GM
> PROM images.  The first image is the one I obtained from my 1990 IROC 350.
> The second image was a standard AUJP1350 replacement chip.  The program
> reported almost 12000 differences.  In TunerCat I saw no differences.  I
> have a data file listing all the differences in these two BINs.  I also have
> the anht_hac.pdf on-hand.  How the heck do I determine where these
> differences are found?  For example, the following lines illustrate some
> differences:
> 
> Address   90FL98    AUJP1350   90FL98    AUJP1350
> -------   ---(d)---  ---(d)---  ---(h)---  ---(h)---
>  03005       101        109         65         6D
>  03039       210        218         D2         DA
>  03056       192        200         C0         C8
>  0306B       192        200         C0         C8
> 
> The differences go on and on and on and on ...


Often times the differences are an added table or piece of code.
This means that after the point of the added piece, it will
appear that nothing matches up.  The trick is to figure out how
much was added and then get everything lined back up.

As an example, last week squash updated howell730.bin.
At first glance, it differs by a TON from AUJP.
However, after converting the .bin's to a straight hex dumps, 
I discovered that around line 532 was were the code was 
added (around byte offset 8508 I believe). 

So, if you want howell730.hex to match up with aujp.hex,
simply search for 20 06 C1 40 23 02 C6 40 in AUJP.
That is extra stuff that isn't in Howell730.  After discovering
this, the number of differences drop dramaticly (like more than a
factor of ten). 

So what does the extra stuff do?  

20 06 = always branch 6 (bytes) ahead [ie, skip the next 3 lines]
C1 40 = compare accumlator (storage location) "B" with hex 0x40
23 02 = branch 2 ahead if compare was less or equal [ie, skip next line]
C6 40 = load accumlator location "B" with hex 0x40

So, it appears that some code ahead of this point will allow 
the program to jump to the C1 40 line.  At this point, if 
accumulator B (just a storage register) contains a value greater
than 0x40, it overwrites whatever is there with 0x40.

In C, most people would code this as:

if (AccumB > 0x40)
   AccumB = 0x40;

I have no idea what AccumB is being used for at this point in 
the code (LC26B in the disassembly).  It's in the tables after
the IAC stuff, commented as desired RPM boost.

If anyone wants the modified AUJP.hex file that allows comparison
to Howell.hex, I'd be happy to send it to you (it's just raw hex
digits - not a disassembly [which IS included in 7730aujp.zip, BTW]).

Have fun,

   Marc

-- 
  Marc Randolph     -    mrand@pobox.com    -     PGP keyID: 0x4C95994D
     If you have any info on the mid-60's car called the Bill Thomas
       Cheetah, or know anyone that might, please contact me.
----------------------------------------------------------------------------
To unsubscribe from gmecm, send "unsubscribe gmecm" (without the quotes)
in the body of a message (not the subject) to majordomo@lists.diy-efi.org