Please Enable JavaScript!
Gon[ Enable JavaScript ]

컬러비트 배경색 16 쓰기

기타 언어/C# & MFC
반응형

컬러비트 배경색 16 쓰기


BLINK 비트를 OFF 하면 컬러 텍스트 배경색으로 16색을 모두 사용할 수 있습니다.


#include 
#define ON  1
#define OFF 0

void set_blink(int i);
int video_mode(void);

void main()
{
   set_blink(OFF);   
   /* blink 비트를 off 시킨다. */
       .
       .
   set_blink(ON);    
   /* 프로그램 종료전에 다시 blink비트를 on시켜놓아야 한다. */
}

void set_blink(int i)
/* i에 ON을 쓰면 blink on이고 OFF를 쓰면         */
/* intensity on 즉 blink off 상태로 만들어 준다. */
{
   union REGS r;
   if (video_mode==7) {   /* 흑백모드일 경우 */
      outportb(0x3B8,0x0D+0x20*i);
   } else {        /* 컬러 모드일 경우 */   
      r.h.ah=0x10;
      r.h.al=0x03;
      r.h.bl=i;
      int86(0x10,&r,&r);
   }
}

int video_mode()
/* 비디오 모드를 알아내는 함수 */
{
   union REGS r;
   r.h.ah=0x0f;
   return(int86(0x10,&r,&r) & 0xff);   
   /* 리턴값이 7이면 흑백모드 */
}
위의 함수에 대한 상세 설명이다.

- set_blink()

 

컬러 텍스트 모드에서 사용하는 색깔은 16가지인데, 이 가운데 배경색으로
사용할 수 있는 색은 8가지밖에 안된다 왜냐하면 배경색으로 쓰이는
상위 4비트에는 blink 비트가 있어서
글자의 깜박임을 지시해야 하기 때문에
결과적으로 3비트, 8가지 색밖에 지정할 수 없게 된다.


하지만 blink 비트를 off로 만들어 주면 배경색도 16가지 색을 사용할 수 있게 된다.

주의할 점은 프로그램에서 blink 비트를 off 시켰으면 프로그램을  종료하기 전에 반드시
set_blink(ON)
으로 다시 blink 비트를 on  시켜주어야 한다.
가끔 이런식으로 만들어 준
프로그램을 빠져나오면 글자가 깜박거릴 때가 있는데, 이것은 blink 비트를 off 시킬 때  
충돌을 일으키기 때문이다.

- video_mode()

 

int 10 (ah=0x0f) 리턴값

      : AH == 텍스트 모드 컬럼수

        AL == 비디오 모드의 번호

        BH == 액티브 페이지(현재의 페이지 번호)

 

 

int86(0x10,&r,&r)에서 리턴값으로 AX의 값이 오는데 AX의 하위 바이트가 AL이므로 & 연산으로 하위  
바이트만 끄집어낸다. 이 값이 7이면 흑백모드이고, 아니면 컬러로 인식한다.

 

AL의 값을 리턴하려면 다음과 같이 int86() 함수 호출후 r.h.al 의 값을 리턴해도 된다.

AX의 데이터형은 unsigned int 이고, AL의 데이터형은 unsigned char이다.

그러므로 나중에 발생할 에러를 방지하기위해 캐스트 연산자를 적절히 써주는게 좋다.

unsigned char video_mode() {
   union REGS r;
   r.h.ah=0x0f;
   int86(0x10,&r,&r);  
   return(r.h.al);
}

int86(0x10,&r,&r)에서 리턴값으로 AX의 값이 오는데 AX의 하위 바이트가 AL이므로 & 연산으로 하위 
 바이트만 끄집어낸다. 이 값이 7이면 흑백모드이고, 아니면 컬러로 인식한다.

 

AL의 값을 리턴하려면 다음과 같이 int86() 함수 호출후 r.h.al 의 값을 리턴해도 된다.

AX의 데이터형은 unsigned int 이고, AL의 데이터형은 unsigned char이다.

그러므로 나중에 발생할 에러를 방지하기위해 캐스트 연산자를 적절히 써주는게 좋다
반응형
Posted by 녹두장군

댓글을 달아 주세요

  1. 2010.09.02 21:52  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다