PSP 프로그래밍에서 한글 출력의 문제에 대해서 관련 소스 코드가 공개 된 것이 있어 살펴 보았다. 각 글자에 대해서 모두 비트맵을 정의하여 해당 글자의 비트맵에 따라 비디오 메모리에 직접 접근해서 픽셀별로 글자색 배경색을 지정는 형식으로 만들어져 있었다. 글자별 비트맵을 만드는 것이 보통 노가다도 아니고 폰트 변경도 어렵고 글자 크기 조절도 안되는 불편함이 있어서 SDL_ttf라이브러리를 이용해서 트루타입 폰트를 사용하여 글자를 출력할 수 있는 간단한 프로그램을 작성하여 보았다. 그런데 속도가 많이 떨어진다. 텍스트 뷰어가 아닌 이미지뷰어 정도라면 사용해도 될 듯 하다.
회사에서 할 것 도 없고 심심해서 pspcomic 라는 프로그램을 분석해 보았다. SDL을 이용하여 작성된 프로그램인데 그림 파일을 PSP에 출력하는 것이 생각보다 간단하여 한번 만들어 보았다. test.jpg 파일을 3초간 출력 후 종료된다. psp해상도 보다 작은 jpg 파일을 아무거나 준비하여 실행한다.
1. CygWin을 다운 받아서 설치. - 유의사항은 패키시 선택 사항에서 autoconf, automake, bison, flex, gcc, make, ncurses, patch, subversion, texinfo, wget 이것들은 반드시 설치해야 한다. 그 외 CygWin에는 기본적으로 설치하지 않는 binutils, libtool, diff 도 반드시 설치한다. 그 외 vim과 함께 ctags도 선택하면 좋다. 레파지토리는 http://ftp.daum.net 을 선택하면 빠르다.
3. vi ~/.bash_profile 을 열어서 아래 환경변수를 추가한다. export PSPDEV=/usr/local/pspdev export PATH=$PATH:$PSPDEV/bin
4. source ~/.bash_profile 하여 환경 변수를 읽어들인다.
5. toolchain 을 풀어놓은 디렉토리로 가서 ./toolchain.sh 를 실행한다.
6. 느긋하게 기다린다. T7250 듀얼 CPU를 가진 노트북에서 대략 한시간 가량 걸렸다. 아마 이 과정에서 에러가 발생한다면 1번 과정에서 필요한 패키지를 설치하지 않은 것이다.
7. PSPSDK 외에 필요한 라이브러리들을 추가로 다운 받는다. svn export svn://svn.pspdev.org/psp/trunk/zlib svn export svn://svn.pspdev.org/psp/trunk/libpng svn export svn://svn.pspdev.org/psp/trunk/jpeg svn export svn://svn.pspdev.org/psp/trunk/libmad svn export svn://svn.pspdev.org/psp/trunk/freetype svn export svn://svn.pspdev.org/psp/trunk/SDL svn export svn://svn.pspdev.org/psp/trunk/SDL_image svn export svn://svn.pspdev.org/psp/trunk/SDL_mixer svn export svn://svn.pspdev.org/psp/trunk/SDL_ttf
8. 다운 받은 패키지를 컴파일하고 설치한다. cd zlib && make && make install && cd ../ cd libpng && make && make install && cd ../ cd jpeg && make && make install && cd ../ cd libmad && make && make install && cd ../ cd freetype && sh autogen.sh && LDFLAGS="-L$(psp-config --pspsdk-path)/lib -lc -lpspuser" ./configure --host psp --prefix=$(psp-config --psp-prefix) && make && make install && cd ../ cd SDL && sh autogen.sh && LDFLAGS="-L$(psp-config --pspsdk-path)/lib -lc -lpspuser" ./configure --host psp --prefix=$(psp-config --psp-prefix) && make && make install && cd ../ cd SDL_image && sh autogen.sh && LDFLAGS="-L$(psp-config --pspsdk-path)/lib -lc -lpspuser" ./configure --host psp --prefix=$(psp-config --psp-prefix) && make && make install && cd ../ cd SDL_mixer && sh autogen.sh && LDFLAGS="-L$(psp-config --pspsdk-path)/lib -lc -lpspuser" ./configure --host psp --prefix=$(psp-config --psp-prefix) && make && make install && cd ../ cd SDL_ttf && sh autogen.sh && LDFLAGS="-L$(psp-config --pspsdk-path)/lib -lc -lpspuser" ./configure --host psp --prefix=$(psp-config --psp-prefix) --without-x --with-sdl-prefix=$(psp-config --psp-prefix) --with-freetype-prefix=$(psp-config --psp-prefix) --prefix=$(psp-config --psp-prefix) && make && make install && cd ../
9. 이 작업 역시 상당한 시간이 걸린다. 느긋하게 기다려준다. 설치가 완료되면 toolchain 과 다운받은 라이브러리들은 지워도 된다.
10. psp-gcc -v 해서 아래와 같은 메세지가 나온다면 toolchain 은 성공적으로 설치된 것이다. Using built-in specs. Target: psp Configured with: ../configure --prefix=/usr/local/pspdev --target=psp --enable-languages=c,c++ --with-newlib --enable-cxx-flags=-G0 Thread model: single gcc version 4.1.0 (PSPDEV 20060507)
11. $PSPDEV/psp/lib 디렉토리 안에 위에서 설치한 라이브러리들이 있는가 확인해본다.