삽질하는플머

영문 WM 6.1.4 - 480*800 에뮬레이터에서 한글 사용

Lazarus/Mobile
마이미츠 동호회 강좌/팁 란을 읽다가 갑자기 눈에 확 들어온 글귀가 있었다.

주의사항:
영문 윈도 모바일 6.1에서 사용하려면 한글 로케일/폰트 및 IME 패치가 먼저 설치되어야합니다.


오호~~ 그렇다면, 에뮬레이터도 패치를 해 주면 한글 로케일이 동작한다는 이야기??
자료실을 뒤져보니 영문 WM 6.1 Pro 스마트폰 한글 입출력 및 로케일 설정 패치 라는 물건이 있다.


먼저 설치하기 전 에뮬레이터의 화면은 이렇게 생겨먹었다.




다운 받아  깔아보자. 파일명은 20090203_MyMITs_HangleNo5_+_MalgunHanja.cab 이다.




설치가 마무리 되었으면 가볍게 똥침을 넣어주자. (소프트리셋)




재부팅된 화면은 짜잔~~~ 날짜가 한글로 나온다아~~~




Notes에서 한글도 잘 입력된다.




테스트삼아 옴니아 공모전 응모게시판에 올라와있던 amdmania 님의 BGP Lunch 라는 프로그램을 돌려보았다.
그 전에는 깨져 표시되던 한글이




패치를 설치한 후에는 아주 예쁘게 보인다. ^^;;






모바일용 고정소수점 연산 함수

Lazarus/Mobile

제가 게임에서 사용하는 벡터 / 행렬 라이브러리를 위한 기본적인 수학 함수들을 고정 소수점  함수들로 만들어 봤습니다. 나중에 OpenGL-ES에 써먹을 예정이기 때문에 GLFixed 와 동일하게 부호1비트, 정수15비트, 소수16비트를 사용하고 있습니다. 삼각함수 및 제곱근, 역수관련해서는 빈센트3D의 OpenGL-ES 구현을 참조했구요

문제가 됐던 아크탄젠트는 대충 원하는 속도 / 정밀도가 나와주길래 룩업테이블이 아닌 계산으로 마무리 지었습니다. raindraw님의 구현은 잘 저장 해 두었다가 계산에 문제가 생기면 바로 바꿔끼우겠습니다. 다시 한 번 감사드립니다.

일단 테스트는... 서비스 중인 게임의 코드를 일부 갈아끼우는 (맞아죽을) 방법을 사용했는데요... (~~ ^^;;)
어차피 게임이라는 게 비주얼 부분에서 약간의 계산 오차는 허용하는지라... 겉보기에는 멀쩡하게 동작하네요.
선형 가감속을 지원하는 1차원 댐퍼를 이 함수들로 만드는 중인데... 시간단위로 쓰는 틱이 182만 되도 그 제곱이 벌써 15비트를 넘기는 바람에 상당히 골치가 아프네요. 세상의 모든 모바일 개발자 여러분들... 존경합니다.

가지 말라고 매달리는 아들놈 떼어놓고 하루 종일 게임방에 틀어박혀 삽질중인데... 시간당 700원입니다. 헐~~
이 돈 받아 전기세라도 나오나... 만화방에 이어 또 하나의 예비 직업이 사라지고 있군요...

아무튼, 오류 지적 및 살 붙이기에 미리 감사드리구요~~~ 전 이만 내일을 위해 집으로 돌아갑니다. ^^;;




델마당에 올리는 글이라 경어체로 쓰고 나니... 블로그에는 잘 어울리지 않는군.
이 참에 모두 존댓말로 바꿔버릴까~~

Pocket PC 2003 에뮬레이터 띄우기

Lazarus/Mobile

Embedded VC 4.0 을 받고 서팩4, 윈도 CE 5.0 및 PocketPC 2003 SDK를 설치하게 되면 시스템에 버추얼머신 우쩌구 하는 경고가 뜨면서 충돌예상 시스템이라 설치할 수 없다는 에러가 난다. 그 후 윈도 CE 5.0 에뮬은 잘 동작하지만 PPC2003 은 아래와 같은 경고가 발생하며 동작하지 않게 된다.




잘은 모르겠지만, 라자루스 위키에서 WM 5.0용 에뮬레이터를 깔 때 Virtual PC 2007을 설치하라고 말하는 것으로 보아... 무언가 예전과는 많이 바뀐 듯...

아무튼 이 에뮬레이터를 구동하는 단축키는 "C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Emulation\emul.cmd" 를 실행시키게 되어있고 이 emul.cmd 의 내용은 다음과 같다.

start "" "C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\bin\PBEmulator.exe" /MemorySize 64 /Fastbackground /Skin "C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Emulation\pocket_pc_emulator_skin.xml" /CEImage "C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Emulation\PPC_2003_WWE.bin" /VMName "POCKET PC 2003 - POCKET PC 2003 Emulator" /HostKey 165


저 중간에 PBEmulator.exe 는 윈도 CE 3.0 에 대한 에뮬레이터였을 것이고... 그렇다면 이걸 지금 잘 동작하는 Emulator_500.exe로 바꿔보면 어떨까??

start "" "C:\Program Files\Common Files\Microsoft Shared\Windows CE Tools\Platman\bin\Emulator_500.exe" /MemorySize 64 /Fastbackground /Skin "C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Emulation\pocket_pc_emulator_skin.xml" /CEImage "C:\Program Files\Windows CE Tools\wce420\POCKET PC 2003\Emulation\PPC_2003_WWE.bin" /VMName "POCKET PC 2003 - POCKET PC 2003 Emulator" /HostKey 165


결과는 대 성공!!! 잘 구동된다!!! 반갑다 Pocket PC 2003!!




뭐 당연한 이야기겠지만, CPU는 암 에뮬레이션이 아니라 인텔이다. 따라서 i386-wince 용으로 컴파일 한 프로그램만 구동될 것이다.




당분간 POZ 충전할 일은 없겠다. 캬캬캬~~~

MS에서 제공하는 해법도 있지만, 보안에 관계된 문제가 생길 수 있고 악성 코드에 감염될 수 있다는 경고가 붙어있다. 꼭 필요할 때만 수행하라고 하는데... 하지 않는 편이 좋을 듯...

i386-wince 용 크로스 컴파일 환경 만들기

Lazarus/Mobile
앞에서 설치한 Microsoft Windows CE 5.0 Emulator 를 위한 i386-wince 크로스 컴파일 환경을 구축 해 보자. 

먼저 리테일 버전의 컴파일러 소스를 다운받아 압축을 푼다. 

  fpcbuild-2.2.2.zip

압축을 풀어 생성된 fpcsrc 를 d:\programs\fpc 에 옮겨두자.

GNU utils package 가 필요하다. 여기에서 다운받아 D:\Programs\coreutils 에 풀어둔다. Dependencies 도 함께 다운 받아 풀어둔다.

이미 라자루스/FPC가 설치된 상태이므로 커맨드 창을 하나 띄운 뒤 다음과 같이 입력한다.

cd D:\Programs\fpc\compiler
PATH=c:\lazarus\fpc\2.2.2\bin\i386-win32;D:\Programs\coreutils\bin
make cycle CPU_TARGET=i386 OS_TARGET=wince

결과로 얻어진 ppcross386.exe 을 c:\lazarus\fpc\2.2.2\bin\i386-win32 로 옮긴다.

참고. strip ppcross386.exe 해 주면 용량이 조금 줄어든다...


이제 라자루스 fpc로 가서 rtl을 컴파일하자.

PATH=c:\lazarus\fpc\2.2.2\bin\i386-win32
cd C:\lazarus\fpc\2.2.2\source\rtl
make CPU_TARGET=i386 OS_TARGET=wince PP=ppcross386.exe

C:\lazarus\fpc\2.2.2\source\rtl\units\i386-wince 를 C:\lazarus\fpc\2.2.2\units\i386-wince\rtl 로 복사한다.

다음은 패키지 빌드.

cd C:\lazarus\fpc\2.2.2\source\packages
make CPU_TARGET=i386 OS_TARGET=wince PP=ppcross386.exe

완료된 패키지들의 unit 폴더를 하나씩 C:\lazarus\fpc\2.2.2\units\i386-wince\ 밑으로 옮겨준다. 예를 들어 C:\lazarus\fpc\2.2.2\source\packages\chm 패키지는 위의 작업을 끝내면 units 밑에 i386-wince 폴더가 생성되는데 이 폴더를 잘라다가 C:\lazarus\fpc\2.2.2\units\i386-wince\chm 이라는 이름으로 옮겨주어야 한다는 이야기. 이거 되게 귀찮은데... 다음번에도 이 작업을 해야 한다면, 적당한 셸 스크립트나 유틸리티를 만들어야 겠다. 참고로 i386-wince 용으로 빌드되어 옮겨주어야 하는 패키지는 다음과 같다.

chm
fcl-base
fcl-db
fcl-fpcunit
fcl-image
fcl-json
fcl-net
fcl-passrc
fcl-process
fcl-registry
fcl-web
fcl-xml
fftw
fpmkunit
hash
ibase
libgd
mysql
numlib
odbc
oggvorbis
openssl
oracle
pasjpeg
paszlib
postgres
regexpr
sdl
sqlite
symbolic
tcl
unzip
winceunits
zlib

FCL을 디버깅 정보 포함하여 빌드하는 방법에 대한 포럼글이 읽었는데, 글 말미에 /usr/lib/fpc/2.2.0/units/ 에서 각 유니트에 대한 심볼릭 링크를 걸어주었다는 멋진 아이디어가 있었다. 윈도에서는 Junction 이 해법이 될 듯 한데... (강좌는 여기)... 시간 날 때 이 방법도 추가로 정리 해 보자.

일단 끄적 끄적 셸 스크립트를 만들어 두었다. 뭐 잘 동작하는군.
http://oranke.tistory.com/entry/MoveUnits

컴파일 옵션 -FU 를 사용하면 대상 폴더를 지정할 수 있다. 이걸 쓰면 귀찮은 스크립팅도 필요없어질 듯...

-FU<x>     Set unit output path to <x>, overrides -FE

OPT="-FUC:\Test" 이런식으로...

마지막으로 LCL을 빌드한다.

그 전에 해야 할 일이 하나 있는데, 사실 컴파일러는 실행파일을 만드는 여러 종류의 툴들 중 일부분일 뿐이다. 이 외에도 어셈블러, 링커 등 많은 도구들이 필요하며 이들을 일컬어 binutils 라고 부른다. 그런데 현재 대상 CPU가 i386이므로 binutils 는 라자루스 설치시 제공된 i386-win32 용을 그대로 사용할 수 있다. (사실 컴파일러도...^^) 현 시점에서 리소스 컴파일러인 windress.exe 만 Target-OS 용을 요구된다. 따라서 c:\lazarus\fpc\2.2.2\bin\i386-win32 에 있는 windres.exe 를 i386-wince-windres.exe 로 복사하면 아무 문제없이 LCL을 컴파일 할 수 있다.
(나중에 링커(ld.exe) 나 어셈블러(ar.exe)가 요구된다면 동일한 방법으로 복사 후 이름변경하여 사용하면 된다.)

cd C:\lazarus\lcl
make CPU_TARGET=i386 OS_TARGET=wince PP=ppcross386.exe


이제 컴파일러 옵션에서 Target CPU Family 를 i386 으로 설정하고 리빌드 한다. 




프로젝트 밑에 i386-wince 폴더에 생성된 실행파일을 Microsoft Windows CE 5.0 Emulator 로 옮겨 실행시켜보자. 잘 실행된다. 


 

일단은 여기까지. 라자루스가 만들어내는 후덜덜한 실행파일의 크기와 KOL-CE에 대해서는 여기에 주절거려 두었다.