정녕~ 이럴수가.. 회사에서 printf 를 만들라는 과제를 받아 만들었습니다.

이사님께 튜트리얼 을 좀 배우고 나서 만들어 본 것인데...

정녕 이걸 네이버에 주소값을 검색해보니.. 개털~ 안나오더군요 google 엔 양키들이 한것이 조금 있더군요


한국 사람들이 얼마나 쪼잔한지 알것 같습니다 .ㅋㅋㅋㅋ

하지만 전 과감하게 올립니다!!

구글에 검색했을때 0xB0008000 을 하니 나왔습니다! 바로 검색어가 0xB0008000 이었는데..

ㅡ,ㅡ.. 문제는 VC 에서는 안됩니다.. 그레서 볼랜드 C 에서 햇습니다.

컴파일 옵션에서 메모리 할당을 large 로 바꿔야 돌아갑니다..


자 BC 로 옵션을 마추어 놓고~ 시작을 합니다. 그전에 알아야 할 것들이 0xB0008000 은 바로 텍스트 모드의 메모리 의 첫 주소 입니다.

0xB0008000 은 콘솔창( VC 로 콘솔 모드로 만들면 뜨는 cmd 창 ) 의 잴 왼쪽 위 구석탱이를 가르킵니다. 그 다음은 2바이트씩

0xB0008002 는 2번째를 가르키겠죠. 그곳에 아스키 코드를 넣어주면 출력이 됩니다. 간단하죠?

하지만 왜 2바이트 단위냐~ 바로 첫번째는 글씨( 0xB0008000 ) 이고 두번째는 ( 0xB0008001 ) 은 색입니다.

XRGB 로 4비트로 구성이 되어 있습니다.

X 는밝기

R 빨간

G 초록

B 파란


이런 식 입니다.

그렇다면 맨 왼쪽위에 A 를 출력하고 싶다! 그렇다면


char * p = (char*)0xB0008000;

*p = 0x41;

*(p+1) = 0x04;


자 빨간색 A 가 나옵니다 . 왜 0x04 가 빨간색이냐!?


X R G B

0 0 0 0

검은색입니다.

X R G B

0 1  0 0

빨간색입니다.

비트를 계산하는 방식이

‥‥ 32 16 8 4 2 1

이죠.. 이걸 매치시킨다면!?


X R G B

8 4 2 1

이가 되겠죠. 그렇다면 빨간색은 4, 그럼 파란색은 1, 초록은 2, 하얀색은 모두더한 F 가 되겟죠..참고로 C 언어는 16진수로 인식을 합니다~ 주의하셔야 합니다.


자 그렇다면 가로가 80입니다. 세로는 24이지요. 그럼 다음번째 줄에 A 를 쓰려면

*p+80 을 하면 됩니다. 그럼 다음번째 줄이 되겟죠..

자 아주 간단하지요?

회사 강의 란에 printx 와 putchx 가 있을것 입니다. 제가 만들었죠 훗..


아레는 BC 의 옵션 설정 방법 입니다.

 

사용자 삽입 이미지

사용자 삽입 이미지

그리고 요번엔 예제 실행 파일 입니다.

사용자 삽입 이미지
사용자 삽입 이미지


소스 파일은


#include <conio.h>
 //4 2 1
enum Color{
 C_RED = 0x04,
 C_GREEN = 0x02,
 C_BLUE = 0x01,
 C_BLACK = 0x00,
 C_WHITE = 0x0F,
 C_GRAY = 0x07
 };

void putchxy( int x, int y, char Text, Color eText )
{
 char * pAddr = (char *)0xB0008000;
 pAddr = pAddr + ( ( y * 160 ) + x * 2 );
 *pAddr = Text;
 *(pAddr+1) = eText;
}

void printxy( int x, int y, char * pText, Color eText )
{
 int iOffset = 0;
 while( *pText != 0 )

 {
  putchxy( x + iOffset, y, *pText, eText );
  ++iOffset;
  ++pText;
 }
}

int main()
{
 printxy( 10, 10, "출력하는 예제입니다.", C_RED );
 printxy( 10, 11, "미희야 사랑해", C_WHITE );
 getch();
 return 0;
}


출처 : http://blog.naver.com/312160/150023748818

'C/C++언어' 카테고리의 다른 글

템플릿 사용한 max 만들기  (0) 2008.03.03
<이클립스 디버그 방법>  (0) 2008.01.28
printf 문을 만들어보자  (0) 2008.01.28
여러 C++ 컴파일러  (0) 2007.09.06
함수포인터란 ?  (0) 2007.09.06
[본문스크랩] 파일 입.출력  (0) 2007.09.06

+ Recent posts