2007.11.14 15:14
     

00 NDS 홈브루 프로젝트 생성

원문 :  http://kkamagui.springnote.com/pages/415865

 

들어가기 전에...

 

1.필수 파일

 NDS 홈브루 프로젝트를 만들고 NDS 롬 파일을 생성하기위해서는 최소 2개의 파일과 1개의 폴더가 필요하다.

 필요한 파일은 Makefile과 Main.cpp 이고 필요한 폴더는 Source 폴더이다. 폴더 이름을 Source 말고 다른 것으로 하면 컴파일이 안된다. 그 이유는 makefile에 포함된 아래와 같은 내용 때문이다.

  1. ......
  2. TARGET  := $(shell basename $(CURDIR))
    BUILD  := build
    SOURCES  := gfx source data 
    INCLUDES := include build
  3. ......
  4. CFILES  := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
    CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
    SFILES  := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
    BINFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.bin)))
  5. ......

 위에서 보는 것과 같이 gfx, source, data 폴더 아래에 있는 전체 폴더를 돌면서 폴더가 아닌 *.c *.cpp *.s *.bin 파일을 찾도록 되어있기 때문이다. makefile에 대한 자세한 내용은 00 NDS makefile 분석 파일을 참조하도록 하자.

 

 만약 NDS 홈브루 개발을 위한 최소한의 파일과 폴더만을 이용해서 구성한다면 아래와 같을 것이다.

최소프로젝트1.PNG    최소프로젝트2.PNG

<홈브루 생성을 위한 최소한의 파일 및 폴더>

 

2.main.cpp 및 기타 파일 구성

  main.cpp에 있는 내용은 examples 폴더에있는 Helloworld 예제로 복사해넣었다. 만약 다수의 프로젝트 파일이 있다면 위에서 언급한 폴더에 넣거나 그 하위 폴더를 생성해서 넣으면 된다.

  1. /*---------------------------------------------------------------------------------
  2.  $Id: main.cpp,v 1.7 2006/06/18 21:32:41 wntrmute Exp $
  3.  Simple console print demo
     -- dovoto
  4.  $Log: main.cpp,v $
     Revision 1.7  2006/06/18 21:32:41  wntrmute
     tidy up examples
     
     Revision 1.6  2005/09/16 12:20:32  wntrmute
     corrected iprintfs
     
     Revision 1.5  2005/09/12 18:32:38  wntrmute
     removed *printAt replaced with ansi escape sequences
     
     Revision 1.4  2005/09/05 00:32:19  wntrmute
     removed references to IPC struct
     replaced with API functions
     
     Revision 1.3  2005/08/31 03:02:39  wntrmute
     updated for new stdio support
     
     Revision 1.2  2005/08/03 06:36:30  wntrmute
     added logging
     added display of pixel co-ords
  5. ---------------------------------------------------------------------------------*/
    #include <nds.h>
  6. #include <stdio.h>
  7. volatile int frame = 0;
  8. //---------------------------------------------------------------------------------
    void Vblank() {
    //---------------------------------------------------------------------------------
     frame++;
    }
     
    //---------------------------------------------------------------------------------
    int main(void) {
    //---------------------------------------------------------------------------------
     touchPosition touchXY;
  9.  irqInit();
     irqSet(IRQ_VBLANK, Vblank);
     irqEnable(IRQ_VBLANK);
     videoSetMode(0); //not using the main screen
     videoSetModeSub(MODE_0_2D | DISPLAY_BG0_ACTIVE); //sub bg 0 will be used to print text
     vramSetBankC(VRAM_C_SUB_BG);
  10.  SUB_BG0_CR = BG_MAP_BASE(31);
     
     BG_PALETTE_SUB[255] = RGB15(31,31,31); //by default font will be rendered with color 255
     
     //consoleInit() is a lot more flexible but this gets you up and running quick
     consoleInitDefault((u16*)SCREEN_BASE_BLOCK_SUB(31), (u16*)CHAR_BASE_BLOCK_SUB(0), 16);
  11.  iprintf("      Hello DS dev'rs\n");
     iprintf("     www.devkitpro.org\n");
     iprintf("   www.drunkencoders.com");
  12.  while(1) {
     
      swiWaitForVBlank();
      touchXY=touchReadXY();
  13.   // print at using ansi escape sequence \x1b[line;columnH
      iprintf("\x1b[10;0HFrame = %d",frame);
      iprintf("\x1b[16;0HTouch x = %04X, %04X\n", touchXY.x, touchXY.px);
      iprintf("Touch y = %04X, %04X\n", touchXY.y, touchXY.py);  
     
     }
  14.  return 0;
    }

 

 

3.실행

 00 NDS 개발 킷(Devkit Pro) 설치 에 나와있는 컴파일 및 링크 방법을 이용해서 NDS 롬파일을 만들고 iDeaS에서 실행한 결과이다.

최소프로젝트3.PNG

 

4.마치며...

 makefile이 상당히 편리하게 되어있는 관계로 그리 어렵지않게 새 프로젝트를 생성할 수 있었다. 이제 홈브루의 세계로 빠져보자. @0@)/~

 

이 글은 스프링노트에서 작성되었습니다.

Mittm

Android App

Posted by kkamagui

댓글을 달아 주세요

  1. ㅋㅋㅋ 2009.03.01 00:15 신고  댓글주소  수정/삭제  댓글쓰기

    근데 저 Makefile 이라는 파일은 어디에 있는 건가요? 만드는 거라면 어디서 만드는 건가요?

    • Favicon of http://www.mint64os.pe.kr BlogIcon kkamagui 2009.03.01 00:54 신고  댓글주소  수정/삭제

      devkitPro가 설치된 폴더에 보시면 devkitPro/examples/nds/templates 아래에 있습니다.
      따로 만드는 것은 아니고 있는 프로젝트 파일을 그냥 쓰는 것이지요 ;)

  2. tseug 2009.12.16 12:39 신고  댓글주소  수정/삭제  댓글쓰기

    친구 생일이길래.. 간단히, 친구이름을 쓰면,
    생일축하하다고 그림과 글이나오는 간단한 프로그램을 작성해봤네요..^^; (소스 짜집기를 통해서 -_-;)
    덕분에, 많은 도움됬습니다.
    감사합니다.^^;

    아참, 에뮬쪽에서 구동이되면.. DS 에서도 구동이 된다는 소리겠죠?.. (

  3. 초류 2011.07.25 15:15 신고  댓글주소  수정/삭제  댓글쓰기

    흐어;; 이거 뭘 해도 빌드 에러가...


    > "make"
    main.cpp
    arm-eabi-g++ -MMD -MP -MF /c/devkitPro/examples/dnd/build/main.d -g -Wall -O2 -march=armv5te -mtune=arm946e-s -fomit-frame-pointer -ffast-math -mthumb -mthumb-interwork -I/c/devkitPro/examples/dnd/include -I/c/devkitPro/libnds/include -I/c/devkitPro/examples/dnd/build -DARM9 -fno-rtti -fno-exceptions -c /c/devkitPro/examples/dnd/source/main.cpp -o main.o
    c:/devkitPro/examples/dnd/source/main.cpp: In function 'int main()':
    c:/devkitPro/examples/dnd/source/main.cpp:80:2: error: 'SUB_BG0_CR' was not declared in this scope
    c:/devkitPro/examples/dnd/source/main.cpp:90:86: error: 'consoleInitDefault' was not declared in this scope
    c:/devkitPro/examples/dnd/source/main.cpp:102:11: warning: 'touchPosition touchReadXY()' is deprecated (declared at c:/devkitPro/libnds/include/nds/arm9/input.h:75) [-Wdeprecated-declarations]
    c:/devkitPro/examples/dnd/source/main.cpp:102:23: warning: 'touchPosition touchReadXY()' is deprecated (declared at c:/devkitPro/libnds/include/nds/arm9/input.h:75) [-Wdeprecated-declarations]
    c:/devkitPro/examples/dnd/source/main.cpp:107:55: error: 'touchPosition' has no member named 'x'
    c:/devkitPro/examples/dnd/source/main.cpp:109:45: error: 'touchPosition' has no member named 'y'
    make[1]: *** [main.o] Error 1
    "make": *** [build] Error 2

    > Process Exit Code: 2
    > Time Taken: 00:01

  4. 초류 2011.07.25 15:17 신고  댓글주소  수정/삭제  댓글쓰기

    아.. 이젠 에러는 안나는데 빌드가 아예 진행되질 않네요

  5. 초류 2011.07.25 15:24 신고  댓글주소  수정/삭제  댓글쓰기

    메이크 파일이 제대로 되지 않아서 그런듯 한데... 어떻게 만질수가 없네요 ㅠㅠ

    // 추가
    아... 내부함수가 많이 바뀌어서 그런거 같아요...

    • Favicon of http://www.mint64os.pe.kr BlogIcon kkamagui 2011.07.27 01:21 신고  댓글주소  수정/삭제

      헛...어떻하죠? ㅠㅠ

      NDS를 팔아버려서 더이상 진행을 해볼수가 없군요. ㅠㅠ

      devkitPro의 최신 Tutorial을 따라가시기 바랍니다. ^^