Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 운영체제 문제 풀이
- OS 제작
- 운영체제 만들기
- 건담
- OS 구조와 원리
- 운영체제 제작
- 30일
- 쉽게 배우는 운영체제 연습문제
- Project Euler Problem
- 운영체제
- 쉽게 배우는 운영체제
- 건담 프라모델
- 쉽게 배우는 운영체제 솔루션
- 맛집
- 운영체제 정리
- Gundam
- 건프라
- Project Euler 해답
- 맛집 추천
- rg
- OS강의
- 건담 엑스포
- 쉽게 배우는 운영체제 풀이
- project euler
- OS 그래픽 처리
- OS 강의
- hg
- 프라모델
- os 만들기
- OS
Archives
- Today
- Total
밤색모자이크의 개발이야기
4일차. C언어와 화면 표시 - (2) 사각형 띄우기 본문
안녕하세요. 밤색모자이크입니다.
4일차 2번째인 사각형 출력입니다.
4일차(1)에서 거의 다 해놨기 때문에 소스코드 수정은 bootpack.c만 하면됩니다.
링크는 다음과 같습니다.
http://godrjsmgl.tistory.com/109
개발환경
운영체제 : Windows10
텍스트 편집기 : Atom
PC 에뮬레이터 : QEMU
소스코드
수정된 파일
bootpack.c : 사각형 출력 함수 생성
bootpack.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | void io_hlt(void); void io_cli(void); void io_out8(int port, int data); int io_load_eflags(void); void io_store_eflags(int eflags); void init_palette(void); void set_palette(int start, int end, unsigned char *rgb); void boxfill8(unsigned char *vram, int xsize, unsigned char c, int x0, int y0, int x1, int y1); #define COL8_000000 0 #define COL8_FF0000 1 #define COL8_00FF00 2 #define COL8_FFFF00 3 #define COL8_0000FF 4 #define COL8_FF00FF 5 #define COL8_00FFFF 6 #define COL8_FFFFFF 7 #define COL8_C6C6C6 8 #define COL8_840000 9 #define COL8_008400 10 #define COL8_848400 11 #define COL8_000084 12 #define COL8_840084 13 #define COL8_008484 14 #define COL8_848484 15 void HariMain(void) { /*줄무늬 만들기 코드 주석 처리*/ /* int i; char *p; init_palette(); p = (char *) 0xa0000; for (i = 0; i <= 0xffff; i++) { p[i] = i & 0x0f; } */ char *p; /* p라고 하는 변수는 BYTE [...]용 번지 */ init_palette(); p = (char *) 0xa0000; boxfill8(p, 320, COL8_FF0000, 20, 20, 120, 120); boxfill8(p, 320, COL8_00FF00, 70, 50, 170, 150); boxfill8(p, 320, COL8_0000FF, 120, 80, 220, 180); for (;;) { io_hlt(); } } void init_palette(void) { static unsigned char table_rgb[16 * 3] = { 0x00, 0x00, 0x00, /* 0:흑 */ 0xff, 0x00, 0x00, /* 1:밝은 빨강 */ 0x00, 0xff, 0x00, /* 2:밝은 초록 */ 0xff, 0xff, 0x00, /* 3:밝은 황색 */ 0x00, 0x00, 0xff, /* 4:밝은 파랑 */ 0xff, 0x00, 0xff, /* 5:밝은 보라색 */ 0x00, 0xff, 0xff, /* 6:밝은 물색 */ 0xff, 0xff, 0xff, /* 7:흰색 */ 0xc6, 0xc6, 0xc6, /* 8:밝은 회색 */ 0x84, 0x00, 0x00, /* 9:어두운 빨강 */ 0x00, 0x84, 0x00, /* 10:어두운 초록 */ 0x84, 0x84, 0x00, /* 11:어두운 황색 */ 0x00, 0x00, 0x84, /* 12:어두운 파랑 */ 0x84, 0x00, 0x84, /* 13:어두운 보라색 */ 0x00, 0x84, 0x84, /* 14:어두운 물색 */ 0x84, 0x84, 0x84 /* 15:어두운 회색 */ }; set_palette(0, 15, table_rgb); return; } void set_palette(int start, int end, unsigned char *rgb) { int i, eflags; eflags = io_load_eflags(); /* 인터럽트 허가 플래그의 값을 기록한다 */ io_cli(); /* 허가 플래그를 0으로 하여 인터럽트를 금지로 한다 */ io_out8(0x03c8, start); for (i = start; i <= end; i++) { io_out8(0x03c9, rgb[0] / 4); io_out8(0x03c9, rgb[1] / 4); io_out8(0x03c9, rgb[2] / 4); rgb += 3; } io_store_eflags(eflags); /* 인터럽트 허가 플래그를 원래대로 되돌린다 */ return; } void boxfill8(unsigned char *vram, int xsize, unsigned char c, int x0, int y0, int x1, int y1) { int x, y; for (y = y0; y <= y1; y++) { for (x = x0; x <= x1; x++) vram[y * xsize + x] = c; } return; } |
컬러 색상을 편하게 지정하기 위해서 define했습니다.
그리고 99라인에 boxfill8라는 함수를 만들었고 이 함수는 사각형을 만들어주는 함수입니다.
실행
make를 돌리기 전 파일 목록입니다.
make run을 해주세요.
make 후 파일 목록입니다.
결과
이제 사각형이 되었습니다.
참고 자료
OS 구조와 원리, 카와이 히데미 저, 한빛미디어 출판
링크 : http://www.hanbit.co.kr/store/books/look.php?p_code=B9833754652
기존 글 바로가기 링크
링크 : http://godrjsmgl.tistory.com/66
'Embedded > OS제작 with OS구조와원리' 카테고리의 다른 글
5일차. 문자 표시와 마우스를 위한 GDT/IDT 초기화 (0) | 2017.07.10 |
---|---|
4일차. C언어와 화면 표시 - (3) OS 화면 구성 (0) | 2017.07.09 |
4일차. C언어와 화면 표시 - (1) 줄무늬 화면띄우기 (0) | 2017.07.09 |
3일차. 32비트 모드와 C언어 도입 (0) | 2017.07.07 |
2일차. 부트섹터 분리와 Make 파일 생성 (3) | 2017.06.27 |
Comments