1998.8.3  조경민

푸헐 그냥 심심해서 하나 씁니다 -_-;;;;

아직 그래픽두 서투르신 분에게는 좋은 정보가 될꺼 같다는

혼자 생각에 그냥 함 써봅니다.

대부분 겜을 만들께 먼저 그래픽 제어를 할수 있어야

겠죠 -_- ??

대부분 MODEX(Teaked,Unchained-mode)나 VGA13h를 씁니다.

이건 그냥 초간당 ( 그러나 드립다 빠른 ) 13h 모드상에서

간단하게 쩜하나 찍는 얘기입니다.

아는 사람은 당장 p 누르세여 -_-;;;

푸헐 ~ 13h 모드로 가좌

union REGS regs;
regs.h.ah = 0x00;
regs.h.al = 0x13;         <-- 요거이 13h -_-;;
int86(0x10,®s,®s);  <-- 10h번 인터럽트 호출(비됴바꾸기)

요러면 간당하게 13 모드로 갑니다 푸헐 ^^; 넘 쉽다

고니까


void set_mode ( unsigned char mode )
{
    union REGS regs;
    regs.h.ah = 0x00;
    regs.h.al = mode;        
    int86(0x10,®s,®s);
}

하믄 되겠네 -_-; 퍼헐...

이렇게 하고 호출을

set_mode(0x13); 하믄 13 모드고

set_mode(0x03); 하믄 다쉬 텍스트 모드로 홀라당 ~

으음 -_-;; 이거 뭐이리 쉽노..

아따 어떤 사람은 인라인어셈을 좋아하더마..
( 아쥑 난 통 어셈은 할줄 모름 --+)

void set_mode ( unsigned char mode )
{
    asm{
        mov ah, 0x00
        mov al, mode
        int 0x10
    }
}

므아..-_- 더 짧군..

이제 냅다 쩜하나 찍자... -_-;;

알다시피 VGA13h 모드에서는 0xA000 0000L 주소서 부터 시작하는

배열인디 그 배열에다가 색깔 값만 느면 그냥 화면에 나와부려~

unsigned char far* SCR = (unsigned char far*)0xA0000000L;

하구

VGA[ x + 320 * y ] = color;

하믄 그냥 점이 보임 -_-;; 말이 필요 없음이다..

좀 빠른걸 원한다면 말야~

속에 넣는걸 (y<<8)+(y<<6)+x 로 하믄 된다 마하하 -_-;;

이미 누가 다 계산을 해 놔서 무하~

물론 대부분 unsigned char는 byte로 하는게 정석이니깡

#include <conio.h>

typedef unsigned char byte;
byte far* SCR = (byte far*)0xA0000000L;

void set_mode ( byte mode )
{
    asm{
        mov ah, 0x00
        mov al, mode
        int 0x10
    }
}

void set_pix( int x, int y, byte col )
{
    VGA[ (y<<8)+(y<<6)+x ] = col;
}

void main()
{
    int x,y;
    set_mode(0x13);
    
    for(x=0;x<320;x++)
       for(y=0;y<200;y++)
          set_pix(x,y,30);

    getch();
    set_mode(0x03);
}

헐.. -_-; 돌아버리게 쉽군....

참 A0000000L 이거이 안되는 집은 <dos.h> 포함하고

byte far* SCR = (byte far*)MK_FP(0xA000,0x0000);

이렇게 해보드라구 흐흐흐..

마하하하 -_-;;; 넘 쉬운 13h 였슴둥..

난 이만 .. 강원도로 훌라당~

'KB > C/C++' 카테고리의 다른 글

[djgpp] class 라이브러리만들기  (0) 2004.03.19
class에 대한 잡담  (0) 2004.03.19
this에 대하여  (0) 2004.03.19
rtti  (0) 2004.03.19
tc 라이브러리 만들기  (0) 2004.03.19

+ Recent posts