'NDS Inside'에 해당되는 글 10건
2007/10/30 12:12
목차
목적#
libfat를 이용해 만든 homebrew를 no$gba 에뮬레이터에서 동작시키는 방법.
참조링크#
http://forum.gbadev.org/viewtopic.php?p=114090&highlight=fcsr+dldi#114090
http://forum.gbadev.org/viewtopic.php?t=12654
Utilities#
padbin#
devkitPro/devkitARM/bin/padbin.exe
fscr.dldi#
http://gpf.dcemu.co.uk/files/pc/fcsrDLDI.zip
dlditool#
devkitPro/devkitARM/bin/dlditool.exe
작업순서#
- 보통 방법대로 빌드한다. *.ds.gba 파일이 만들어진다.
- padbin을 이용해서 이미지 파일 뒤쪽을 깔끔하게 정리한다.
- fcsr 이미지(FAT12)를 만든다.
- fcsr 이미지와 게임 이미지를 결합한다.
- dlditool을 이용해서 fcsr.dldi를 적용한다.
padbin 이용하기#
padbin 512 XXX.ds.gba
파일 사이즈가 512바이트의 배수가 될 때 까지 XXX.ds.gba 파일의 뒤쪽에 0xFF를 덧붙인다.
fcsr 이미지 만들기#
http://gpf.dcemu.co.uk/files/pc/fcsrimage.zip
위에서 다운로드받은 유틸리티를 이용한다.
유틸리티의 잘못된 부분을 수정한 파일 :
사용법 :
- FAT에 넣을 파일 및 디랙토리들을 특정 디랙토리아래에 모아둔다.
- build.bat fcsr.img (1의 디랙토리 이름)
위와같이 수행하면 1의 디랙토리 아래의 모든 파일 및 하위 디랙토리들이 fcsr.img 파일에 FAT12 형식으로 들어간다
fcsr 이미지와 게임 이미지 결합하기#
cat XXX.ds.gba fcsr.img > XXX_fs.ds.gba
dlditool 적용하기#
dlditool fcsr.dldi XXX_fs.ds.gba
이 글은 스프링노트에서 작성되었습니다.
2007/10/24 10:11
2007/09/20 18:15
PAlib 070717 버젼의 내용을 한글화 하여 chm 파일로 만들었다.
기본적으로 PAlib의 include 폴더 아래의 파일들에 있는 주석을 한글화 하면서 doxygen과 html help workshop을 이용하여 chm으로 만든 것이다.
PAlib는 주석이 워낙 성의없이 달려있어서 번역된 이 메뉴얼 역시 버릇이 없기는 마찬가지다. 요상한 것들은 개별 테스트도 하면서 원본에는 없는 내용도 겻다리로 집어넣기도 하고 했지만 대부분은 영문을 1:1 번역한 것이라 많이 모자란 상태이다. 와중에 일부 파일은 번역을 다 못했다.
큰 도움은 안되겠지만, 막 입문하는 사람에게 조금이나마 유용하게 쓰이기를 바랄 뿐이다.
2007/09/20 17:58
Wi-Fi 테스트하려고 만든 간단한 샘플 프로젝트.
PC에서 동작하는 서버와 NDS에서 동작하는 클라이언트로 구성된다.
서버 테스트를 위해 PC에서 동작하는 클라이언트도 있다.
libdswifi와 이를 기반으로 한 PAlib의 wifi 모듈은 기본적으로 posix API를 따르고 있다. 사용함에 있어 크게 문제되는 점이 없고, 본 예제 또한 무척 간단한 구성이다.
PC용 서버/클라이언트 소스는 http://www.pcs.cnu.edu/~dgame/sockets/sockets.html 에서 다운로드 받은 것을 약간 손본 것이다. 이 소스는 cygwin의 gcc를 이용해서 컴파일한다. 참고로 gcc는 cygwin의 기본 설치 옵션에 포함되어있지 않으니 설치 시 별도로 선택 설치하도록 한다.
PC에서 서버 프로그램을 띄우면 서버 프로그램은 0x1234 포트에 listen하면서 대기한다.
클라이언트는 입력된 키패드 값을 서버로 전송한다.
서버는 ack를 반환한다.
확인해 봐야 할 사항들 :
PC에서 동작하는 서버와 NDS에서 동작하는 클라이언트로 구성된다.
서버 테스트를 위해 PC에서 동작하는 클라이언트도 있다.
libdswifi와 이를 기반으로 한 PAlib의 wifi 모듈은 기본적으로 posix API를 따르고 있다. 사용함에 있어 크게 문제되는 점이 없고, 본 예제 또한 무척 간단한 구성이다.
PC용 서버/클라이언트 소스는 http://www.pcs.cnu.edu/~dgame/sockets/sockets.html 에서 다운로드 받은 것을 약간 손본 것이다. 이 소스는 cygwin의 gcc를 이용해서 컴파일한다. 참고로 gcc는 cygwin의 기본 설치 옵션에 포함되어있지 않으니 설치 시 별도로 선택 설치하도록 한다.
PC에서 서버 프로그램을 띄우면 서버 프로그램은 0x1234 포트에 listen하면서 대기한다.
클라이언트는 입력된 키패드 값을 서버로 전송한다.
서버는 ack를 반환한다.
확인해 봐야 할 사항들 :
- gethostbyname이 잘 동작하는것일까?
- DNS에 등록된 이름은 아니지만 PC 클라이언트 쪽에서는 AP의 DHCP 서버에서 이름을 찾아 접속할 수 있다. 하지만 NDS는 이름을 찾지 못한다.
- non-blocking IO를 위한 깔끔한 구조는 어떤 것이 좋을까?
- 우선 ioctl과 select 부터 테스트 해 봐야함.
2007/09/15 18:49
1.0 버젼에서 업그레이드 및 기능 추가된 1.1.0 버젼이다.
doxygen을 이용해 reference manual도 만들었다.
주요 변경 사항은 다음과 같다.
라이브러리 테스트를 위한 app도 다시 정리해서 만들었다. 이 프로젝트에서는 libWNText가 devkitPro 디랙토리에 있을 때 build 되도록 작성되었다. 폴더 구조는 아래 그림과 같다.
doxygen을 이용해 reference manual도 만들었다.
주요 변경 사항은 다음과 같다.
- 8bit Bitmap mode에서 구현하던 것을 16color mode로 전환.
- WNText_ClearScr() 함수 추가.
- WNText_GetVersionString() 함수 추가.
라이브러리 테스트를 위한 app도 다시 정리해서 만들었다. 이 프로젝트에서는 libWNText가 devkitPro 디랙토리에 있을 때 build 되도록 작성되었다. 폴더 구조는 아래 그림과 같다.
2007/09/14 18:59
오늘 만든 한글 출력 라이브러리이다.
PAlib를 기반으로 만들었으며, PAlib와 비슷한 모양의 API를 가지도록 꾸몄다.현재 버젼에는 PAlib의 PA_OutputSimpleText() 함수에 해당하는 기능만 가지고 있다. 즉 variable argument를 이용해서 printf처럼 다양한 출력은 제공하지 않는다. 다음 버젼에서 해야할 일이다.- 영문 알파벳, 숫자, 기호는 8*16 픽셀 크기의 고정폭 폰트(FixedSys)
- 한글은 16*16 픽셀 크기의 고정폭 폰트(MS 윈도의 굴림)
- KSC-5601 완성형 폰트셋
- 글자 출력 위치는 픽셀 단위로 지정(x:0~255, y:0~191)
- 10개의 폰트 색상 지원.
- screen 0/1 선택 가능.
- background 0~3 선택 가능.
- 8bit Bitmap mode 사용.
현재 폰트 크기를 유지하면서 폰트를 변경하는 것은 쉽게 할 수 있다. 위의 첨부 파일 중 source 를 받아 data 폴더 내에 있는 폰트 추출 유틸리티를 활용하면 된다. 이 유틸리티는 롬 한글화 프로젝트 팀의 자료실에서 구한 것이다.
8bit Bitmap mode를 사용하기 때문에 VRAM의 낭비가 심한 편이고 bitmap mode를 사용하는 app을 작성할 때에는 신경써서 작업해야 한다. 처음에는 tile만 가지고 어떻게 해볼까 하고 여기저기 찔러봤지만 도저히 방법이 없어서 일단 생각만 남겨두고 bitmap mode로 구현하게 되었다. 참고로 NDS에는 2D 모드에서 sprite를 128개 밖에 만들지 못한다. 그러니 sprite로 한글 출력을 구현하면 한 화면에 128글자밖에 찍지 못하는 사태가 발생한다.
이 라이브러리를 사용하려면 libWNText-1.0.zip 파일 내의 header file을 적당한 위치로 복사해서 include하고, libWNText.a 파일 역시 적당한 위치로 복사해서 자신의 app에 link 시켜야 한다. Makefile을 직접 손보면 간단하게 처리할 수 있다. 예제로 첨부한 testlibWNText.zip 내의 Makefile을 참고하면 쉽게 자신의 프로젝트에 적용할 수 있을 것이다.
다음 버젼에서 해야할 일 :
- printf 스타일의 argument 지원
- 폰트 크기 변경가능한 구조로 작성
- 폰트 변환 유틸리티 작성
- 가변폭 폰트 지원에 대한 고려
2007/09/07 11:52
방금전에 닌텐도 Wi-Fi USB 커넥터를 배송받았다. 이미 무선 공유기를 이용해서 NDS에서 wifi를 사용하고 있지만 wifi 기능을 테스트 하기 위한 일종의 reference로 사용하기 위해 구매한 것인데, 받아서 설치하고 접속테스트를 하니 못찾는 것이 아닌가!!
레퍼런스로 쓸려고 구입했는데 안된다라...
에러는 52103.
여기저기 뒤져보니 몇가지 해결책을 제시하고 있으며, 이것저것 해보다 보니 결국 잘 해결되기는 했지만 정확한 원인과 정확한 해결책은 모르는 상태다. 언인스톨 후에 다시 해 봐도 문제 재현도 안되고, 뭔가 많이 불안한 장치인듯 하기도 하다.
내가 해본 52103 에러 대처법.
- 노트북에 무선랜과 유선랜이 같이 있으며 무선랜을 사용중이었다. 그래서 우선 무선랜을 끄고 유선 연결 한 다음 접속시도. 이때 무선랜 쪽의 인터넷 공유를 끄고 유선랜쪽의 인터넷 공유를 활성화 해야 한다.
- 닌텐도 Wi-Fi USB 커넥터에 Windows 방화벽을 사용하지 않음.
- 닌텐도 Wi-Fi USB 커넥터의 TCP-IP 등록정보에서 DNS 서버 직접 입력. 디폴트로는 아무것도 입력되어 있지않다. 여기에 아무 DNS서버 IP를 넣어봤다.
- 유선랜의 인터넷 공유를 끄고, 유선랜과 닌텐도 Wi-Fi USB 커넥터를 네트워크 브릿지로 연결.
1 - 노트북의 유선 랜
2 - 닌텐도 Wi-Fi USB 커넥터
3 - 노트북의 무선 랜
노트북은 무선 랜으로 인터넷에 연결되어 있으며, 닌텐도 Wi-Fi USB 커넥터는 무선랜의 연결을 공유해서 연결되고 있는 것을 볼 수 있다.
네트워크 속성에서 고급 탭에 가면 [인터넷 연결 공유]라는 녀석이 있다. 이것저것 건드리며 무선랜의 속성에서 인터넷 연결 공유를 껐을 때 캡쳐한 화면이다. 닌텐도 Wi-Fi USB 커넥터의 소프트웨어를 PC에 설치하면 자동으로 연결 공유가 설정된다.
무선랜을 꺼버리고 유선랜을 연결한 다음 무선랜/유선랜의 인터넷 연결 공유는 모두 끈 상태에서 유선랜과 닌텐도 Wi-Fi USB 커넥터를 모두 선택해서 마우스 우클릭하면 [연결 브리지]라는 녀석이 나타난다. 이것을 선택하고 테스트 해 봤을 때 처음으로 연결이 잘 되었었다. 나중에 이 브리지를 제거한 후에도 잘 된다는 것이 문제아닌 문제일 뿐.
우여곡절을 겪었지만 기본적인 테스트를 마무리 했다.
닌텐도 Wi-Fi USB 커넥터에는 동시에 다수의 NDS가 접속하는 것이 가능하다. 그들 사이에 Wi-Fi 게임을 하는 것 역시 가능하다.
그치만 dswifi를 이용한 접속이 안된다. dswifi를 이용해서 USB 커넥터에 접속하는 방법을 몰라서 일 수도 있을것 같다. 좀 더 방법을 찾아본 다음에 결론을 내려야 할듯...
2007/08/24 11:56
DSerial2에 관한 문서가 그리 잘 되어 있지 않은 편이기 때문에 남아있던 몇가지 궁금증들은 natrium42의 demo 프로그램을 돌려보면서 얼추 해소되었다. 그래서 간단한 데모 프로그램을 작성해 보기로 하였고, 첫 번째 데모 프로그램으로 "평면위의 공"을 만들기로 하였다.
NDS 본체 위에 공이 하나 있다고 생각하고, 본체를 이리 저리 기울여서 공의 위치를 옮겨보는 그런 간단한 프로그램이다. 정확하게 하려면 물리엔진을 올려야겠지만, 가속도 센서 테스트라는 이번 데모의 목적에만 충실하기로 하고 생략해 버렸다.
위 사진은 에뮬레이터에서 캡쳐한 스크린샷이다. 물론 에뮬레이터에는 DSerial2가 없기 때문에 공을 움직일 수는 없다. DSerial2를 이용해서 프로그램을 띄울려면 NoPass카트와 DSerial2카트를 갈아끼우는 번거로움이 있기 때문에 대부분의 개발을 에뮬레이터상에서 하고 마지막 테스트만 NDS에 올려보았다. 에뮬레이터에서는 가속도 센서 대신 키패드를 이용해서 공을 움직이는 방식으로 간이 테스트를 진행했다.
이 예제가 포함하고 있는 내용은 다음과 같다.
NDS 본체 위에 공이 하나 있다고 생각하고, 본체를 이리 저리 기울여서 공의 위치를 옮겨보는 그런 간단한 프로그램이다. 정확하게 하려면 물리엔진을 올려야겠지만, 가속도 센서 테스트라는 이번 데모의 목적에만 충실하기로 하고 생략해 버렸다.
위 사진은 에뮬레이터에서 캡쳐한 스크린샷이다. 물론 에뮬레이터에는 DSerial2가 없기 때문에 공을 움직일 수는 없다. DSerial2를 이용해서 프로그램을 띄울려면 NoPass카트와 DSerial2카트를 갈아끼우는 번거로움이 있기 때문에 대부분의 개발을 에뮬레이터상에서 하고 마지막 테스트만 NDS에 올려보았다. 에뮬레이터에서는 가속도 센서 대신 키패드를 이용해서 공을 움직이는 방식으로 간이 테스트를 진행했다.
이 예제가 포함하고 있는 내용은 다음과 같다.
- 화면에 텍스트 출력. PA_OutputText()
- 배경 로딩. PA_EasyBgLoad()
- Sprite 생성과 움직이기. PA_CreateSprite(), PA_SetSpriteXY()
- DSerial의 ADC 관련. dseAdcRead()
2007/08/22 12:49
DSerial2는 8051 프로세서를 내장하고 있으며, 이 프로세서에 어떤 펌웨어를 올리느냐에 따라 다양한 기능을 하도록 설정할 수 있다. 펌웨어를 직접 작성하면 좋겠지만 우선 간단히 동작여부를 테스트 해 보기 위해 Natrium42가 공개한 데모 코드를 다운로드 받아 돌려보기로 한다.
데모 코드는 natrium42의 wiki에 가면 다운로드 받을 수 있다. 우선 가장 최신 버젼인 1.1 beta 2를 다운로드 받아 컴파일 해 보았다.
참고로 현재 개발환경은 devkitARM R20 버젼이다.
압축을 풀면 mcu, nds, tools 3개의 폴더가 나온다. mcu는 앞에서 말한 8051용 펌웨어이고, nds는 NDS용 코드, tools는 hex2bin 유틸리티를 포함하고 있다.
nds 폴더에서 make 하면 다음과 같은 에러가 나온다.
빌드 결과물은 dserial.ds.gba, dserial.nds 파일이 만들어진다. SuperCard에서는 dserial.ds.gba 파일을 dserial.sc.nds로 이름을 바꿔서 사용하면 된다.
이 데모를 수행하려면 다음의 절차를 거쳐야 한다.
데모 코드는 natrium42의 wiki에 가면 다운로드 받을 수 있다. 우선 가장 최신 버젼인 1.1 beta 2를 다운로드 받아 컴파일 해 보았다.
참고로 현재 개발환경은 devkitARM R20 버젼이다.
압축을 풀면 mcu, nds, tools 3개의 폴더가 나온다. mcu는 앞에서 말한 8051용 펌웨어이고, nds는 NDS용 코드, tools는 hex2bin 유틸리티를 포함하고 있다.
nds 폴더에서 make 하면 다음과 같은 에러가 나온다.
d:/MyDocuments/NDS/DSerial/dserial-1.1-beta2/nds/arm9/source/card_spi.c:58: error: 'REG_EXEMEMCNT' undeclared (first use in this function)찾아보면 REG_EXEMEMCNT 라는 레지스터는 없고, 대신 REG_EXMEMCNT 라는 녀석이 있다. devkitPro 최신 버젼에서 오자가 수정된 것이 아닐까 싶다. 일단 오류 수정하고 빌드하면 잘 수행된다.
빌드 결과물은 dserial.ds.gba, dserial.nds 파일이 만들어진다. SuperCard에서는 dserial.ds.gba 파일을 dserial.sc.nds로 이름을 바꿔서 사용하면 된다.
이 데모를 수행하려면 다음의 절차를 거쳐야 한다.
- 이 바이너리를 micro SD에 저장한다. micro SD는 FAT-16으로 포맷되어 있어야 하며 저장하는 폴더 위치는 어느 곳이어도 무관하다.
- micro SD를 SuperCard에 삽입하고, NDS에 SuperKey, SuperCard를 끼운 상태로 부팅한다.
- 화면에 SuperCard 메뉴가 나타나면 SuperKey를 뽑아내고 DSerial2 카트를 끼운다.
- SuperCard 메뉴에서 dserial.sc.nds 파일을 선택하고 수행한다.
2007/08/22 12:15
NDS용 다용도 카트리지를 만들려는 목적으로 여러가지 자료를 뒤지다가 부족한 부분이 있어 DSerial을 구매하기로 하였다. 이 제품은 slot-1용 확장 카트리지로 다양한 외부 인터페이스를 제공하고 덤으로 2축 가속도 센서도 내장하고 있다. 자세한 내용은 DSerial 공식 페이지에서 참조할것.
Slot-1용 제품이다 보니 사용하려면 slot-2용 메모리 어뎁터도 있어야 한다. 현재 R4만 사용하고 있기 때문에 slot-2용 어뎁터 역시 같이 구입하였다. 구입은 natrium42(DSerial 만든 개발자)가 운영하고 있는 Electro Bee에서 진행하였다.
8월 10일 주문하고 PayPal로 결재하였다. 당일 배송 시작하여 그저께 8월 20일에 배송 완료 되었다. 배송비를 절약하기 위해 가장 저렴한 것을 골랐던 탓에 배송 추적이 안되어 조금 답답한 열흘이었지만 생각외로 빨리 도착한것 같다.
SuperCard는 CF, SD, mini SD, micro SD등 다양한 버젼이 있지만, R4에서 사용하는 micro SD 버젼을 구입했다. 테스트 결과 FAT-16으로 포맷하면 양쪽에서 같이 사용할 수 있다.
SuperKey는 NoPass device이다. 부팅할 때에만 필요하고, SuperCard의 메뉴 화면에 들어간 다음에는 뽑아버려도 무관하다. 사실 DSerial2를 끼울려면 SuperCard의 메뉴 화면 상태에서 SuperKey를 뽑고 DSerial2를 삽입해야 한다. 조금 번거롭기는 하지만, FlashMe를 하지 않는 이상 다른 방법은 없다.
Slot-1용 제품이다 보니 사용하려면 slot-2용 메모리 어뎁터도 있어야 한다. 현재 R4만 사용하고 있기 때문에 slot-2용 어뎁터 역시 같이 구입하였다. 구입은 natrium42(DSerial 만든 개발자)가 운영하고 있는 Electro Bee에서 진행하였다.
- DSerial2 - $45
- SuperCard Lite + SuperKey - $50
8월 10일 주문하고 PayPal로 결재하였다. 당일 배송 시작하여 그저께 8월 20일에 배송 완료 되었다. 배송비를 절약하기 위해 가장 저렴한 것을 골랐던 탓에 배송 추적이 안되어 조금 답답한 열흘이었지만 생각외로 빨리 도착한것 같다.
SuperCard는 CF, SD, mini SD, micro SD등 다양한 버젼이 있지만, R4에서 사용하는 micro SD 버젼을 구입했다. 테스트 결과 FAT-16으로 포맷하면 양쪽에서 같이 사용할 수 있다.
SuperKey는 NoPass device이다. 부팅할 때에만 필요하고, SuperCard의 메뉴 화면에 들어간 다음에는 뽑아버려도 무관하다. 사실 DSerial2를 끼울려면 SuperCard의 메뉴 화면 상태에서 SuperKey를 뽑고 DSerial2를 삽입해야 한다. 조금 번거롭기는 하지만, FlashMe를 하지 않는 이상 다른 방법은 없다.



fcsrimage.zip
WifiPad.tar.gz
dserial.sc.nds