계속 해서 세번째 글을 올립니다.
이전글은 아래 link를 이용하세요

원래는 짧게 설명 될듯 생각 했는데 - 글을 작성하다 보니 의외로 길어 졌습니다.
그냥 patch data만 올려도 되겠지만, 나름의 뒷구멍 파시는 분에게 혹시나 참고 자료가 될듯 하여 자세히 기술하다보니 많이 길어 졌습니다.


[2011-01-25]
맵피고(맵피Go . MappyGo) 관련 패치는 아래 URL로 이동 하세요.


지난글에서 해결한 사항은 아래와 같습니다.
첫번째글: Mappy 실행 후 첫 지도 화면 보이기
두번째글: GPS정보 화면 제대로 보이기

나머지 해결해야 할 문제: GPS 인식 직후 화면 먹통 문제

오늘은 마지막으로 "GPS 인식 직후 제대로 보이기" 입니다.
이미 지난글에 언급했듯이 GPS 인식 후 문제도 결국 두번째글에서 해결한 사항과 동일합니다.
맵피는 하나의 window에 대해서 지도도 보이고 dialog box도 보입니다 그런데 어떤 상황에서 이 공용 window의 크기가 뒤틀려 버리고, 이후로는 지도를 영영 볼수가 없는게 문제의 핵심이었습니다.

그럼 이미 지난 글에서 해결책으로 사용한 MoveWindow 관련 동작이 문제의 핵심이라 생각 할 수 있습니다.
무작정 MoveWindow를 검색 해 봅니다. IDA에서 MoveWindow 호출 부분에서 'X' 키를 누르면 모든 MoveWindow 호출 위치가 짠~ 하고 나타 납니다.
다행이 모두 6곳만이 있습니다. 전체 code에서 단지 6개면 시도 해 볼만한 게임입니다!

그 중에 한곳(맨 먼저 등장)은 이미 지난글에서 패치한 그 부분 입니다.
그래서 후보군은 5개로 좁혀 집니다.

쭉 정리하면 아래와 같습니다. [MoveWindow 호출 부분 6곳]
이미 MoveWindow 기능은 이전글에서 파악 했기에, 쭉 나열하고 부차적으로 설명 하겠습니다.
실은 아래 내용은 제가 삽질 하면서 기록한 내용을 거의 그대로 가져 왔습니다.
이런 일에는 모든 작업을 기록을 해 두어야 좀 쉽습니다.(머리가 나빠 하루 지나면 까먹는다는 ㅎㅎ)
MoveWindow는 단지 6개 부분에서 호출 됨

[1] MAIN_DIALOG_GPS_INFORMATION:loc_277A8 --> 완료!: GPS정보 - Dialog box 부분 참조
       BL   MoveWindow   --> 이미 수정한 부분
원본:  A7 23 08 EB 01 10 A0 E3
수정:  00 00 80 E3 01 10 A0 E3

[2] sub_4AAC8+54 : 무언가 중요해 보임 - 이 함수 호출 후 / Update window 부르는 함수확인
      .text:0004AB1C  BL  MoveWindow    부분을 NOP 처리 해 보자
      ORRR1, R1, #0   00 10 81 E3 로 설정 하기
원본:  CA 96 07 EB 28 D0 8D E2 70 80 BD E8
수정:  00 10 81 E3 28 D0 8D E2 70 80 BD E8

[3] sub_DA550+44 : 이넘도 뭔가 수상함 - GetTickCount 부분에서도 호출 됨
      특히 EualRect 등으로 확인 후 이 함수를 호출하고 있음.
      ORRR1, R1, #0   00 10 81 E3 로 설정 하기
원본:  2C 58 05 EB 08 D0 8D E2 10 80 BD E8
수정:  00 10 81 E3 08 D0 8D E2 10 80 BD E8


아래 3개는 동일 함수내에 즉 같은 의미의 MoveWindow 호출 (3 case에 따른 중복 호출)
 ----> 원본 code를 똑똑하지 않게 작성 했다는 의미입니다. ['도배' 했다는 거죠 ㅋㅋ]
패치 하지 말것 - 최초 Intro 화면에 대한 가로/세로 변환임 - 그냥 두어야 가로로 인트로가 나옴!
 -----> ORR  R0, R0, #0   00 00 80 E3

[4] sub_1F9810+184 : Main Frame window title text 등을 설정 하는 듯 - 이넘에 관심 가지자!
BL      MoveWindow
원본:  2C DB 00 EB 00 00 96 E5
수정:  00 00 80 E3 00 00 96 E5

[5] sub_1F9810+1EC :
BL      MoveWindow
원본:  12 DB 00 EB 00 00 96 E5
수정:  00 00 80 E3 00 00 96 E5

[6] sub_1F9810+248 :
BL      MoveWindow
원본:  FB DA 00 EB 00 00 96 E5
수정:  00 00 80 E3 00 00 96 E5

자~ 마직막을 달려 가고 있습니다.

[1]은 이미 이전글에 패치를 하여 GPS정보 dialog를 제대로 보이게끔 완성 했습니다.
나머지 MoveWindow를 모조리 없애 버리고 확인 하면 좋겠지만... 무언가 삑사리가 발생하겠죠.

그래서 아래와 같이 패치를 종류별로 나열 했습니다.
당연 [1]번 패치 까지 설정한 상태에서 아래의 2가지 조합을 먼저 처리해서 test 해 봅니다.

1. [2]번 패치 적용
실행 했습니다. GPS 인식도 해 보았습니다.
넵! 아무런 문제가 없이 동작 완료 했습니다. 끝을 봤다고 할까요

2. [3]번 피치 적용
실행 했습니다. 그런데 320x240 화면이 세로로 중앙에 표시가 되더군요 ㅋㅋㅋ
넵! 실행에는 문제가 없습니다. 그런데 Title / Softkey가 아래에 있는 app.의 것이 보이기 때문에 조작 실수가 발생 할 듯 하여 - 이 버전을 사용 안하는게 좋을 듯 합니다.


그리고~ 나머지 [4], [5], [6]은 셋트 메뉴이므로 [2][4][5][6] 과 [3]
[4][5][6] 두개를 비교 해 보았습니다.
바꾼것은 Intro 화면이 가로가 아닌 세로로 나오더군요 ㅋㅋㅋ
넵 그래서 최종적으로 [2]번 사항만 적용 하면 된다는 것이 결론입니다.

그런데 이 [2] 패치 하면서 맵피 동작을 살펴 봤는데 - GPS 인식 직후에 화면이 1dot 정도 구성이 달라 지더군요 - 각족 button이 1pixel인가 위로 올라 갑니다. 즉 화면에 대해서 이상한 짓을 한다는 것이 제 눈에 보였고 - 결국 MoveWindow가 그 단서라는 것은 이 현상을 보고서도 확인이 된 것이죠.


자 이제 끝입니다... 최종 정리 하겠습니다.
글이 길어서 어떻게 패치 하라는 것인지 헷갈릴 듯 하여... 최종 종합 정리 입니다.



320x240 강제 설정 패치 부분
"차례"  "파일offset"
     [ 원본 hex code ]  --> [ 수정 hex code ]

1  0x038684
   [ F9 9C 07 EB ] --> [ 05 0D A0 E3 ]

2  0x038694
   [ F5 9C 07 EB ] --> [ F0 00 A0 E3 ]

3  0xC97E0
   [ A2 58 05 EB ] --> [ 05 0D A0 E3 ]

4  0xC97F0
   [ 9E 58 05 EB ] --> [ F0 00 A0 E3 ]

5  0xCA8C4
   [ 69 54 05 EB ] --> [ 05 0D A0 E3 ]

6  0xCA8D4
   [ 65 54 05 EB ] --> [ F0 00 A0 E3 ]



GPS정보 dialog 제대로 보이게 패치
  [ A7 23 08 EB 01 10 A0 E3 ] ---> [ 00 00 80 E3 01 10 A0 E3 ]



GPS 인식 직후 화면 제대로 보이게 패치
  [ CA 96 07 EB 28 D0 8D E2 70 80 BD E8 ]   ---> [ 00 10 81 E3 28 D0 8D E2 70 80 BD E8 ]



[안내]
아래 제공되는 파일은 맵피 PDA 라이센스를 소유 하고 있으나 M&Soft 에서 이해할 수 없는 정책을 주장하여 M480, M4800 에서는 사용 할 수 없는 호환성을 해결하고자 개인적으로 만든 파일 입니다.
관련 법을 준수하시기 바랍니다.
컴퓨터프로그램 보호법 - 역분석 관련 법

제12조의2 (프로그램코드역분석)
①정당한 권원에 의하여 프로그램을 사용하는 자 또는 그의 허락을 받은 자가 호환에 필요한 정보를 쉽게 얻을 수 없고 그 획득이 불가피한 경우 당해 프로그램의 호환에 필요한 부분에 한하여 프로그램저작권자의 허락을 받지 아니하고 프로그램코드역분석을 할 수 있다.
②제1항의 규정에 의한 프로그램코드역분석을 통하여 얻은 정보는 다음 각호의 1에 해당하는 경우에는 이를 사용할 수 없다.
   1. 호환 목적외의 다른 목적을 위하여 이용하거나 제3자에게 제공하는 경우
   2. 프로그램코드역분석의 대상이 되는 프로그램과 표현이 실질적으로 유사한 프로그램을 개발·제작·판매하거나 기타의 프로그램저작권을 침해하는 행위에 이용하는 경우
      [본조신설 2001·1·16][[시행일 2001·7·17]]

이 파일을 이용해서 맵피를 사용 하기 위해서는
반드시 맵피 PDA 라이센스를 소유 하고 있으며, 또한 Mappy 전체 이미지를 정상적으로 download하신 분 만이 사용이 가능 합니다.

여기서 안내드리는 내용은 직접 patch를 할 수 있는 정보와 patch용 요약자료만 공유 합니다.
패치 프로그램과 Mappy라이센스, Mappy 인스톨 파일은 개인 소유의 것을 이용하셔야 합니다.


Patch 파일은 Free software인 VPatch 를 사용 했습니다. Google 등의 검색엔진을 이용하셔서 개인이 구하셔야 합니다.
이 프로그래과 제공하는 data를 이용하여 발생하는 법적인 문제에 대해서는 사용하는 당사자들의 책임임을 밝혀 둡니다.

아래 파일에 대해서는 그 어떠한 질문에 대해서도 답변을 드리지 않습니다.

패치요약 파일:
위 파일은 VPatch 라는 프로그램을 설치하고난 뒤에 전용 프로그램을 이용하시면 됩니다.
*당연히 Mappy 5.5.1 버전 원본이 있어야 합니다.
*Patch 실행 법은 VPatch 설명서를 참고 하세요.
 
VPATCHPROMPT.EXE (patchfile) (sourcefile) (outputfile)




** 반드시 RealVGA 혹은 ForceHires 유틸리티를 사용 하셔서 96 dpi 모드로 실행 하셔야 합니다.

** 그리고 그냥은 GPS연결이 제대로 안됩니다.
꼭 GpsGate등의 유틸리티로 새로운 포트를 할당하고, Mappy는 그 포트를 이용 하도록 하셔야 합니다.
이 부분은 맵피의 버그라고 봅니다. 예전 M4300 사용 때에도 부팅 직후 GPS연결하면 먹통이 되었습니다.
** 상황에 따라 맵피가 먹통 됩니다.(아주 간혹 발생) 이 경우 다시 부팅하고서 실행 해야 하더군요.
역시 맵피 자체의 문제로 인식이 됩니다.


실행화면 캡쳐 내용입니다.


















.

+ Recent posts