I've been looking into it as I'm designing cartridges to fool around with, Tech Reference (Appendix A) has the full BIOS listing which is the primary source of truth. It's commented really well, though with 8088 ASM being a bit of a bear (in my opinion

) it can be tough.
Cartridge headers differing: Are you looking at raw dumps of cartridges or .jrc files? If .jrc, be aware that they have an extra header of 512 bytes inserted as part of the dumping process that isn't on the real cartridges. That header needs to be stripped/skipped if you're trying to look at the data in a disassembler and have the addresses line up (or you're trying to burn the image to a custom cartridge). The raw cartridge data should follow one of the 3 formats specified in (2-107 thru 2-113) depending on what type of cartridge it is (IPL, DOS add-in commands, or BASIC programs). Cartridges can also replace either or both of the System ROMs (in which case all bets are off since they can override the BIOS routines that check for the header in the first place), or there might be some weirdo cartridges out there that get used by a DOS executable, another cartridge, or hardware add-in card in some proprietary way. From what I can tell, the field of cartridges is pretty barren.
To add onto Brutman's comments:
A-109: FFFF0h appears to be the first instruction executed by the 8088, which in our case is a JMP OFFSET RESET (relative to the beginning of the cartridge)
A-7: F0043h, RESET label - where the BIOS starts doing its tests and initializations of the built-in hardware
A-20: F07E0h, where the BIOS starts looking for optional ROMs every 2K from C0000h-EFFFFh (C0000h-CFFFFh [most likely sidecars] with a CRC, D0000h-EFFFFh cartridges with a Checksum). If it finds one with the signature and valid crc/checksum, it executes the exposed instruction or return statement (header bytes 3-5). An IPL cartridge is expected to have that instruction as a jump to its INIT function, where it's expected to configure the int 18h vector to point to the cartridge MAIN/Entry routine and then just return to the BIOS, but a few of the simpler cartridges just take control and never look back.
A-26 - F0B1Bh, Bootstrap - BIOS checks to see if the diskette drive contains a bootable floppy, if not it calls int 18h (int 18h by default points to Cassette BASIC[built into the sysplane], otherwise if something like a cartridge game overrode it, it transfers control to the cartridge MAIN/Entry routine
A-73: FEB51h, ROM_CHECK checks the ROM for validity (calls CRC_CHECK or ROS_CHECK depending on if the current block is in the option rom space or cartridge rom space)
A-106: FFE71h, CRC_CHECK - the Checksum algorithm it's using for the cartridge space
If you are planning to put your own software own cartridges or romhack existing ones, the first hurdle to be aware of is getting the header and checksum right. If the BIOS doesn't see the signature it wants or the length/checksum doesn't line up, it won't like the cartridge. So far I've only played with writing IPL cartridges. Do be aware that it looks like IBM only expected to use the Cartridge slot for simple, static ROM cartridges. It is possible to do sneakier things (there's a cartridge slot SD Card reader that can be a bootable harddisk which is great), but there isn't a straightforward way to design it (compared to a GameBoy or Super Nintendo that were intentionally designed to have save-ram or co-processors in cartridges). Basically you just have the address lines/chip-selects (CPU -> Cartridge) and data lines (Cartridge -> CPU), which it only connects when the CPU attempts to read (it bus-isolates any write attempts from what I can tell).
Note 1: Technical Reference Appendix pages are references as A-7 style
Note 2: I'm using the absolute addresses (20 bits), but it's probably more common to see them in segment:offset format. An absolute address of F0043h would generally be referred to as F000:0043 (though if you're not familiar with the 8088's segmented addressing, know that there are a large number of ways to alias the same absolute address through different segment+offset pairs).
Note 3: It's a bit painful flipping through the tiny Tech Ref pages back and forth to follow the boot sequence. Someone did a decent job at disassembling the BIOS and putting it on GitHub (
https://github.com/ricardoquesada/bios- ... r-bios.lst). It's not perfect but it is searchable. I think the Tech Ref on archive.org is also searchable but it's hit or miss.