정녕~ 이럴수가.. 회사에서 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 |
여러 C++ 컴파일러 (0) | 2007.09.06 |
함수포인터란 ? (0) | 2007.09.06 |
[본문스크랩] 파일 입.출력 (0) | 2007.09.06 |