'2007/09'에 해당되는 글 3건

  1. 2007/09/20 sceIoDread by 키네낵
  2. 2007/09/17 PSPLink by 키네낵
  3. 2007/09/14 블로그 개설 by 키네낵

sceIoDread

Trial & Error 2007/09/20 23:51

sceIoDread

한번쯤 홈브류를 개발해 본 사람들이라면 알 것이다.

저 함수의 버그를...

저 함수의 버그는 크게 두가지가 있는데,

첫째로, 저 함수를 쓰기 전에 인자로 들어가는 sceIoDirent 구조체를 0으로 초기화해줘야만 한다. 무조건...

그렇지 않으면, PSP가 멈춰버린다. 이 버그를 알아내려고 얼마나 고생을 했던가...

그리고 둘째로, Shift-Jis외의 멀티바이트 케릭터를 지원안한다. 즉, 한글이나 한자 같은 문자를 못읽어 온다.

AsciiShift-Jis이외의 문자셋이 나오면 무조건 0x81 0xA1 [이는 sjis의 '■'에 해당한다] 을 반환한다.

난 내 코드에 문제가 있는 줄 알고, 이리 저리 살펴봐도 특별히 문제는 없었다.

그러던 차에, 때 마침 PSPLink를 알게 되어서 저 함수에 문제가 있다는 걸 알아버렸다.
(외국 포럼을 찾아보니 PSP로 개발하는 대부분의 사람들이 맨 처음에 저 문제에 직면한다고 한다...ㅋㅋㅋ)

첫째 문제는, 그냥 선언하지 않고 포인터로 선언한후, 메모리 할당을 통해 어느정도 해결한듯 보였지만, 이상하게 그 후로도 문제가 발생하게 되어 메모리 초기화까지 해서 간신히 막았다. (구조체를 0으로 memset)

밑에는 관련 코드...

sceIoDirent dirent;
memset(&dirent, 0, sizeof(sceIoDirent));

하지만 진짜 문제는 두번째였으니...

sceIoDread 함수는 레지스터에 인자만 전달하고 바로 시스템 콜로 연결되는데, (syscall 0x209c)

이건 뭐 어떻게 고칠 수가 없다. -_-;;

추가:

메모리스틱은 대부분 FAT 포맷을 따르는데, 디렉토리 엔트리에는 숏네임(8.3 형식)과 롱네임 형식(확장자 포함 최대 255자)이 있다.

긴 파일 이름을 표시하기 위해선 당연히 롱네임 엔트리를 읽어와야 한다.

그런데 이 롱네임 엔트리에는 파일 이름이 "UTF-16LE" 형식으로 저장이 되어 있어서,

각각에 맞는 문자셋으로 변환할 필요가 있다.

그런데 sceIoDread 함수는 Shift-Jis만 지원하는지, 범위에 벗어나는 문자셋은 ■로 반환해버린다.

아마 sceIoioctl 이란 함수를 조작해서 해결해 볼 수도 있을 것 같은데, 일단은 Fat 에 직접 접근해서 해결...

Posted by 키네낵

PSPLink

Debug 2007/09/17 22:12

PSP로 홈브류 개발을 하면서 가장 많은 시간을 소비하는 부분은 아마 버그를 잡는 일일 것이다.

필자도 처음에는 pspDebugScreenPrintf 를 일일히 사용해서
변수라던가 현재 위치를 표시하게 하여 대충 버그를 때려 잡았지만,
그 방법만으로 버그를 때려잡는 데는 시간이 상당히 많이 소모되었다.

PSP로 홈브류 개발을 하는 사람들도 많을 터 (비단 국내뿐만이 아닌...)
디버그를 할 수 있는 방법을 찾아보다가 PSPLink 를 발견했다.

여기에 따르면 PSP와 통신을 할 수 있는 방법은 총 3가지로 USB, 무선랜, 시리얼케이블이 있다.
이 중 시리얼 케이블은 특정 재료가 필요하기에 패스...

usb의 PSP 연결 모드는 Type AType B 두 가지이다.
이중 A는 이동식 저장소로 사용된다.
우리가 USB 연결을 할때는 이 쪽을 사용한다. (메모리스틱에 파일을 쓰거나 읽기 위해서...)
디버깅 할 때는 B를 사용하는데, 이 B를 사용할 동안은 A가 지원이 안된다.

위의 이유로 우선 무선랜부터 실험해보기로 했다. (무선랜 억세스 포인트[AP]가 있어야 한다.)
무선랜으로 어찌 저찌해서 연결까진 성공...
디버깅을 하려는데 debug 명령부터 막혀버렸다.
debug 명령을 먹이면 PSP와의 연결이 바로 끊겨버렸다.
몇번의 시도를 해도 안되길래 할 수 없이 USB를 선택해서 디버깅을 하기로 했다.

USB는 만족할 만한 결과를 보여줬다.
insight 를 실행 해본 결과 소스레벨의 디버그가 가능했다.
진작에 이렇게 디버깅할걸 하는 생각이 들었다.


아래는 그 화면, 후에 시간을 빌어 방법을 자세히 설명해 보겠다.

사용자 삽입 이미지

PSPLink로 연결한 상태에서, psp-insight를 실행한 화면. 어째서인지sceIoDread 부분에서 에러가 나길래 Mixed 모드로 추적하는 중...


Posted by 키네낵

블로그 개설

Misc. 2007/09/14 12:46

앞으로 PSP 개발과 관련된 글을 담아가겠습니다.
많은 분들이 PSP 홈브류 개발에 뛰어드셨으면 좋겠습니다. ^^;;

Posted by 키네낵