Hi ESP_Angus,
I am not 100% sure that the older bootloader was written in assembly.
It is an assumption because I can only find ".s" type code in folder bootloader support in the build directory so that may be generated code.
For the new bootloader used in ESP-IDF v3.1 I can find the original C code for it under components->bootloader and bootloader support.
The binaries for both bootloader versions are radically different: the old one is +/-14kByte while the new one is +/- 23 kByte.
To the best of my knowledge both the old and the new version are standard versions.
For the new one I am absolutely certain as it is rebuilt every time I do a complete project build and I most certainly never changed a single letter in the original. I used TortoiseGit to get the ESP-IDF and it still shows it to be identical to what was extracted from Github.
I can't be as certain for the old bootloader version as I did not create that binary myself but I would be very surprised if changes were made to it. As far as I know it was simply used "as is".
As to the older version crashing when it reads the customised partition table: that is a fact. The new bootloader can handle it, the older one does not. It is odd though as the customization part of it is just the declaration of a few extra partitions after the ota_1 partition ( see below ).
# Espressif ESP32 Partition Table, total size = 4 GByte
# Name, Type, SubType, Offset, Size
nvs, data, nvs, 0x9000, 0x4000
otadata, data, ota, 0xd000, 0x2000
phy_init, data, phy, 0xf000, 0x1000
factory, 0, 0, 0x10000, 1M
ota_0, 0, ota_0, , 1M
ota_1, 0, ota_1, , 1M
ParameterPart, data, nvs, , 0x10000
EventLogPart, data, nvs, , 0x40000
MstorLogPart, data, nvs, , 0x60000
DataPartition1, data, nvs, , 0x20000
DataPartition2, data, nvs, , 0x20000
If you want to know exactly what version the old bootloader is I can send you a copy of the assembly code I can find in the "bootloader-support" directory.