ipl.nas 파일
ORG 0x7c00
JMP entry
DB 0x90
DB "HELLOIPL"
DW 512
DB 1
DW 1
DB 2
DW 224
DW 2880
DB 0xf0
DW 9
DW 18
DW 2
DD 0
DD 2880
DB 0,0,0x29
DD 0xffffffff
DB "HELLO-OS "
DB "FAT12 "
RESB 18
entry:
MOV AX,0
MOV SS,AX
MOV SP,0x7c00
MOV DS,AX
MOV ES,AX
MOV SI,msg
putloop:
MOV AL,[SI]
ADD SI,1
CMP AL,0
JE fin
MOV AH,0x0e
MOV BX,15
INT 0x10
JMP putloop
fin:
HLT
JMP fin
msg:
DB 0x0a,0x0a
DB "hello, world"
DB 0x0a
DB 0
RESB 0x7dfe-$
DB 0x55,0xaa
hlt 명령어: cpu를 정지시킴. 완전히 정지시키는 건 전원을 꺼야가능하고, 이 명령어는 cpu를 대기 상태로 만듦. hlt 없이 jmp 명령을 실행시키면, cpu의 부하가 100프로가 돼서 전기를 계속 사용하게됨. 아무것도 하지 않으면 hlt 를 하는 습관을 길러두자.
pc에는 bios라는 프로그래밍이 있는데 이것은 pc 기판 상의 rom(readonly memory)이라는 소자에 들어있다. 이 bios는 os 제작자가 자주 사용할 것 같은 프로그램을 pc 제조사가 미리 준비해둔 물건이다. 'basic input output system'의 약어이다. 원래 os 개발자들을 위한 함수의 모임이고, int 명령어는 함수들을 호출하기 위한 명령이다. 덧붙여서 int 뒤으 숫자를 쓰는데 이것을 몇번에 하냐에 따라서 bios의 어느 함수를 호출하느냐임. 메모리에는 우리가 함부로 사용하면 안되는 부분이 있음. 그게 bios가 사용하는 부분이다. 0xf0000번지 부근에는 BIOS 자체가 들어있어서 절대 쓰면 안됨. window 나 linux를 쓸 때는 고려하지 않아도 되지만, 지금은 직접 os를 만들고 있기 때문에 신경써야한다. 0x00007C00 ~ 0x00007DFF 는 부트섹터가 로딩되는 주소이다. 왜 0x7c00이라고 물어보면 초기에 ibm에서 os를 만들때 정한 거임..
makefile 파일; 똑똑한 배치파일임. ipl.bin이 없으면 실행하고 있으면 다음 helloos.img 파일 없으면 다음 실행.. 되는 식으로 배치파일 수를 줄일 수 있게 됨.
앞으로의 개발은 디스크 이미지 전체를 nas로 만드는게 아니라, 일단 512바이트의 부트섹터 부분만 만들고 나머지는 디스크 이미지 관리 툴로 만드는게 편리하다. cpu 자체 메모리가 부족하기 때문에 부팅할때 읽 helloos.nas 파일 내용 중 앞부분 512 바이트만 ipl.nas 부분으로 뺀다.
실습은 makefile 부분만 하면 됨