닌텐도 DS 게임은... 원래 닌텐도에서 발급하는 라이센스를 취득한뒤에 게임 제작을 할 수 있습니다.
(물론.. PSP나.. XBOX 다 그런 시스템입니다)

허나.. 개 개인이 그런 라이센스를 받는다는거 자체가 불가능한 일이고.. 하지만 뭔가 만들고 싶고..
그런 분들을 위한 툴입니다

해외에선 많이 알려진, 널리 사용하는 devkitPro를 사용하여 NDS 프로그래밍 하는 방법을 알려드리겠습니다.

1. 우선 http://www.devkitpro.org/downloads/ 사이트로 들어가셔서 최신 devkitPro를 다운로드 합니다.

사용자 삽입 이미지

1-1. 클릭하면 sourceforge 로 들어가서 최신 버젼을 다운로드 할 수 있음.
사용자 삽입 이미지

2. 이제 다운로드 한 최신 프로그램을 설치 합니다.
사용자 삽입 이미지

2-1. 첫번째것을 선택해서 next
사용자 삽입 이미지

2-2. 그냥 next
사용자 삽입 이미지

2-3. 뭘 설치할지 묻는 화면입니다.
사용자 삽입 이미지
각각..
 minmal system : 리눅스와 같이 ls, gcc 뭐 이런 명령어들을 명령프롬프트창(dos창)에서 사용할 수 있게 합니다.
 devkitARM : 닌텐도 DS는 ARM프로세서를 사용합니다. 당연히 설치 합니다. 이외 국산 게임기인 gp32 등을 만질수 있는 gcc 도 제공합니다.
 devkitPPC : PocketPC ... 즉.. PDA 같은 시스템입니다. 의외로.. 닌텐도 게임큐브나.. 닌텐도 wil 컴파일도 있습니다
 devkitPSP : 말그대로 PSP 컴파일 입니다. 이걸로 PSP 컴파일 할 수 있습니다.
 Programmer's Notepad : IDE 툴입니다. 우리는 Visual Studio를 사용할 것 이므로 패스..
 Insight : 음... 디버깅 툴이랍니다.. 설치 합시다.

2-4. 설치 디렉토리를 선택합니다. 그냥 디폴트값을 두고 next
사용자 삽입 이미지

2-5. 인터넷으로 설치 파일을 다운로드 하고 있습니다...
사용자 삽입 이미지

2-6. 다 다운로드하면 자동 설치 합니다. 끝나면 next..
사용자 삽입 이미지

2-7. 설치가 완료되었습니다.
사용자 삽입 이미지


3. 그냥 저 상태에서 컴파일 해도 되지만. 좀더 쉽게 프로그래밍 하기 위해 라이브러리를 다운로드 합시다.
  가장 유명한 라이브러리는 PAlib 입니다.
  http://forum.palib.info/ 으로 들어가셔서 라이브러리를 다운합니다.
  참고로 저 사이트엔 라이브러리에 관한 튜토리얼도 제공되니 필히 읽어 보시기 바랍니다.
  (한국어 버젼도 있습니다)
사용자 삽입 이미지

4. 다운로드는 c:\devitpro 즉, 아까 devkitpro를 설치한 디렉토리에 다운로드 합니다.
사용자 삽입 이미지

5. 다운로드 한 파일을 알집을 통해 '현재 폴더에 풀기'로 압축 풉니다.
사용자 삽입 이미지

6. visual studio 에서 컴파일 할 수 있게 http://www.thechip.net/images/PALibAppWizard.zip 의 파일을 c:\devkitpro 에 다운로드 합니다. 그리고 이건 해당 파일명 폴더로 압축풉니다.
사용자 삽입 이미지

7. 압축을 풀면 아래와 같은 파일이 있는데, 각각 Visual Studio 2005 express 버젼과 Visual Studio 2005 버젼입니다. 자신의 환경에 맞게 설치 합니다. VSExpress 경우 MSDN 사이트에서 무료로 다운로드 할 수 있습니다.
이 파일은.. 오우거 엔진의 VS 연동 파일을 개조 했다고 합니다 :)
사용자 삽입 이미지


8. 설치가 완료 됬습니다. 이제 Visual Studio 를 실행시켜 봅니다.
사용자 삽입 이미지

9. 새 프로젝트 생성을 보면 NintendoDS 가 있습니다 >_<
 경로명 주의 사항을 잘 읽어보시고 셋팅해줍니다.
사용자 삽입 이미지

10. 별 내용 없습니다. Finsh 누릅니다.
사용자 삽입 이미지

11. 원할한 디버깅을 위해 예뮬레이터를 연결합니다.
   Tool -> External Tools (도구 -> 외부도구) 를 클릭합니다.
사용자 삽입 이미지

12. 가장 아랫줄... (9번째 줄 일껍니다) 를 아래와 같이 셋팅합니다.
사용자 삽입 이미지

Command : C:\devkitPro\PAlib\Emulators\no$gba\NO$GBA.EXE
Arguments : $(TargetDir)\$(TargetName).sc.nds
Inital directory : $(TargetDir)

C:\devkitPro\PAlib\Emulators에 들어가면 NDS 예뮬 프로그램이 많습니다.
하지만 가장 괜찮은건 No$GBA 라는군요. 다른걸로 사용해도 무방합니다.
단, No$GBA 경우 생성되는 파일의 *.sc.nds 파일을 업로드 해야 제대로 실행됩니다.

13. 계속.. 외부도구에 쉽게 접근하기 위해 단축키를 설정합니다.
Tool -> Option (도구 -> 옵션) 으로 들어갑니다.
사용자 삽입 이미지

14. 키보드 설정에 Tools (도구) 쪽의 외부도구 9번 (NDS 설정이 9번째 라인이므로 9번입니다. 다른 라인에 하셨으면 그거 에 맞는 번호를 찾으셔야 합니다)에 빨간 박스 해놓은곳에 키를 직접 눌러 셋팅합니다.
사용자 삽입 이미지

15. 이제 디버깅을 해봅시다. 에러가 생겼네요 >_<
사용자 삽입 이미지

16. 뭐가 문제인지 찾아가 봅시다.

extern inline u16 PA_GetBmpWidth(void *bmpdata){
 BMP_Headers *Bmpinfo = (BMP_Headers*)(bmpdata+14);
 return Bmpinfo->Width;
}
에서 void *bmpdata 가 갑자기 BMP_Header * 로 붙어서 문제가 생긴거 같습니다.
PA_GetBmpWidth(void *bmpdata) -> PA_GetBmpWidth(BMP_Headers*bmpdata) 로 변경합니다.

한군데 더 그런곳이 있는데, 거기도 똑같이 변경합니다.
사용자 삽입 이미지
사용자 삽입 이미지

17. 또 문제가 생겼네요.. 이번엔 arm7 라이브러리가 없답니다. 그러면.. 복사해 주면 간단해지겠죠
아까 devkitpro 설치한 디렉토리로 가셔서 palib 의 lib 디렉토리를 devkitpro/msys 에 복사합니다.

사용자 삽입 이미지

당연히 합칩니다. >_<
사용자 삽입 이미지

18. 다시 디버깅 해봅시다. 파일이 3개나 나왔습니다. 이러면 성공입니다.
사용자 삽입 이미지

19. 이제 아까 설정한 키를 눌러서 예뮬을 돌려 봅니다. Hello world 가 나오면 성공입니다
사용자 삽입 이미지

  1. 김진영 2008.09.03 16:36

    감사합니다. 해봄.

    • 김진영 2008.09.03 16:16

      갑자기 visual ~~~로 들어가라니요??????

  2. 장미전쟁 2008.09.03 17:34 신고

    여기서 설명하는 NDS 개발은,
    윈도우 환경에서 C언어를 가능한 친숙하게 짜는(많은 사람들이 사용하는) Visual Studio C++ 2005를 사용해서
    NDS 개발 하는 방법에 대해 알려드리고 있습니다.

    http://www.microsoft.com/express/2005/download/default.aspx
    위 사이트 가셔서 express 버젼(express 2005 버젼)을 설치 하신 후에 계속 진행 하시면 될 듯 싶습니다.

  3. 2008.12.02 17:06

    #include <stdio.h>

    void main()
    {
    printf("Hello World.!\n");
    }
    이거 한 쓰기가 저렇게 힘든건가 ..
    void 를 왜 다른거로바꾸죠 ?;; 어지럽네 .. 2005 버전 은 버그 마니없나요 6.0 쓰는데 자꾸 버그걸려서 다운되네요 ..;

    • 장미전쟁 2008.12.03 12:36 신고

      void main() 과
      int main() 은
      마지막에 리턴해주냐 마냐 차이 입니다.
      int main() 하면 마지막에 return 0; (혹은 1)을 해줍니다.

      왜 이런 귀찮은 짓을 하냐면..
      .. 관습 ;;;; 이어서 일지도요..

      중간에 프로그램을 짜다가 에러 처리 할때
      return -1; 등을 해서
      굳이 exit(0); 과 같은 함수 안써도 쉽게 종료 처리 할 수 있죠.

      뭐 void main() 하고 에러 처리 할때
      return ; 하면 안되냐 하실지도 모르지만..
      에러가 한두개도 아니니;;;

      int main() 하는게 여러모로 편하다 보니 저런거 씁니다 ;;;

  4. 2008.12.02 17:15

    근데 저 printf 도 아니고 cout 도 아니고 pa 어쩌구 저쩌구는 어떤거죠 ?;
    c++ 컴파일러에서 제대로 적고 닌텐도 컴파일러에서 그걸 닌텐도 에 맞게 컴파일해준다는건가 ;; 아직은
    더 열심해야지 ㅠㅠ

    • 장미전쟁 2008.12.03 12:45 신고

      PA_ ~~는 PAlib 입니다.
      NDS는 임베이드 장비이기 때문에
      우리가 일반 PC에서 프로그래밍 하는 C함수 그대로 갖다 붙인다 해서 제대로 작동하라는 보장이 없습니다.
      (Java 는 Java vm만 있으면 상관없습니다)

      왜냐면 CPU가 다른걸 쓰니까 그렇죠

      PC에서 printf 는 확실히 콘솔창에 무언가를 출력하는겁니다만.
      printf 문을 분석하면 화면 어디에 받은 텍스트의 해당되는 픽셀을 찍는 루틴이 있습니다.
      그리고 이게 화면에 나오고요

      NDS의 경우.. 프로그래밍 할때
      printf .. 됩니다. 다만 NDS LCD 화면에 나오지 않고 테스터 할떄 콘솔창 띄어서 디버깅 할떄 나오죠.
      (콘솔창 띄울수나 있으려나...)

      NDS LCD에 화면을 글자를 출력하기 위해서는 비디오 메모리에 글자 모습을 하게끔 픽셀을 찍어 줘야(on) 합니다.
      우선 메모리에 폰트 올려야 하고 (PA_InitText)

      그런 메모리 잡고 ㄱ 이면 메모리 어딘가에 수식계산으로 위치 찾아가서 픽셀값 써주는 짓을 함수로 만든게
      (PA_OutputSimpleText) 이고
      이 함수들은 PAlib 이기에 앞에 PA 가 붙습니다.

  5. 0201ssw 2009.01.22 19:59

    감사합니다 >-<

  6. 2009.02.02 14:28

    wii 홈브류 설정방법도 가르켜주심 감사하겠습니다 ㅜ.ㅜ

  7. 미치겠네..;;; 2009.03.13 23:29

    아낫!!!! visual studio c++ 2005 express를 깔고서 위에있는 뭐 이상한 문서처럼 생긴거 깐후에

    visual studio c++ 2005 express에 들어가봐도 nintendo DS라는 말이 안나오네요.... 어떻게 해결방법좀..;;;;

+ Recent posts