어셈블리어 그래픽 색상 관련질문입니다. 어셈블리어 잘하시는
글쓴이: gyxor / 작성시간: 화, 2003/06/24 - 4:48오후
어셈블리어를 이용해서 에디터를 만들려고 하는데요
색상이 전경색은 16가지이고 배경색은 8가지만 선택할 수 있더라구요
mov ah,09h
mov al,'문자'
mov bh,페이지번호
mov bl,색상
int 10h
이런 인터럽트가 있는데요
BL 에 들어가는 1바이트의 범위에서는 ..
아무튼 색깔의 선택범위가 너무 적은거 같아요
예전에 도스용 프로그램을 썼을땐 색상선택이 꽤 많았던걸로 기억하는데요 MDIR 이나.. NORTON 등등..
색상선택을 더 다양하게 할 수있는 방법을 알려주시면 감사하겠습니다.
또한 ---- 등의 선 문자가 깨져서 한글이나 한문으로 나타나는 증상을 없애려면 어떻게 해야하나요?
(도스시절엔 hbios 등을 사용안하면 되는거였는데여..)
지금은 어떻게 하는지 모르겠습니다.
마지막으로 도스모드에서 아스키 문자말고 그래픽 파일을 링크 시키는 방법은 없는지 궁금합니다.
세가지 답변부탁드립니다.
Forums:
Re: 어셈블리어 그래픽 색상 관련질문입니다. 어셈블리어 잘하&
텍스트모드이신가요?
일반적인 VGA 텍스트모드일경우 메모리 주소
0xB800:0 - 0xB800:0x7FFF까지가 비디오램 영역입니다.
이 비디오램 영역을 직접 접근해서 처리하시기 바랍니다. int 0x10 쓰면
괜히 속도만 느릴 뿐입니다.
텍스트모드일때의 비디오램은 한 문자당 2바이트씩을 차지하는데,
첫번째 바이트는 ASCII 코드고, 두번째 바이트가 색상정보입니다.
색상 정보는 아래와 같이 되죠. (정확히는 모르겠네요. 기억나는데로 적었습니다)
bit 7 : blink(글자 깜박거리기)
bit 6 : 배경 R
bit 5 : 배경 G
bit 4 : 배경 B
bit 3 : 강조(글자가 굵게보임)
bit 2 : 글자색 R
bit 1 : 글자색 G
bit 0 : 글자색 B
접근하는 방법은 간단합니다. 화면 좌표를 x,y로 한다면 접근해야 할 주소는
(y*80+x)*2가 됩니다. 이 값을 위의 비디오램 시작 주소에 더하면
됩니다.
하지만, 색상 정보는 늘릴 방법이 없습니다. 텍스트모드일경우 위와같이
표시하는게 관행이라서 거의 대부분의 VGA카드가 위 규격만을
따르고있으니까요. MDIR도 알고보면 위 색상과 ASCII 코드중에 특수문자
몇가지를 잘 사용해서 꾸민겁니다.
Written By the Black Knight of Destruction
MDIR은 다음과 같이 VideoRam에다가 직접 데이터를 넣습니다.
MDIR은 다음과 같이 VideoRam에다가 직접 데이터를 넣습니다.
참고로 MDIR은 Pascal로 만들었다고 들었습니다.
Linux에서는 ANSI code를 써야 합니다. 터미날이기 때문에...
[quote="minzkn"]Linux에서는 ANSI code를 써야 합
ANSI code..라뇨? (잘못된 용어를 Linux world에까지..)
slang이나 ncurses 등의 라이브러리를 이용하면 됩니다. 어떤 터미날이 붙을 지 모르니깐요.
몇가지..
글자가 깨어진다고 하신건 chcp 437로 코드페이지를 변환하면 됩니다.
다양한 글자색을 이용하실려면 비디오 모드를 전환하세요.
256컬러까지 가능한 걸로 알고 있습니다.
그래픽 파일을 링크한다는건 좀 이상하네요.
jpg같은 포맷의 파일을 보여준다는 것인가요?
그렇게 할려면 그래픽 파일을 읽고 파싱해서 그려주는 모듈을 구하거나
만들어야 겠죠. 선이나 간단한 drawing을 하실려면 그래픽 모드로 전환 후
pixel dot을 찍는 인터럽트를 이용해 위치와 색깔을 지정후 픽셀을
찍어주면 됩니다. 물론 위에서 다른 분이 언급하신 direct write가 더 빠른
방법이지요.
역시 이 모든 내용은 많은 어셈블리 언어 책에서 설명하고 있습니다.
찾아보시길 ^^
예전에 만들어 둔 DOS용 라이브러리입니다.전체는 페이지의 규모상 못
예전에 만들어 둔 DOS용 라이브러리입니다.
전체는 페이지의 규모상 못올려드리고 조금 편집했서
크기를 대폭 줄인겁니다. 참고만 하세요.
무식하게 올린다고 손가락질 하지 마세요. 저 원래 이렇게 삽니다.
[quote="cdpark"][quote="minzkn"]Linux에서는
통상적인 예기를 하고파요.~
ANSI code라는 말이 정말로 잘못된 용어입니까?
Escape code라고 해야 하나요?
전 그것이 같다고 알고 있는데....
대부분 터미날은 같지 않을까요? 통상통상.
댓글 달기