The OLED initalisation code contains a command Charge pump enable (0x8D, 0x14) that isn’t supported by SSD1309 displays and causes the left and right halves of the display to be flipped. This command is replaced by two No OPeration commands (0xE3). Conveniently the command is at the end of a line record in the hex file so it is directly folowed by a checksum byte (0xBD). By replacing the command with two NOPs, the checksum changes to 0x98
I didnt do a thorough comparison. but the main difference between the ssd1306 and ssd1309 is that the ssdd1306 has an internal charge pump and the ssd1309 does not.The charge pump command is what causes the problem.