우선
http://rosagigantea.tistory.com/280 로 인해 생성되는 소스입을 밝힘니다.

소스는 아래와 같이 되어있습니다.
///////////////////////////////////////////////////////////////
// PALib Template Application

// Includes
#include <PA9.h>       // Include for PA_Lib

int main()
{
 PA_Init();    // Initializes PA_Lib
 PA_InitVBL(); // Initializes a standard VBL

 PA_InitText(1, 2);
 PA_OutputSimpleText(1, 1, 2, "Hello World!");

 // Infinite loop to keep the program running
 while (1)
 {
  PA_WaitForVBL();
 }
 
 return 0;
}
///////////////////////////////////////////////////////////////

음.. C언어의 HelloWorld 보다 많이 어렵네요..
뭔가 함수 안에 숫자가 얽겨있고...

참고로 C언어에선

#include <stdio.h>

int main()
{
   printf("Hello World\n");

   return 0;
}


인것에 반해서 많이 복잡하단 느낌이 드네요.

어쨋든 저 위의 소스를 좀더 쉽게 바꿔봅시다.
///////////////////////////////////////////////////////////////
#include <PA9.h>       // Include for PA_Lib

#define UP_SCREEN 1
#define DOWN_SCREEN 0

#define BG0   0
#define BG1   1
#define BG2   2
#define BG3   3

int main()
{
 PA_Init();    // Initializes PA_Lib
 PA_InitVBL(); // Initializes a standard VBL

 PA_InitText(UP_SCREEN, BG2);
 PA_OutputSimpleText(UP_SCREEN, 1, 2, "Hello World!");

 // Infinite loop to keep the program running
 while (1)
 {
  PA_WaitForVBL();
 }
 
 return 0;
}

///////////////////////////////////////////////////////////////
음... 단지 define 좀 해놓으니 보기가 편해지네요

우선...
PA_Init();    // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL

이 부분....
NDS 는... OS 가 없습니다. 불행히도....
소프트웨어는 하드웨어와 직접 컨트롤 하지 않고 운영체제에 중계 하여 컨트롤 하는것이 이 세계의 상식입니다.
하지만.. 임베이드 장비는.. 리눅스만 올려도 감지덕지죠.
하지만, 리눅스 올리면 당연히 여러 어플리케이션을 돌릴 수 있고, 속도도 느려지므로, 대부분은 OS가 없습니다.

그럼... 메모리 컨트롤 이나.. 자원 관리는 어떻게 할까요?
이런 임베이드 장비는 대부분 자원관리 API를 제공하고 있으며, 그런 걸 먼저 실행시키고 나서 프로그램을 돌려야
이상없이 프로그램이 실행이 됩니다.
그 API 가.. 저 2줄로 보시면 됩니다.

다음 줄을 봅시다.
 PA_InitText(UP_SCREEN, BG2);
 PA_OutputSimpleText(UP_SCREEN, 1, 2, "Hello World!");


음.... #define 으로 UP_SCREEN, DOWN_SCREEN을 해두는것이 편합니다. 가독성이 좋으니까요
NDS는 말 그대로 스크린이 2개 입니다. 위에 출력할지 아래에 출력할지 알려줘야 하죠
우선. InitText 로 글꼴을 메모리에 올립니다.
NDS의 비디오 램은 총 640kb 이고, 이 메모리로 두 스크린을 표현합니다.
비디오 렘 자체에 숫자를 넣으면 그것에 해당되는 색이 lcd에 표현되는 방식이죠....
이건.. 좀 복잡하니 http://rosagigantea.tistory.com/75 를 참고해 주시기 바랍니다.

어쨋든 PA_InitText(UP_SCREEN, BG2)는 텍스트 폰트 그림을 BG2 영역 (BG는 각각 4개 띄울수 있습니다.)에 업로드 하고
PA_OutputSimpleText(UP_SCREEN, 1, 2, "Hello World!"); 명령어로 (1,2) 그림이 폰트 크기 기준으로
Hello World 를 찍습니다.

다음...
 // Infinite loop to keep the program running
 while (1)
 {
  PA_WaitForVBL();
 }

여기는 게임 루프 입니다.
PA_WaitForVBL() 중요한 함수 입니다. 이 함수는 스크린 프레임을 60fps 로 맞춰주고, 인터럽트 처리를 담당하는
함수 입니다. 이걸 써주지 않으면 그림이 이상하게 출력되는등 이상현상을 보실 수 있습니다.


음.. 이렇게 Hello World 를 분석했습니다. 다음엔 게임기 답게 그림을 띄어 보겠습니다.

신고
블로그 이미지

프로그래머 지향자 RosaGigantea

바쁜 일상 생활중의 기억 장소

티스토리 툴바