일단 몇 몇 컴파일러에선 불가능하다.

왜냐하면 필요조건이,


memory mapped IO 기반으로 콘솔 문자 출력을 제공한다든지,

IO mapped IO 일지라도 인라인 어셈블리를 쓸 수 있는 환경이어야 한다는거다.


즉 어떤 주소에 값을 써 넣는것 만으로 출력이 되는 시스템에선 손쉬운거구

인라인 어셈블리라도 쓸수 있고 BIOS 가 연결되어 있으면 interrupt service 를 이용해서 출력하면 되니 문제가 안됨.


가령 80x86 도스 호환모드 콘솔의 경우는 B800:0000 번지로의 직접 출력을 제공한다.

한 바이트가 글짜, 한바이트가 색상 으로 사상되어 있는 80컬럼 * 25라인 기준 메모리 공간이지.

그러니까 그냥 포인터 선언하고 배열처럼 써넣어주면 출력함수를 작성가능.


물론 A000:0000 의 비디오 메모리를 직접 건드려도 된다. 다만, 비디오모드를 바꿔야하니 인라인 어셈블리가 필수가 되지.

예전엔 이런식으로 점을 많이 찍었었거든.


#define SCREEN_WIDTH     ~~~~


char far* video = (char far*)0xA0000000L;


void set_video( int mode )

{

    asm{

        mov ax, mode

        int 0x10

    }

}


#define put_pixel( x, y, color ) video[ x + y * SCREEN_WIDTH ] = color;


blah blah


요약하면,

특정 시스템에선 쉬움.

특정 시스템엔 조금 귀찮음.

특정 시스템에선 불가능.