안녕하세요...
어제 중간고사가 끝나서 뭘 하나 만들어 봤는데요..
저번에 보여 드렸던 '쿼터뷰 베사 롤플레잉 스크롤'의 최종 버전입니다.
대부분의 사람들이 C 언어를 사용하는 관계로 이번에는 C++ 로 만들었습니다.
저번에 보여 드린 Pascal 버전과는 비교도 안될 정도로 변했습니다.
...이번의 변경점은,
1. 쿼터뷰로 풀화면 구현 ( 640 * 480 * 256 )
2. 풀화면 화면 갱신 속도 개선 ( 펜티엄+ET6000 에서 초당 26회 )
<== 속도는 그래픽 카드에 더 영향을 받더군요...
...파일 속에 포함된 내용은,
QV_VESA. CAP : 지금 보는 이 파일입니다.
QV_VESA.CPP : 문제의 소스 파일이죠. ( BC 3.1 )
MAP .DAT : 지도 데이타
_NETO .DAT : 타일 데이타
QV_PAS .EXE : 파스칼로 만든 원본 실행 파일
QV_VESA.EXE : C++ 로 번역해서 만든 실행 파일
기본적으로 가상페이지를 화면에 복사하는 방식이고 덕분에 뱅크의 경계선
에 걸릴때를 판별하는 계산이 없어졌습니다.
어떻게 없어졌냐면.... flipPage() 라는 함수를 보면 아시겠지만
'가장 무식한 것이 가장 빠르다'라는 제 동생의 말을 격언 삼아
CX 의 하나 하나에 그에 맞는상수 값 을 넣어서 계산 없이 뱅크를
바꿔 나갔죠. (loop가 없어 코드는 좀 길어졌겠지만 속도는 대신 빠르겠죠.)
이것을 800 * 600 이나 그 이상의 모드로 바꾸려면 640 을 곱해주는 부분을
그 모드의 가로 해상도로 해주면 됩니다. 물론 그 이상의 모드에서
가상 페이지를 쓰려면 보호모드가 지원되는 컴파일러를 권합니다.
( 저는 보호모드를 지원하는 C 컴파일러가 없어서.. ^^; )
이걸 만들면서 느낀건데 쿼터뷰라는 방식은 정말 속도나 타일의
용량면에서는 좋은 방법이 아니더군요.. 스킵되어 보이지 않거나
겹치는 부분이 반 이상이? ?, 노력한 결과가 반은 보이지 않는 셈이죠.
( 물론 그런걸 보완하는 방법은 많죠... 하지만 원론에 충실하자면
이렇다는 것입니다. )
Pascal 을 C 로 번역하면서 꽤나 애를 먹었습니다.
이 두언어는 포인터의 쓰임이 반대 개념이라 더 어렵더군요...
그리고 베사 모드로 초기화 하는 함수는 성익님(NOERROR)의 강좌를
많이 참조 했습니다.
혹시나 베사 모드에서 스크롤을 하시려는 분들에게 도움이 될까해서
만들어 봤습니다. ( 소스는 마음대로 수정하셔도 좋고, 자신의 루틴에
첨가 하실때 출처를 밝히지 않으셔도 좋습니다. )
그럼.. SMgal.