이글은 제가 네이버블로그에 올렸던 글을 TISTORY로 옮겨온 글입니다.
네이버블로그의 글은 삭제되었습니다. :-)
퍼가실때에 출처는 본 티스토리 블로그주소(http://ratedr.tistory.com) 로
해주시기 바랍니다.

")//]]>
 

less..

이번 홈브류는 안타깝지만, NDS(or NDSL)외에도 몇개 더 준비물이 필요합니다.
일단, 이 홈브류의 장점은 '인터넷이 가능하며, 한글브라우저도 가능하다'이며 단점은 '컴퓨터없인 아무것도 못한다'입니다.
그래도 있으면 언젠가는 유용하게 쓸수 있을겁니다.(친구집에서 컴퓨터는 1대인데 같이 자료를 뒤적거릴 필요가 있을때라던가...
과제를 위해 인터넷 자료를 인용중 모니터보고 하긴 목이 아프다던가...)
윈도우용뿐만 아니라 MAC용도 있습니다만, Mac용은 제작자홈페이지에서 다운 받으시기 바랍니다.
 
홈브류이름 :DShobro 0.3 ver
 
제작자정보 : http://costello.dev-fr.org 
 
필요한것들 : NDS,홈브류 구동이 가능한 칩, 무선 네트워킹이 가능한 PC
                 (Mac용은 제작자 홈페이지에서 다운로드 바람)

다운로드   :

↑두드리라, 그러면 열리리라!


 
사용법       : 1. PC에서 압축을 풀고 server.exe를 실행한뒤,
                     start를 클릭합니다.
                  2. NDS의 메모리카드 (가급적 루트폴더)에 자기 기기에 맞는
                     nds파일을 넣습니다, 이때 dldi패치는 하지 않습니다.
                  3. NDS를 구동하여 홈브류를 실행시키면 됩니다, a버튼은
                     자동접속 b는 수동접속입니다.
                     가급적 자동접속으로 하시기 바랍니다.
 
기타정보    : - 접속에 문제가 있을경우 PC의 '보안설정' 및 공유기의
                     '보안설정'을 풀어주시기 바랍니다.(방화벽이나 네트워크
                    감시 등)
                  - 자동접속이 안될경우 pc의 ip및 포트를 수동으로 입력해보시
                    기 바랍니다.(ex 111.222.0.333:666)
                  - NDS에서 자체적으로 브라우저가 구동되는것이 아닌, PC에서
                     캡쳐한 장면을 NDS로 전송하는 프로그램입니다.
                     즉,검색한 자료 및 인터넷 접속은 PC로 이뤄지고, 화면만 NDS
                     로 나오는것입니다.
                    그러므로 팝업등이 뜨는 사이트의 경우 PC에 팝업창이 뜰수가
                    있으며 이는 PC오류가 아닙니다.
                    또한 이러한 이유로 절대 pc없이는 사용못하겠죠, 버젼업이 된
                    다고 해도...
 
[퍼가실때는 출처를 밝혀주시기 바랍니다]
http://ratedr.tistory.com
사용자 삽입 이미지

NDS를 분석할때 작성했던 Bmp 변환 툴입니다.
음.. 인터페이스를 최대한 직관적으로 했기에 어려울건 없다고 생각됩니다.. (어이...)

OAM NDS에서 H/W로 지원하는 스프라이트 전용 처리기입니다.
이미지 처리형식은 256BG출력과 크게 다르지 않습니다
.

   

   

정사각형

8x8, 16x16, 32x32, 64x64

직사각형

16x8, 8x16, 32x8, 8x32, 32x16, 16x32, 64x32, 32x64

OAM의 크기는 의 정사각형 모델과 직사각형 모델을 지원합니다.
색은 16, 256색만 사용합니다. 한 화면에 오브젝트는 최대 128개로 제한됩니다.


OAM
은 투명색을 기본 지원하고 (팔레트 0) H/W 지원을 받아 스프라이트의 확대, 축소, 대칭, 반전,모자이크 처리등을 신속히 그리게 됩니다.

OAM
을 화면에 출력할 때 약간 제약이 따릅니다.

우선 Object의 컬러는 256, 16색 밖에 사용이 안되며, 1화면에 128개의 OAM
띄울 수 있습니다
.

기본적으로 OAM Image의 프레임 방식은 아래와 같은 구조입니다.

OAM Image

 

사용자 삽입 이미지

0x00

0x10

0x20

0x30

0x40

0x50

0x60

0x70

0x80

0x90

0xA0

0xB0

0xC0

이 곳을 왼쪽 그림처럼, 스프라이트를 지정해준다음,
(
가로 방향 이미지는 깨짐, 세로 이미지로 스프라이트 이미지를 생성)

32x32 스프라이트 이미지일 경우 0x10 (16)씩 띄어주면 다음 프레임이 찍힙니다.

tile(8x8) 개념으로 보면 총 16타일이 1 프레임이기 때문입니다.
만약 64x64 이미지 타일이면, 다음 프레임을 찍기 위해선 (8x8=64=0x40),

0x40씩 띄어야 합니다. (경우에 따라선 한프레임이 128byte로 떨어져 있음)


사용자 삽입 이미지

타일 개념으로 접근

(위의 크기는 32x32, 타일로 보면 4x4 = 16 = 0x10).

여기에 다음 스프라이트를 추가 하려면, 0xD0위치부터 넣으면 됩니다.

OAM을 출력하는 방법은

1. OAM 버퍼 생성
2. OAM 초기화
3. OAM 로드
4. OAM 출력될 판넬 지정
5. OAM 배치
6. OAM 출력 입니다.

사실 위의 15bit 그림 그리는건 게임의 OP, ED, Title, Event 그림 이외엔 전혀
쓸모가 없다고 생각합니다
. 게다가 H/W 제한상(SDK 제한도 있습니다)
15bit
그림을 위아래 화면 동시 띄우는것이 힘듭니다
.

2화면 동시에 그리고 하드웨어적인 속도를 보장받기 위해 256컬러를 사용합니다.
256
컬러 이하는 24bit구조와 차이점이 있고, 우리가 필요로 하는 데이터는 아래
그림과 같습니다
.

사용자 삽입 이미지

위의 구조에서 중요한건 팔레트 데이터 입니다.
팔레트 데이터를 위의 24bit RGB 15bit RGB 다운 시킨 것처럼 비트 다운
시켜 주면 됩니다.


#define RGB15(r,g,b) (u16)(r|g<<5|b<<10) // RGB 15bit 변환 컬러

여기서, 팔레트 데이터가 흰색~검은색 까지 모든 색상의 대표색 256개가 지정된 것이 아니고
, 그림에서 사용하는 대표적인 256색만 사용합니다.

DS
에서 256BG를 띄우는데 3가지 데이터가 필요합니다.

Data

역 할

자료형

픽셀(타일)데이터

해당픽셀에 어떤색이 들어가는지 가르키는 값

u8

팔레트 데이터

이 그림에서 사용하는 색

u16

맵 데이터

위의 그림을 타일로 쪼개서 중복을 최대한 피하는 data

u16

 

각각 데이터에 따른 설명으로

Data

설 명

픽셀(타일)데이터

PC BMP파일의 픽셀 데이터를 그대로 옮기되, 출력을 8x8 tile형식으로 맞춰서 u8 데이터 형식, unsigned char 형식으로 맞춰야 합니다

팔레트 데이터

PC BMP파일의 팔레트 데이터를 옮겨오되, 위에서 설명했듯, NDS 최대 컬러수인 RGB15bit를 맞추기 위해 원래 24bit 팔레트 컬러를 각각 3bit bit down 시켜 줍니다

맵 데이터

사용자 삽입 이미지


NDS그림 H/W 그림 처리 방식은 독특한 방식으로 되어있습니다



위 그림은 NDS에서 그림처리를 하는 방식을 보여주는 극단적인 예라 할 수 있습니다. 격자모양의 사각형이 1개의 타일입니다.
맨 좌측 상단부터 1tile로 들어가며, 256x192 그림의 경우 32x24 타일로 구성이 됩니다
.
타일 구성의 이유는 위 그림에서 보듯 선택된 영역

(
노란, 청색 테두리 타일)이 단 2Tile로 처리가 가능하기에 별 다른 알고리즘 없이 압축효과를 볼 수 있습니다
그리고 이 맵 데이터를 조작함으로서 그림 스크롤 및 여러 효과를 나타내는것이 가능합니다.

 

타일 개념이 생소한 개념이므로 좀더 추가 설명을 하겠습니다.


사용자 삽입 이미지

위의 모자이크 같은 부분(64x64픽셀) Data 형식

extern const u8 sp_data[4096] = {

//Tile number 0

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,

 

//Tile number 1

0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,

0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,

0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,

0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,

0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,

0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,

0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,

0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,
//
이하 중략

//Tile number 62

0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,

0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,

0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,

0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,

0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,

0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,

0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,

0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,0x3E,

 

//Tile number 63

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,

 

};

 

위의 Data소스 sp_data[x]는 그림 픽셀 좌표입니다.
Tile number의 픽셀 Data 뭉치는 PC BMP파일로 따지면 1Line 입니다.
(
그림이
64x64)
하지만 NDS의 그림 로드는 위의 소스처럼, 8x8의 한 타일을 먼저 찍고,
그 다음 옆으로 이동하는 것을 알 수 있습니다.

 

 

BG를 띄우는 순서는
1. VRAM 초기화
2. BG올라갈 VRAM 할당
3. 해당 메모리 번지로 그림 픽셀 데이터 올림
4. 팔레트 데이터 올림
5. 픽셀 데이터를 조합해서 만드는 맵 파일을 올림
6. 출력될 BG 선택
   - 여려 효과 등은 BG2,3에서 지원

기서 투명색에 관해서 입니다. 투명색은 0번 팔레트를 사용합니다.
, 256컬러를 사용하기 보다는 투명색을 염두해서 255컬러를 사용하는 것이 현명하다고 생각합니다
.

포토샵등 툴에서 이런 제약을 가할 수 있으므로 그래픽 처리할 때 이점을 주의하는 것이 좋다고 생각합니다

Sub 출력은 Main LCD와 크게 다를것이 없습니다.
하지만 최대 128KB(VRAM_C) 만 할당이 가능하고,
(MAIN LCD
VRAM_ ABCD, 512KB 가능
)
약간 함수명이 다를뿐 크게 차이가 있지 않습니다.

+ Recent posts