First.S
LKSAS
- BIOS가 MBR을 읽어서 0x7c00에 저장하고 제어를 0x7c00으로 옮긴다.
- 현재 CS는 0x7c00이고 DS, ES, SS 역시 0x7c00으로 지정한다.
- 스택 포인터를 0x7c00 + 2048로 지정한다.
- 화면에 'L'을 출력한다.
- External parameter 여부를 검사한다. (이것이 어떻게 사용되는지는 알아내지 못함)
- MBR에 있던 boot sector가 로딩된 메모리의 바로 뒷 부분의 오프셋을 bx 레지스터에 저장한다. 이 영역은 앞으로 디스크에서 LILO을 읽어들일때 사용할 버퍼로 사용된다.
- 하드디스크 개수를 확인한다.
- 하드디스크에서 MBR을 읽어와서 LILO volume S/N를 체크해서 자기 자신이 맞는지 확인한다. 이 과정은 LILO를 찾을때까지 루프를 돌면서 모든 디스크를 확인한다.
- LILO 인스톨 당시 지정된 second.s의 disk absolute offset를 확인한다. second.s는 리눅스의 /boot 디렉토리 안에 있기 때문에 시스템 설치 당시 파티션을 어떻게 만들었냐에 따라 디스크상의 위치(absolute offset)가 달라진다.
- 0x8800으로 second.s의 앞 부분을 로드해서 LILO 매직스트링이 있는지 확인한다.
- 나머지 second.s를 loop를 돌면서 모두 로드한다.
- 0x7c00에 로드된 first.s와 0x8800에 로드된 second.s의 signature(LILO 문자열)을 비교한다.
- 화면에 'I'를 출력한다.
- far return을 사용해서 0x8800으로 점프해서 제어를 second.s로 옮긴다.
