00 NDS 홈브루(Homebrew) - KKAMAGUI Notepad

원본 : http://kkamagui.springnote.com/pages/416259

 

들어가기 전에...

 

1.소개

 내가 만든 간단한 그림판 형식의 메모장 프로그램이다. 메모를 생성하고 삭제하는 기능을 가지고 있으며, 메모 보기 기능도 갖추고 있다.

 libfat를 사용하여 디스크에서 직접 데이터 파일을 사용하며 데이터 파일을 백업하여 데이터를 보존할 수 도 있다.

 사실 KKAMAGUI NOTEPAD 프로그램을 만들면서 NOTEPAD 프로그램을 개발하는 시간보다 윈도우 MFC 구조와 비슷하게 클래스를 구성하고 코딩하는 시간이 더 많이 걸렸다. UI에 전혀 소질이 없는지라... 출력물은 좀 엉망이지만... 조금만 손보면 그럴듯하게 바꿀 수도 있을듯....

 아래는 실행한 화면이다.

notepad11.PNG   NOTEPAD2.PNG   NOTEPAD1.PNG

<시작화면(좌측)과 메모를 입력하는 화면(가운데), 그리고 메모를 보는 화면(우측)>

 

 

2.프로그램 특징

 KKAMAGUI NOTEPAD는 아래와 같은 특징을 가지고 있다.

  • libfat 사용
    • libfat 파일을 수정하여 FAT 파일 시스템으로 포맷된 디스크에 접근하여 데이터 파일을 생성하고 수정함
    • 수정 방법은 01 libfat 업그레이드 부분을 참조
  • 데이터 파일 용량 최소화 
    • 화면 데이터 저장 시, 비트마스크를 이용하여 한 바이트에 8pixel 정보를 저장
    • 256 * 192 => 48Kbyte의 기존 사이즈를 6Kbyte로 줄임
  • 한글 출력
    • 수정한 한글 출력 루틴 및 자작 한글 폰트(굴림체 16x16 pixel 사용) 사용
    • 출처는 네이버 NDS 개발 까페
    • 한글 폰트 제작 및 출력에 관한 부분은 01 NDS 한글 출력 라이브러리 부분을 참조
  • Windows의 MFC 형식의 구조와 비슷한 윈도우 라이브러리 제작 및 사용
    • 자작한 클래스 사용
    • Windows manager class
    • Window base class/DC class
    • Z-Order 기능 지원
    • 환경적 제약사항(Single Task)으로 Message Loop 제거, 해당 윈도우의 Message 처리 루틴을 직접 호출하도록 변경
    • 자세한 내용은 02 NDS 윈도우 시스템 문서를 참조하자.

 

 

3.프로그램 기능

 KKAMAGUI NOTEPAD의 기능은 아래와 같다.

 

3.1 메모 입력 및 입력 취소 기능

  • 연필 및 지우개 선택 기능
    • 연필 모드로 화면 그리기 가능
    • 지우개 모드로 화면 지우기 가능
  • "지우개" 버튼 : 상단의 화면에 연필/지우개 표시
  • “확인” 버튼 : 메모 저장
  • “취소” 버튼 : 변경 사항 입력된 내용 버림

 Notepad4.PNG   ===>   Notepad6.PNG

 Notepad3.PNG   ===>  Notepad5.PNG

<연필 모드(좌측)과 지우개 모드(우측)>

 

 

3.2 메모 보기 및 삭제 기능

  • 기록된 메모 보기 : 상단 화면에 몇변째 메모인지가 표시된다.
  • “확인” 버튼 : 메뉴로 돌아감
  • “삭제” 버튼 : 메모 삭제
  • “다음/이전” 버튼 : 다음/이전 메모 보기

 

 Notepad8.PNG  ===>  Notepad10.PNG

 Notepad7.PNG  ===>  Notepad9.PNG

<첫번째 메모 화면(좌측)과 두번재 메모 화면(우측)>

 

 

3.3 특이사항

 메모장을 구현할 때 프로토타입(Prototype)을 만드는데 너무 열중하다 보니, 데이터 파일에 데이터를 저장하는 방식이 조금 이상하다.

 데이터를 저장할때 한바이트의 플래그 바이트와 나머지 6Kbyte 화면정보를 연속해서 저장하는 방식으로 동작한다. 데이터가 써지면 플래그 바이트를 0x01로 설정하고 메모가 지워지면 플래그 바이트를 0x00으로 설정하여 빈 공간임을 표시하는 것이다.

 메모의 추가 및 삭제가 여러번 반복되면 중간 중간에 플래그 Byte가 0x00 인 부분이 생기게된다. 메모가 추가되면 플래그 Byte 중에 0x00으로 설정된 제일 첫번째 것을 찾아서 해당 위치에 데이터를 추가하고 플래그 바이트를 0x01로 설정한다.

 이렇게 동작 하기 때문에 메모가 데이터 파일에 저장되는 순서하고 메모가 기록된 시간적 순서하고 일치하지 않는 문제가 있는데, 메모를 빼먹지는 않으므로(ㅡ,.ㅡ;;;) 그렇다는 것만 알고 넘어가자.

 

 

4.컴파일, 링크 그리고 실행

  Programmer's Notepad 2 프로그램을 이용할 시에는 Notepad.pnproj 파일을 열어서 컴파일 및 링크하면 되고, 콘솔(cmd.exe)을 사용하는 경우에는 make를 입력하거나 makefile.bat를 더블클릭하여 실행하면 된다. 자세한 방법은 00 NDS 개발 킷(Devkit Pro) 설치 문서를 참조하자.

 컴파일 및 링크가 정상적으로 끝나면 Notepad.nds 파일이 생성된다. 에뮬레이터나 디스크에 넣어서 직접 NDS에서 실행하면 된다.

 

 

5.첨부

 

 

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

+ Recent posts