How did they implement allocate a new cons cell?
Free-Storage List. At any given time only a part of the memory reserved for list structures will actually be in use for storing S-expressions. The remaining registers (in our system the number, initially, is approximately 15,000) are arranged in a single list called the free-storage list. A certain register, FREE, in the program contains the location of the first register in this list. When a word is required to form some additional list structure, the first word on the free-storage list is taken and the number in register FREE is changed to become the location of the second word on the free-storage list. No provision need be made for the user to program the return of registers to the free-storage list
Malloc is a C function and wouldn’t come around for another 15 years or so. They likely wrote memory allocation code directly in machine code/assembly which could and would just access raw memory directly.
Probably assembly/assembler, but I’m not sure.