HiTEL 게제동(GMA) 공개자료실

SUPER VGA & TMF 라이브러리!!!
작성자:김자량(yunjr)
94-02-01
첨 부:[188]stlib.arj
전에 17번 게시판에 약간(?) 올렸던 Super VGA 제어 라이브러리와. 밑에 있는 TMF 관련 함수를 라이브러리화 하였습니다. 원래 라이브러리만 하면 크기가 별로 안되겠지만. 소스까지 다 넣다 보니 엄청나게 커지더군요. 그럼 STLIB.DOC 파일을 여기에 올릴깨요...읽어 보시고, 이 정도 기능이면 쓸만하다고 생각 되시면 DN을 누르세요... _________________________________________________________________ STLIB 사용 설명서 1. SLIB 이란? - Super VGA 의 640 by 480, 256 Color 모드를 제어하기 위한 간단 단 라이브러리입니다. 2. TLIB 이란? - TMF 애드립용 음악 포맷을 연주할수 있는 라이브러리와 타이머 제어를 위한 라이브러리를 제공합니다. 3. SLIB 의 구성. - SLIB은 크게 SLIB_VGA.C, SLIB_OUT.C, SLIB_PAL.C, SLIB_HAN.C로 구성 되어 있습니다. 설명에 들어가기 전에.... #define U8 unsigned char #define U16 unsigned #define U32 unsigned long #define S8 char #define S16 int #define S 32 long 앞으로 데이터 형은 이렇게 정의합니다. SLIB_VGA.C : Super VGA 제어를 위한 기본적인 카드 인식과 뱅크 전환 루틴이 들어 있습니다. void SetSVGA() : Super VGA 카드가 있는지 판별합니다. 베사 드라이버를 포함한 15가지의 카드를 판별 할 수 있습니다. 그 결과 인식할 수 있는 Super VGA 카드가 있을 경우 WriteBank, ReadBank, SetMode 의 포인터형 함수를 세팅하고, SVGACard라는 변수에 자신이 찾은 카드명을 기록합니다. 만일 Super VGA 카드가 없으면 NONE(0)을 돌리게 됩니다. void TextMode() : 화면을 Mode 3번, 즉 기본적인 텍스트 화면으로 돌립니다. void (*WriteBank)(U8 Bank) : 포인터형 함수로써 SuperVGA 카드의 Write Bank를 조작합니다. 일단 SetSVGA 로 함수의 세팅이 되어 있어야 합니다. void (*ReadBank)(U8 Bank) : Read Bank를 조작하는 함수입니다. 거의 대 부분의 카드에서 위의 WriteBank 함수와 같 은 번지를 지시하게 됩니다. 이유는 제가 아직 자료가 부족해서 따로 만들수 없었기 때문입니다. 그러니 WriteBank따로, ReadBank 따로 쓸수는 없습니다. void (*SetMode)() : 화면을 Super VGA의 640 by 480, 256 Color로 바 꾸어 줍니? ?. 먼저 SetSVGA로 세팅을 해줘야 합 니다. U8 SVGACard : SetSVGA 함수를 호출한 뒤에 Super VGA의 종류가 들어가게 됩니다. NONE 0 VESA 1 COMPAQ 2 NCR 3 TRIDENT 4 ET3000 5 ET4000 6 ATI 7 OAK 8 AHEADA 9 AHEADB 10 EVEREX 11 VIDEO7 12 CHIPT 13 PARADISE 14 GENOA 15 각 카드에 따라서 이 값이 들어가게 됩니다. SLIB_PAL.C : 팔레트 제어에 관한 함수가 들어 있습니다 . 먼저 글로벌 변수로 U8 Red[256], Green[256], Blue[256]; U8 Fade_Red, Fade_Green, Fade_Blue; U8 FadeInRepeat, FadeOutRepeat; 가 있습니다. Red, Green, Blue는 팔레트 제어 함수들이 쓸 팔레트의 값들 이고, Fade_Red, Fade_Green, Fade_Blue는 FadeOut 함수시 저장되어 지고, FadeIn 함수시 이 변수를 기준으로 FadeIn을 시키게 됩니다. FadeIn이라는 것은 원래 화면이 어떤 컬러를 기준으로 칠해져 있다고 생각하고 행하는 거기 때문 에...... 음..... 말이 어려워 지네요. 직접 실험해 보세요.(^.^) FadeInRepeat와 FadeOutRepeat는 FadeIn과 FadeOut의 반복 횟수입니다. 이 값이 0이면 아무 의미가 없는거고, 63을 넘 어가면 지연효과(?)가 있을뿐입니다. 기본적으로는 둘다 63 으로 세팅 되어 있습니다. void WaitNotVer() : 버티컬 리트레이스가 일어나지 않을때까지 지연 시킵니다. 팔레트 제어를 할때 지연을 시켜주지 않으면 깜빡이게 되거든요. void WaitVer() : 버티컬 리트레이스가 일어날때까지 지연시킵니다. 목적은 WaitNotVer()와 같아요. void get1DAC(U8 N) : N번째 컬러의 값을 DAC에서 읽어 와서 Red[N], Green[N], Blue[N]에 저장합니다. void getDAC(U8 Start, U8 End) : Start에서 End까지의 DAC을 읽어서 역시 Red, Green, Blue에 저장. void getAllDAC() : 256개의 모든 DAC을 읽어서 저장합니다. void set1DAC(U8 N) : Red[N], Green[N], Blue[N]에 있는 값을 DAC에 넣습니다. void s etDAC(U8 Start, U8 End) : Start에서 End까지 DAC을 세팅합니 다. void setAllDAC() : 모든 DAC을 세팅 시킵니다. void FillDAC(U8 Start, U8 End, U8 Red, U8 Green, U8 Blue) : Start에서 End까지의 DAC을 Red, Green, Blue의 색으로 체웁니다. void FillAllDAC(U8 Red, U8 Green, U8 Blue) : 모든 DAC을 Red, Green Blue로 체웁니다. void cFillDAC(U8 Start, U8 End, U8 Color) : Start에서 End까지의 DAC을 Red[Color], Green[Color], Blue[Co lor]로 체웁니다. void cFillAllDAC(U8 Color) : 모든 DAC을 Red[Color], Green[Color], Blue[Color]로 체웁니다. void FadeIn(U8 Start, U8 End) : Start에서 End까지 FadeIn을 시킵니 다. Fade_Red, Fade_Green, Fade_Blue에서 부터 원래의 색 으로 FadeInRepeat만큼 세분해서 변화시킵니다. void FadeOut(U8 Start, U8 End, U8 FadeRed, U8 FadeGreen, U8 FadeBlue) : FadeRed, FadeGreen, FadeBlue로 Start에서 End까 지 FadeOut 시킵니다. 결과로 Fade_Red, Fade_Green, Fade_Blue 변수를 지정하게 됩니다. void LoadPalette(S8 *Name) : 팔레트를 로드해서 Red, Green, Blue에 저장합니다. void SavePalette(S8 *Name) : 현제 Red, Green, Blue에 있는 데이터로 팔레트를 저장합니다. void Blend(U8 n1, U8 b1, U8 g1, U8 r1, U8 n2, U8 b2, U8 g2, U8 r2) : n1에서 n2번 까지, b1, g1, r1을 시작점으로 해서 b2, g2 , r2 로 변환되는 팔레트 전환을 시킵니다. SLIB_OUT.C : 기본적인 출력 함수가 들어 있습니다. void Plot(U16 X, U16 Y, U8 Color) : X, Y 좌표에 Color의 값을 찍습 니다. U8 RdPlot(U16 X, U16 Y) : X, Y좌표의 Color 값을 읽어서 리턴합니다. void Line(U16 x1, U16 y1, U16 x2, U16 y2, U8 Color) : x1, y1를 시작 좌표로, x2, y2를 끝 좌표로 해서 선을 그립니다. void Hori(U16 Xs, U16 Xe, U16 Y, U8 Color) : Xs에서 Xe까지 가로선 을 그립니다. Line으로 하는것 보다 몇배 빠르게 그릴수 있 습니다. vo id lHori(U16 X, U16 Y, U16 Length, U8 Color) : X, Y 좌표에서 Length만큼 가로선을 그립니다. void lVert(U16 X, U16 Y, U16 Length, U8 Color) : X, Y 좌표에서 Length만큼 세로선을 그립니다. void Vert(U16 X, U16 Ys, U16 Ye, U8 Color) : Ys에서 Ye까지 세로선 을 그립니다. void Box(U16 x1, U16 y1, U16 x2, U16 y2, U8 Color) : 박스를 그리는 함수입니다. void FillBox(U16 x, U16 y, U16 x2, U16 y2, U8 Color) : Color로 속 이 체워져 있는 박스를 그립니다 . SLIB_HAN.C : 한글출력에 관한 함수가 들어 있습니다. 먼저 글로벌 변수로 DMode가 있습니다. DMode에 따라 Han 함수로 출력하는 글자가 다르게 됩니다. 0 : 그냥(?) 평범한 출력. 1 : 컬러 리퍼런스식의 출력. 2 : 2배 확대한 컬러 리퍼런스식의 출력. 3 : 2배 확대한 명암 없는 컬러 리퍼린스식의 출력. 컬러 리퍼런스식이란 ? - 16컬러를 단위로한 팔레트에서 그 색을 조합해서 출력하는 것 입니다. void SetFont(S8 *HanName, S8 *EngName) : 폰트를 로드합니다. 앞에는 한글 폰트의 이름, 뒤에는 영어 폰트의 이름입니다. void Han(S16 S_X, S16 S_Y, S8 *String, U8 Color) : 한글을 출력합니 다. S_X, S_Y좌표에 String을 Color로 출력합니다. 하지만 컬러 리퍼런스식의 출력일 경우 Color값은 무시됩니다. void ChangeFontColor(U8 a) : 컬러 리퍼런스될 컬러를 지정합니다. 16컬러 단위로 되어 있으며, 0~15, 16~ 31등으로 되어 있습니다. a에 2를 넣으 면 32~47의 컬러를 글자 출력에 쓰겠다 는 것입니다. void InverseFont(U8 a) : 폰트의 컬러 리퍼런스를 반전 시킵니다. 한번 반전시키면 계속 반전된체로 되며, 다 시 원래대로 돌리기 위해서는 InverseFont 함수를 다시 호출해야 합니다. 4. TLIB의 구성 TLIB는 다음의 6개의 함수로 구성되어 있습니다. U8 TestAdLib() : AdLib 카드가 있는지 검사합니다. 없으면 0을 리턴하 고 ? 聆만? TRUE를 리턴합니다. void play_Tmf(unsigned char *name) : TMF 포맷의 음악파일을 연주합니다. 반드시 Clk_install 함수를 호출한 뒤에 해야합니다. 에러가 나면 음악을 틀지 않고 그냥 돌아옵니다. void end_Tmf() : 음악의 연주를 끝냅니다. void Clk_install() : 클럭 함수를 인스톨합니다. void Clk_uninstall() : 클럭 함수를 원래대로 돌려 놓습니다. void User Timer() : TLIB.H에 정의 되어 있는 함수입니다. 1초에 18.2번 씩 반복해서 호출 되도록 되어 있습니다. 이 함수는 Clk_install()함수를 호출한 뒤에만 유용하고, 만일 이 함수를 이용하고 싶을 경우 TLIB.H에 정의된 함 수를 지우시고 같은 이름으로 자신의 프로그램에 집 어 넣으면 됩니다. 5. STLIB에 들어 있는 파일들. SLIB_SOR.LZH : SLIB.LIB에 관계된 소스가 들어 있습니다. TLIB_SOR.LZH : TLIB.LIB 소스와, PLA YTMF, MAKETMF 의 소스. MAKETMF.EXE : IMS 파일을 TMF로 바꾸어줍니다. PLAYTMF.EXE : TMF 파일을 연주하는 프로그램입니다. TEST.TMF : 심심해서 넣은(?) TMF 파일입니다. 제가 좋아하는 Five Star Stories의 엔딩 테마입니다. 흐.. ENG.FNT : SLIB에서 쓸수 있는 영어 폰트. HAN.FNT : SLIB에서 쓸수 있는 한글 폰트. SLIB.H : SLIB을 쓰기 위한 헤더. TLIB.H : TLIB을 쓰기 위한 헤더. STLIB.DOC : 지금 보고 계시는 파일 TMF.DOC : TMF 포맷에 관한 설명 글. STANDARD.PAL : SLIB의 컬러 리퍼런스 출력을 위해 제작된 팔레트. SLIB.LIB : SLIB 라지 모델용. TLIB.LIB : TLIB 라지 모델용. TEST.C : 간단한 테스트 프로그램. 원래는 안넣을려고 했는데 (프로그래밍 실력이 워낙 딸려서요...) 그래도 예제는 하나 있어야 되겠다 싶어서 넣어 봤습니다. 6. 당부하고 싶은 말. TLIB의 프로그램은 한번씩 다 테스트 해봤지만, SLIB의 프로그램은 아 직 완벽하게 테스트 해보지 못했습니다. 혹 에러가 생기면 말해주세요. 완전한 공개용이므로 어떻게 지지고 볶아도 상관 없습니다. 특히 SLIB 부분은 단시간 내에 만들다 보니까 출력 기능이 상당히 미약합니다. 많 이 보충 해 주셔서 저에게 보내주시면 고맙겠내요.(흐~~ 날강도인가..) 하지만 TMF 파일의 포맷 형식을 약간 바꿔서 다른 포맷으로 만들거나 하지는 말아 주십시요. 제가 여기 공개한 프로그램으로 많은 분들의 게임 제작에 도움이 되길 빌겠습니다. ?? 부산에서 신년 선물(?)로 영훈이가 드립니다. P.S : 시삽님...앞에 올려진 크기 작은거는 잘못 올라갔어요. 지워주세요~~