Suspect RCM3209 build issues between windows 7 / 32-bit and windows 10 / 64-bit

I have old object files built in 2011 and 2013 with DC 9.62 for the RCM3209 that work fine. I suspect they were built using a 32-bit windows 7 machine that is no longer available, nor was it backed up.

The new machine, 64-bit windows 10, also using DC 9.62 and the old source files saved from 2011 and 2013 does not re-create identical object .BIN files that compare byte for byte with the old object files. The new files are larger, and structured differently (as far as the positioning of the readable information inside them goes, that is).

Also, and worse, the new code built today does not run correctly, it stops transmitting and responding to network traffic after one TCP exchange.

I did notice that building on a 32-bit windows 10 machine produces a very similar BIN file. But still not identical to the old original BINs. AND, they still fail in exactly the same way as above.

What could possibly be so different between building these BINs, from the same source code as the saved object files were built, with the same DC 9.62, but just a different OS?

Thanks all.

This sounds like you have a patch on DC 9.62 maybe in your new build that wasn’t in the older one. Have you verified that the actual build of the older .bin was indeed DC 9.62 and not a previous version? Where is the code failing, have you tried debugging it with the new code?

Compare the contents of the “Lib” directory between the two installations to see if there are differences.

Compare the “default.dcp” project file or ensure you’re using the same project file between the two installations.

Make sure you have selected the correct module in the “Targetless configuration” of the Project Options.

When comparing binaries, use a tool designed for binary file comparison (like Beyond Compare). Builds will have different build timestamps, and may have the build date/time embedded in the binary as strings.

And as a followup to this, there’s a section of the .BIN file where Dynamic C 9 embeds the following data which will change from compile to compile:

  • 32-bit lines of code compiled
  • 32-bit millisecond timestamps of the start and stop compilation time
  • 20 bytes of 0x00
  • 16-bit CRC of the firmware (with the CRC and timestamp bytes included as 0x00)
  • 32-bit timestamp of seconds since 1/1/1980

That information goes with the “struct progStruct” between the compiled BIOS (described in Bios/Rabbitbios.{map,lst}) and your program (described in a map and lst file in the same directory as the program).

Dynamic C 10 removed those fields/records to allow for reproducible binary images.