현황
- 검은 화면이 뜨도록 만듬
- 뭔가 띄우려면 VRAM 비디오 램에 올바른 값을 써야함
문제
- c언어에서는 VRAM 등 직접 메모리 지정해서 쓰는 명령 없음 => 함수 작성
* 사실 포인터를 이용해서 쓸수 있기하나 넘어가자
메모리에 쓰기 함수 추가하기
- naskfunc.nas에 write_mem8함수 추가(8비트 값을 쓰기)
- 사용법 : write_mem8(0x1234, 0x56)
=> 의미 : MOVE BYTE[0x1234], 0x56 -> 0x1234 번지에 바이트 크기(8비트)로 0x56이란 값을 쓴다.
- 사용 과정 : c언어에서 write_mem8() 함수 호출 -> naskfunc.nas의 _write_mem로 점프
- 아래의 코드에서 +4를 하는 이유 32비트 모드(4 x 8비트)이므로 한칸씩 이동하기 위함
INSTRSET
- 이 프로그램이 486용임을 nask에 알려줌.
=> nask는 EAX(32비트 레지스터)라는 단어를 만나면 레지스터로 해석함
=> 이걸 안해주면 8086 CPU 명령어로 생각해서 레이블 중 하나로 인식
인텔 CPU 아키텍처 흐름
- 8086 -> 80186 -> 286 -> 386 -> 486 -> Pentium -> PentiumPro -> Pentium2 -> Pentium3 -> Pentium4 ...
- 286까지 16비트 CPU, 386부터 32비트 CPU
bootpack.c 부트 프로그램 패키지 수정
- 변수 초기화 해주고
- VRAM에 값을 저어주는 명령을 써보자
=> 아래의 코드에선 0xa0000 ~ 0xaffff 번지에 15라는 값을 입력해줌
실행 결과
줄무늬 쓰기
- write_mem8(i, i & 0x0f);로 수정
- i와 0x0f를 and연산한 결과를 반환
- 정리
0x0f = 0x0000 000f
i = 0x000a 0000
i = 0x000a f f f f
=> i의 최하위 비트 LSB(Least Significant bit) 가 f인 경우
i번지에 0x0000 000f 쓰기
=> 이외의 경우
i번지에 0x0000 0000 쓰기
- 결론 : 0x0000 0000 을 쓰다가 일정 구간이 지나서 0x0000 000f쓰기를 반복한다.
줄무늬 쓰기 실행결과
'컴퓨터과학 > 컴퓨터, OS' 카테고리의 다른 글
os만들기 - 21. 사각형 그리고 완성시키자 (0) | 2020.08.02 |
---|---|
os만들기 - 20. 포인터 다루기 + 색 번호 설정 (0) | 2020.08.02 |
os만들기를 하는중에 (0) | 2020.08.02 |
os만들기 - 18. 32비트 모드 준비와 c언어 (0) | 2020.08.02 |
os만들기 - 17. 본체 동작시키기 (0) | 2020.08.02 |