일단 몇 몇 컴파일러에선 불가능하다.
왜냐하면 필요조건이,
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
요약하면,
특정 시스템에선 쉬움.
특정 시스템엔 조금 귀찮음.
특정 시스템에선 불가능.
먼말인지모르겟읍니다
점 찍을수 있으면 폰트 만들고 printf 만들고 순풍 순풍~
개쩌네 출력함수를 직접짠다니..
아, 모니터에 글자를 찍는 단 말은 장치에 명령을 전달한달 말인데,
메모리에 매핑만 할수있으면 모니터가 됐건 머가됐건 어려운건 아니구나
이런건 뭘보고 배워요?
명령을 전달하는 방식이 2가지라고. 1. 주소 ( memory mapped IO ) 2. 포트 ( IO mapped IO ) 후자는 어셈블리로 밖에 사용할 수 없음.
이분 천재맞습니다
걍 니들 보다 어릴때 실행파일들 리버싱 하면서 익힌거지 뭐.
리버싱은 어케하는겁니까? 저도 심심할때 리버싱이나하면서좀 시간좀때우게요 ㅠ
옛날엔 debug 요거 하나로 다 뜯어봤지. 그러면 어셈블리 코드랑 기계어랑 같이 덤프시킬수 있거든.
요즘은 올리디버거 같은거 많이 쓰는데 무지 편함.
그 사이는( 90년대 후반) 소프트아이스같은게 인기였구.
오오 꿀팁
우와 라이브러리도 이렇게 만드는거에여?
응 다 저렇게 만들었었쥬~
32비트 단위로 빠르게 색깔 칠할려고 256색 (1바이트) 4개 단위로 채우면서 사각형 그리는 함수 만들고~
APPLE ][ 세대 깝ㄴㄴ
템즈강정모//거에여->거예여 (받침 있으면 이에요 없으면 예요 이로 끝나면 받침 없으므로 예요 요 떼서 말 되면 에요 아니에요는 예외 인명엔 예요(예 : 길동이예요) 성까지 쓰면 이에요(예 : 홍길동이에요)) [리듬 맞춤법 봇♬]