본문 바로가기

Security/Kernel & OS

[Operation System] 4. OS 만들기 - BootStrap - 3

1. Pre..

이번엔 아스키 아트 + 색깔을 넣어서 출력을 해 봅시다.

  - 플로피디스크에 프로그램을 담아 부팅시켜보자.

 

2. Process

- 아스키 코드로 만든 그림

- 비디오 램에 접근해서 색깔 정하는 법

- 배경색 지정하는 법

 

 

3. Code

[org 0]
 jmp 0x7c0:start ; cs = 0x7c0

start:
 mov ax, cs                 ; segment register 은 직접 복사가 안된다.
 mov ds, ax                 ; cs 와 ds 가 같은 값을 갖게 하기 위한 작업
 mov ax, 0xb800           ; video ram ( color vga area )
 mov es, ax                 ; es <- video ram
 mov si, A1                  ; 그림 넣기
 mov di, 0                    ; di 초기화
 mov bx, 0                   ; bx 초기화

 

loop_1:
 mov al, byte[si]
 cmp al, 15
 je A2
 
 mov byte[es:di], al    ; es = 0xB800 di = 0
 inc di                       ; di = 1
 mov byte[es:di], 3 ; 바탕색 & 배경색 -> 하늘 색         ; 0xB800:0001 -> 하늘색이 들어감
 cmp al, 0              ; 만약 끝나면 forever 로 가셈
 je forever

 inc di
 inc si
 jmp loop_1

A2:
 inc bx               ; bx -> 라인 수
 mov cx, 160       ; 한 행 = 80 * 2
 imul cx, bx
 mov di, cx
 inc si
 jmp loop_1

forever:
 jmp $       ; $ = 현재 주소값

 

A1 db ' _____   ----------   | -------  ----------- ', 15       ; 15 -> 한 행 구분 숫자
   db '     /  |         |   |/         |         | ', 15
   db '    /   |         |   |          |         | ', 15
   db '   /    |---------    |          |         | ', 15
   db '  /     |             |          |         | ', 15
   db ' -----  ------------  |          ----------- ', 0

 times 1020 - ( $ - $$ ) db 0      ; 1022 바이트로 맞추자는 소리
 dw 0xAA55                             ; 부트 코드 식별자

 

 

4. Run

 

ㅋㅋㅋ...