본문 바로가기
Visual Basic

NDS ROM Trimmer

by irmus 2007. 8. 20.
Visual Basic 연습 프로젝트 두 번째.
파일 입출력 연습

파일 입출력 예제로 뭘 만들어 볼까 고민하다 요즘 한창 재밌게 놀고 있는 NDS를 위한 툴을 만들어 보기로 했다. 참고로 NDS 관련 글도 앞으로 계속 올릴 계획이며, 오늘 NDS inside로 새 분류도 만들었다.

사용자 삽입 이미지
NDS ROM 파일은 NDS game catridge의 PROM을 그대로 덤프뜬 것이다. 그러다 보니 이미지 파일들은 PROM의 크기 그대로 돌아다니고 있다. 보통 정품 카트리지에 들어있는 PROM은 16MB~64MB 정도의 사이즈를 가지고 있다. 오른쪽 그림에서와 같이 앞쪽은 게임에 관한 정보가 저장된 header와 게임 바이너리가 들어있고, 나머지 공간에는 0xFF로 가득 차 있다. 이 나머지 padding 부분은 동작에 필요하지 않기 때문에 잘라내 버려도 무관하다. NDS catridge의 메모리 절약 측면에서도 잘라내는 것이 좋을 것이다.

이번에 파일 입출력 연습으로 만들어 본 것이 이 padding 부분을 잘라내서 ROM 이미지 파일을 다이어트 하는 툴이다. 사실 지금 사용하고있는 R4에 있는 프로그램 CD에 동일한 툴이 이미 있다. 이름은 R4 trimmer. 이미 있는 프로그램이기는 하지만 연습삼아 만들어 보는 것이다. 물론 R4에 있는 프로그램은 drag&drop이 안되고 한번에 한개의 파일만 trim할 수 있다는 단점이 있어서 그런 불편함을 개선한 프로그램을 만들 수도 있겠지만, 일단은 파일 입출력 연습이라는 목적에만 충실해서 만들어 보기로 했다. 불편사항 개선은 다음 기회로.

이번 프로젝트에서는 다음 내용들을 처음 다루었다.
  • Form editor를 활용한 dialog 구성
    • Text, Button, Label control 활용
    • Button 클릭 헨들러 구성
  • Function과 Sub의 차이 구분
  • OpenFileDialog를 사용한 파일 선택 화면 구성
  • My.Computer.FileSystem.GetFileInfo()를 이용한 파일명 파싱
    • 파일 이름과 확장자 파싱
    • 파일 존재 여부 확인
  • 바이너리 파일 Read/Write 모드로 open
  • 파일에서 바이너리 버퍼 읽고 쓰기
  • For/While loop

사용자 삽입 이미지
[NDS ROM Trimmer 실행화면]

이 연습 프로젝트는 발전시킬 여지가 남아있다. 다수 파일의 일괄 trim 기능이나 drag&drop 기능, 또는 윈도우즈 탐색기의 컨택스트 메뉴에 연결시키는 기능 등이 될 것이다.