blank-6962-jesuswn.zip

안녕하세요 새항아리입니다.

 

제목 : GBA 한글화 쌩초보 강좌 - 7

부제목 : 폰트확장과 포인터에 대하여.

 

원래 이번 시간에 포인터만 강좌할까 하다가 대사포인터를 하기 전에 한글폰트를 먼저 만들어야한다는 점을 까먹었다는 것을 인식하고 폰트확장부분을 다루면서 포인터를 이야기 해보도록 하겠습니다..

 

 

우선 강좌를 시작하기 전에 말씀드릴게 있습니다.

초보분들의 의지를 꺽는것은 잘못된 것이지만.. 죄송스럽게도.. 영문롬과 히라가나 가타카나만 쓰인 롬들(예로 제가 강좌 예제로 사용했던 스크류 브레이커같은 롬)은 한글화 하시기 어렵습니다.

전에도 이야기 했지만 한글의 완성형으로는 256자로 모든 글자를 표현하기 힘듭니다.

아무리 적어도 400-500자 정도는 되어야 가능하고 게다가 띄어쓰기나 기타 부호 혹은 영문등은 거의 손댈수 없기 때문에 사용이 가능한 글자는 220-30자 내외가 됩니다. 이걸로는 정말 부족하죠..

 

제가 이번 강좌에서 쓰는 폰트 확장의 경우는 2바이트 글자도 모자라서 늘리는 것이기 때문에..

폰트를 확장하면 되지 않느냐는 질문에는 정중히 사과의 말씀 드려야 할것 같습니다.

 

256자로 한글화는 가능하나 반조합이나 조합을 사용해야 하는 점 혹은 폰트확장을 하기 위해서는 롬의 코드 내에 인자코드의 제한 크기를 2바이트로 늘리거나 폰트가 들어가는 길목에 코드를 삽입해 포인팅 해주는 기술이 필요할듯 하며 저도 GBA 롬 구조와 코드구조를 정확히 모르기 때문에 알려드릴수 없는점. 양해바랍니다.

 

그러면 우선 하로보츠를 예로 들어 폰트를 확장시켜 보겠습니다.

 

하로보츠는 1바이트 코드와 2바이트 코드로 구성되어 있습니다.

 

 

사용자 삽입 이미지

 

 

이렇게 생긴 1바이트 코드(한글자당 8x16사이즈)와

 

사용자 삽입 이미지

 

 

이렇게 1바이트의 두배 크기인(글자당 16x16사이즈) 2바이트 코드(2바이트라고 해서 꼭 사이즈가 2배가 되는 것은 아니며 같은 사이즈이나 2바이트 코드가 될수도 있습니다.)가 있습니다.

 

롬을 확장하기 위해서는 우선 비어있는 롬이 필요합니다.

 

 

사용자 삽입 이미지

 

 

1메가짜리 비어있는 롬이구요. 이걸 만드는 방법은


 

사용자 삽입 이미지

 

 

이렇게 롬에 FFFF가 많은 부분을 띄어다가 새파일을 열어 붙여넣기의 반복을 하시면 됩니다.

제가 512K사이즈와 1MB사이즈 2개를 만들어 압축파일로 첨부하였으니 그냥 사용하시면 됩니다.

(같은 비트의 반복이라 압축 크기가 1KB밖에 안되는군요.. ^^;)


 

사용자 삽입 이미지
 
 
사용법은 도스명령으로 이처럼 주면 됩니다니다.
 
copy /b "롬 이름" + "blank-512k.gba" "출력 이름"
 
이렇게 롬 뒤에다 비어있는 롬을 붙이면 롬을 확장 시킨게 됩니다.
 
사실 SFC의 경우 뱅크의 크기와 같은 문제 그리고 헤더파일의 존재로 롬을 확장시키기 어렵다고 합니다만 GBA는 그냥 빈공간 가져다가 붙이면 확장이 되게 됩니다.

 
사용자 삽입 이미지

 

 

위에 주소를 보니 512K짜리 여백을 붙였네요. 그래서 지금 아랫부분으로 내렸는데 빈공간이 충분히 많죠?

 

롬을 확장하는 큰 이유중 하나는 폰트를 확장하기 위해서 이고. 또하나의 큰 이유는 대사 포인터 대상 공간을 확충하기 위해서입니다.

 

포인터에 대한 이야기를 본격적으로 시작해보도록 하겠습니다.

 

포인터는 한국어로 그냥 번역하면 가리키는 것 이라고 합니다.. 사실 어렵죠.. 이렇게 말하면 어렵게 들립니다. 쉽게 예를 듭시다..

 

아파트가 있습니다. 김영희 이철수 등등 집앞에 명패를 걸어놓은 아파트입니다.

그래서 명패를 보고 이철수 네 가족 나오세요!! 이렇게 관리실에서 말을 하면..

이철수씨네 가족이 나올겁니다. 하지만 관리실은 그렇게 안하죠..

왜냐하면 그렇게 되면 자기가 이철수씨라는 이름을 알야아 하니까요..

 

어떻게 합니까? 1021호 나오세요. 라고 합니다.

그러면 그 집에 있는 가족(여기서는 이철수씨네 가족)이 나올겁니다.

여기서 1021호 라는 게 포인터입니다.

포인터라는 것을 간단히 말하자면 살고있는 집위치 입니다.

 

대사로 다시금 이야기해보자면..

"이철수씨네 가족" 출력! 이라고 적혀 있다면. 이철수씨네 가족 이 출력되겠지만, 출력하는 쪽에서 대사 전체를 알고 있어야 합니다.

1021 출력 이라고 적혀 있다면 1021 위치에 살고 있는 "이철수씨네 가족" 이라는 대사가 출력되게 됩니다.

이렇게 바뀌면 대사부분과 출력부분이 나뉘어 지게 됩니다.

(관리실이 가족이름을 몰라도 된다는 소리입니다.)

 

그런데 이 아파트에 창고나 주민 문화공간으로 쓰이는 곳이 있다고 칩시다.

주민 문화공간 중 헬스장이 너무 좁아서 헬스장 옮기려면 어떻게 해야할까요..

우선 아파트내에 빈 곳이 있는지 확인하고 그 빈곳이 몇호인지 파악해.

관리실에 변경신청 해야겠죠?

 

그러면 관리실은 만약 누가 헬스장이 어디냐..고 물으면 변경된 호수를 알려주면 될겁니다.

 

이게 바로 폰트확장입니다.

폰트를 추가하려고 보니까 폰트가 아닌 다른 코드들로 막혀 비좁다는 말이죠..

그래서 롬의 빈공간(아파트의 비어있는 곳)을 찾아야합니다.

 

적어도 예전에 있었던 공간보다는 커야겠죠? 거기로 옮긴다음에는 어떻게 해야할까요.

여기가 폰트주소(헬스장)이다라고 말하는 부분(관리실)에 수정을 하면 되겠죠?

 

개념설명은 여기까지 하고 우선 실제 예를 들어봅시다.

하로보츠의 한자롬의 시작위치를 찾아가봅시다.

 

 

사용자 삽입 이미지
 

 

보면 시작위치가 8394로 되어 있고 끝위치는 찾아보면 29213로 되어 있네요..

(끝위치는 폰트가 끝나는 쪽에 써있는 주소가 아니라 그걸 이리 저리 옮겨서 창에 폰트가 딱 안보이는 주소의 하나 적은 주소까지입니다.)

 

이런 위치들이 전부 포인터가 될수 있는겁니다.

포인터가 될수 있다는 말은 이런 위치를 부르면 포인터가 되는 겁니다.

즉 부르지 않으면 포인터가 아니다라는 것 부르는 그 행위 자체가 포인터라는 겁니다.

 

어쨋건 시작 주소를 찾아봅시다.

주소를 찾을때에는 2글자씩 거꾸로 입력해야합니다.

연산크기와 코드라인 읽는 방식에 대한 이해가 필요하지만 그냥 2글자씩 거꾸로 넣는다고 생각합시다.

(혹 궁금해 하실분을 위해 간략설명하겠습니다.

복도가 하나 있는데, 사람 2명이 딱 들어갈수 있는 크기입니다.

그러면 2사람씩 들어가겠죠?(연산 크기를 말하는 겁니다. [1바이트]) 들어가서 나오니까

오른쪽부터 먼저 들어간 사람이 서라고 합니다.(코드라인 읽는 방식)

그러다보니 008394 가 통로에 들어가려니 2개씩 들어가게 되고

|94|

|83|

|00| ↓ 방향 통로..

나올때는 오른쪽 부터 서라고 하니까

94 83 00 이 되는 겁니다.. 그냥 이런식으로 이해해주세요..)

 

어쨋건 그렇게 되서 94 83 00 을 찾으면

 

 

사용자 삽입 이미지

 

 

여기서도 HEX로 바꿔주는 정도의 센스~~!!


 

사용자 삽입 이미지

 

 

하나가 나오네요..  보통 2곳에서 여기가 폰트야~~ 라고 포인팅 하는데 이건 하나군요..

그러나 한자부분을 가리키는게 확실한지 확인하려면 우선 롬의 빈공간으로 포인터를 바꿔봅시다.

 

이 말을 쉽게 하자면 8394호 녀석 나와라고 말할것을 408394호 녀석 나와 라고 말하라고 바꾸는 겁니다.


 

사용자 삽입 이미지

 

 

변경하고 저장후 롬을 실행해보면


 

사용자 삽입 이미지


 

한자 부분이 깨지네요. 이것은 무슨말이냐하면.. 8394호를 불러야 하는것을 408394를 불렀으니

엉뚱한 녀석이 나부르네 하고 나갔다는 소리고.. 빈여백이기 때문에 검정하게 혹은 하얗게 출력이 되는 겁니다.

 

 

사용자 삽입 이미지

 

 

한자 폰트부분을 대사장에서 드래그 합니다. 드래그가 어렵다면.

쉬프트 누르고 페이지 다운키를 반복하세요.. 그래서 저기 빨간색 표시된것처럼

폰트부분을 전부 선택했다면..

 

 

사용자 삽입 이미지

 

 

복사해봅시다. 그리고

 
사용자 삽입 이미지

 

 

아까 옮겨놓은 주소인 408394주소에


 

사용자 삽입 이미지

 

 

덮어 씌우면..


 

사용자 삽입 이미지

 

 

출력이 제대로 되는군요..


 

사용자 삽입 이미지

 

 

폰트가 제대로 출력되니 이제 본격적으로 확장하는 준비를 해봅시다.

확장을 하기전에 우선 폰트의 한계치를 알아야 합니다.

왜냐하면 이런 코드까지는 폰트로 인식하지만 이 다음코드부터는 폰트로 인식하지 못하고

제어코드로 인식할수 있다는 의미입니다.

 

예를 들면서 설명하도록 하지요. 원래 있던 폰트의 마지막 폰트의 고유번호는 F5 1C입니다

F5 1C 이후부터는 여백으로 되어 있겠죠? 우선 다음 폰트인 F5 1D를 출력해보면


 

사용자 삽입 이미지

 

 

잘 출력되는듯 보입니다.

 

확인하려면 해당 폰트인 F1 1D위치에다가 폰트를


 

사용자 삽입 이미지

 

 

수정하고 다시 롬을 열어 확인하면 됩니다.

 

(% 여기서 주의하실점은 대사장과 YYCHR을 동시에 켜놓으시고 수정하시면 안된다는 점입니다.

대사장과 YYCHR의 경우 각기 메모리에 롬을 통채로 저장하고 있다가 저장하라는 명령이 들어오면 롬을 통으로 저장합니다. 즉 YYCHR로 열심히 수정해서 저장한후 대사장으로 코드 2-3개 수정하고 저장하면 대사장은 YYCHR이 저장한 것을 모르기때문에 덮어 씌우게 되는겁니다.

따라서 하나를 저장하면 다른 하나는 열기를 해서 불러와야 데이타의 손실을 막을수 있습니다.)


 

사용자 삽입 이미지

 

 

골뱅이가 출력이 잘 되는군요. 이제는 폰트의 한계치를 살펴봅시다.


 

사용자 삽입 이미지

 

 

저는 FA부터 제어코드라고 판단해서 F6, F7, F8, F9의 시작주소의 폰트를 저렇게 무작위로 변경해놓았습니다.


 

사용자 삽입 이미지

 

 

그리고 대사를 변경해 그 폰트를 출력하라고 했습니다.


 

사용자 삽입 이미지

 

 

하지만 이게 뭡니까 깨집니다. 즉 한마디로.. F6 00 부터는 대사폰트로 인식되지 않는다는 점이네요..

아쉽습니다. 폰트 확장을 할때는 그래도 천개정도는 확장가능하지 않을까 기대했는데.


 

사용자 삽입 이미지

 

 

우선 F5의 마지막 FF위치를 변경해보고 F5 FF까지는 대사폰트로 인식하는지 살펴보겠습니다.


 

사용자 삽입 이미지
 
 
F5 FF까지는 인식하네요..
그나마 다행입니다. 대사 폰트의 한계치를 딱 맞춰서 정해놓은 게임도 있을수 있기 때문이죠.
그러면 폰트를 확장한 의미가 없어지기 때문입니다.
 
F5가 1C까지 썼으니까 FF - 1C 하면 225개 정도 여유가 더 생겼네요.
 
사실 하로보츠는 딱히 폰트를 확장할 필요까지는 없습니다.
왜냐하면 하로보츠의 한자 갯수가 960여개 정도 되기때문이죠.
이정도면 완성형 폰트를 쓰더라도 충분히 가능한 갯수이지만
 
이번에 폰트확장에 대한 이야기를 하고 다음에 한글폰트와 대사포인터에 대한 이야기를 해야 궁합이 맞을것 같아서 집어넣어봤습니다.
 
다음 강좌에서는 한글폰트를 넣어보고 대사포인터를 찾아보자 라는 강좌를 진행할 예정입니다.
그럼 도움이 되셨길 바라며 이만

댓글을 달아 주세요

  1. 미치겠네요 2007.07.09 02:42  address  modify / delete  reply

    공백에다 한글을 집어넣고 기존 롬에다 추가로 넣어서 고유번호표를 작성할 수 있나요?
    .... 포켓몬를 한번 바꿔 해보고싶었는데 컥 히나가라와 가카카나만 있으면 어렵다고 말하셔서 컥!!!!!

    • Favicon of https://shouting.tistory.com 새항아리 2007.07.09 10:34 신고  address  modify / delete

      한글화가 쉽지 않은건 거기에도 이유가 있죠.

      예를 들어 자판기가 있는데 거기에 버튼 20개(고유번호)가 각각 다른 음료(폰트)를 뽑아준다고 생각해보세요.

      그런데 말씀하신대로 음료수 개수(폰트 개수)가 적다고 자판기(롬)안에 음료수 종류(폰트 개수)만 늘린다고 해도

      버튼개수는 20개(고유번호)로 변함이 없으니까 음료수가 몇개가 있던 상관 없이 20개밖에 못쓰는 겁니다.

      만약 버튼의 개수(고유번호)까지 늘리고 싶다면 도구(어셈블리어)를 사용해 자판기(롬) 자체를 개조(해킹)해야 합니다.

      즉 개조(해킹)할 실력이 되지 않으신다면 무용지물인거죠. 덧 붙이자면 포켓몬스터는 어셈블리어 수정도 고난이도라고 합니다.

  2. 미치겠네요 2007.07.09 13:07  address  modify / delete  reply

    죽으라는 소리군요...

  3. 프리뷁수 2007.07.09 13:18  address  modify / delete  reply

    근데 폰트 사이즈는 어떻게 아는 건가요?

    • Favicon of https://shouting.tistory.com 새항아리 2007.07.09 14:32 신고  address  modify / delete

      폰트 사이즈가 1바이트, 2바이트로 나뉘는 것을 이야기 하신다면. 앞서 고유번호표를 작성하는 강좌를 다시금 보시면 아실겁니다.

      즉 하나의 글자를 표시하기 위해 코드가 1개 쓰였는지 2개 쓰였는지가 1바이트와 2바이트를 구별하는 지침이 되는 거죠.

      예를 들어 00 01이 愛라는 글자를 나타낸다면 2바이트 폰트고 01=A라는 식으로 하나의 코드가 한글자를 나타는 폰트를 1바이트 사이즈 코드라고 합니다.

  4. 나그네 2007.08.06 16:15  address  modify / delete  reply

    쿨럭.. 지금까지 잘 보고 배우다가.. 댓글들 보니 난감해지네요.. 안그래도 포켓몬 하고 있었는데

    • Favicon of https://shouting.tistory.com 새항아리 2007.08.06 16:37 신고  address  modify / delete

      포켓몬스터는 인기작품이지만 그에 반해 한글화된
      작품은 정식발매한 골드와 실버를 제외하고는 딱히
      없는 이유가 바로 그것입니다..

      그래도 열정이 있으시다면 도전해보세요

  5. 겔라디아 2007.12.04 17:06  address  modify / delete  reply

    도스명령 저 창 어디로 들어가야되나요? 롬확장하려고하는데 도스명령을 못찾아서 막혔어요ㅠㅠ

  6. 겔라디아 2007.12.05 13:02  address  modify / delete  reply

    감사합니다 쭉쭉 진행중이예요....

  7. 하아.. 2007.12.25 09:25  address  modify / delete  reply

    돌아버려 ㅠ_ㅠ 뭐이리어렵냐 처음부터못찾겠어요 ㅠ_ㅠ 역재 3 쉿!

  8. Favicon of http://blog.naver.com/jhw0604 에플트리 2008.02.10 05:32  address  modify / delete  reply

    엄청난글 ㅎㅎ;
    저도 이쪽에 관심이 있어서 글들을
    블러그에 링크 걸어가겠습니다.

    혹시 불쾌하시다면 메일을;;

  9. Favicon of http://blog.naver.com/jhw0604 에플트리 2008.02.10 06:22  address  modify / delete  reply

    역시 pc의 경우에는 용량상의 여유가 있어서 따로 대사파일을 만들거나 하겟지만
    게임기의경우 용량의 제한이 심하니 공간절약을 위해 별짓을 다하는군요 ㅎㅎ
    앞으로 전 프로그램을 만들때 확장을 위한 생각을 많이 해두어야 하겟네요 ㅎㅎ

    글 잘 읽었습니다. 쓰시느라 힘들었을텐데 몇시간 안에 다 읽어버려서 죄송하네요

    • Favicon of https://shouting.tistory.com 새항아리 2008.02.10 12:30 신고  address  modify / delete

      임베디드 프로그래밍쪽이나 핸드폰용 wipi등의 프로그래밍이 아니라면 용량걱정은 안하는게 대부분이죠.
      요즘 추세가 소형기기가 발전하는 모양이라 용량 줄이는 방법을 배우는 것도 나쁘지는 않습니다.

  10. TimeDalek 2008.08.11 15:39  address  modify / delete  reply

    대사장에서 폰트 찾는데 않나오네요...

  11. TimeDalek 2008.08.16 08:36  address  modify / delete  reply

    아 제가 말을 잘못썻군요.
    폰트를 찾는게 아니라 폰트의 시작주소를 찾는것을 말하는거였습니다..

    • Favicon of https://shouting.tistory.com 새항아리 2008.08.16 12:48 신고  address  modify / delete

      폰트 포인터를 못찾으셨다는 소리같은데요.
      모든 게임이 포인터를 사용하는 것은 아닙니다.
      게다가 상대포인터를 사용했다면 또 다릅니다.
      천천히 연구해보셔야 할것 같네요.

  12. TimeDalek 2008.08.18 15:54  address  modify / delete  reply

    상대포인터는 어떻게 찾죠??

    • Favicon of https://shouting.tistory.com 새항아리 2008.08.18 17:40 신고  address  modify / delete

      그건 무슨 답이 나와있는게 아니라 롬을 가지고 계속 연구를 해보셔야 합니다..
      강좌를 천천히 읽으시고 연구를 계속 해보세요.
      한글화가 쉬운일이 아니거든요..

  13. TimeDalek 2008.08.19 10:56  address  modify / delete  reply

    그렇군요.. 감사합니다.
    그러고보니 네이버카페 한식구에 오셧더군요!

  14. studentna 2008.10.11 20:23  address  modify / delete  reply

    묻고 싶은것이 있는데요~그럼 yychr은 그냥 대사 확인 할때만 쓰는건가요??

    • Favicon of https://shouting.tistory.com 새항아리 2008.10.12 03:56 신고  address  modify / delete

      yy-chr은 대사확인이 아니라 타일편집 프로그램입니다.
      즉 그림판같은 그래픽 프로그램이죠.
      폰트의 그림을 수정할때 사용하는 프로그램이지
      대사를 수정하거나 하는 프로그램이 아닙니다.,

  15. 요슈아 2008.10.18 12:15  address  modify / delete  reply

    포인터가 어떤 식으로 이루어져 있는지 구체적으로 설명해 주시면 안될까요?!

    • Favicon of https://shouting.tistory.com 새항아리 2008.10.18 17:30 신고  address  modify / delete

      아파트 이야기 나오는 부분부터 자세히 읽어보라는 말씀밖에 드릴게 없네요.
      제가 요즘 시간이 좀 부족해서 설명을 다시 드리지 못합니다.
      죄송합니다.

  16. IMSI 2008.11.03 03:55  address  modify / delete  reply

    1바이트 출력만을 지원하는 경우는 어떤 식으로 포인터를 활용할 수 있을까요?
    FF값 이상은 인식이 안될텐데 말이죠.

    다른 값을 갖는 폰트를 여러개 만들어서 대사마다 지정한다던가
    아니면 2바이트 출력을 구현한다던가하자면
    소스도 없이 리버스 엔지니어링만으로 구현하기엔
    정말 실력과 경험이 좋지 않은 이상은 힘든 것 같아서요.

    중국쪽은 인구가 많아서 그런지 참 어려워 보이는 작업도
    해내는 것을 보면 어떻게든 방법이 있을텐데 말이죠. 어렵네요^^

    • Favicon of https://shouting.tistory.com 새항아리 2008.11.03 21:24 신고  address  modify / delete

      그게 바로 어셈블리어로 폰트확장을 해야하는 이유입니다.
      어셈블리어 부분은 맨 위에 댓글인 자판기 이야기를 보시면 조금 이해하실수 있을것 같네요.

  17. Favicon of http://blou.tistory.com Bleu 2009.04.21 12:14  address  modify / delete  reply

    그럼.. 중국 해킹롬을 이용해서 (한글과GBA방식처럼...)
    공백에다 한글을 집어넣고 기존 롬에다 추가로 넣어서 고유번호표를 작성할 수 있나요?

    • Favicon of https://shouting.tistory.com 새항아리 2009.05.18 11:26 신고  address  modify / delete

      그렇게 할 수 있구요. 그렇게 하시는분도 계시긴 합니다만 중국롬들이 대부분 한줄에 다섯글자정도 출력하기 때문에 하다보면 성질이 좀 납니다.