The 8080 starts running code at location 0 on reset. The natural layout of memory on a computer using that CPU is therefore ROM at the bottom of the memory map and RAM at the top.
CP/M demands the reverse; it insists that ROM shall be at the top. The rationale is that this allows RAM to be used 'up until when it bumps into the ROM, wherever that happens to be' i.e. the entire address space can be filled with usable RAM right up until it bumps into the ROM that is actually installed in the machine, instead of having to set aside the first X kilobytes for ROM even if not all was actually used. This requires a small amount of extra circuitry to redirect the CPU from bottom to top of the address space on reset.
CP/M originated on the Altair 8800, an 8080-based machine.
But the Altair was a streamlined, indeed downright bare-bones machine, designed to minimize cost to be affordable to hobbyists in 1975. I would not have expected it to start off with the extra circuitry to redirect the CPU on reset.
When and how did the Altair acquire that extra circuitry necessary to accommodate CP/M?
ld e,(hl) / inc hl / ld a,(hl) / add a,c / ld d,a / inc hl / ld a,(de) / add a,c / ld (de),a / jp nc,lp
[the first address patched should be the jp instruction, and the last should be a dummy FF byte]