An hardware abstraction layer is a layer between the physical hardware of a computer and the software that runs on that computer. The function is to hide differences in hardware and therefore provide a consistent platform to run applications on.
The best example of an HAL can be found in the AS/400 architecture. The implementation of the LIC or Lincensed Internal Code, was so succesfull that software written on the predecessor, the S/38, runs without modifications on an AS/400. The underlying hardware has changed dramatically, at least 3 different types of processors have been in use.