[GpGiki 대문으로]

GBA Development From the Ground Up, Volume 1


GBA Development From the Ground up

원문 : http://www.gamedev.net/reference/programming/features/gba1/


예전에 류광님의 GBA에 관한 글(GBA게임개발)을 읽고 자료를 찾아 돌아다니다 ?GameDev.net에서 연재되는 글이 있길래 욕심을 내서 번역했던 글입니다. 당시에는 취미삼아 GBA 프로그래밍을 해보려고 했었는데 곧 GP32 아마추어 툴이 나온다고 해서 관둔 상태라는.. -_-a 혹시나 이런 정보를 찾는 분이 계실까해서 올립니다. 2002/02/16 11:42, levites


What is this?

희망적이게도 이 튜토리얼은 게임 개발과 상관없는 사람들에게 GBA 게임 개발에 대해 쉽게 가르쳐줄것이다. 시스템은 현실적으로 개발을 위해 아주 잘 구성되어 있으며, 대부분의 콘솔 시스템과는 대조적으로 툴을 마련하는데 수많은 돈을 투자하지 않아도 된다.

Who is this tutorial intended for?

불행히도 필자는 독자에게 C를 가르치기에 경험과 기술이 부족하기 때문에 독자는 미리 언어에 대한 지식을 가지고 있어야 할 것이다. 독자가 많은 지식을 소유하고 있을 필요는 없으며 GBA조차도 필요하지 않다.(필자는 본인의 첫 개발 몇주간은 GBA를 소유하고 있지 않았다)

How am I going to teach you?

연재가 진행되는 동안, 필자는 독자가 적절한 GBA 프로그램과 희망적인 게임을 개발하는데 필요한 정보를 주기위해 노력할 것이다. 각각의 글에선 GBA프로그래밍과 관련된 한가지 내지는 수많은 주제들을 다룰것이며, 때때로는 독자를 도와줄 일반적인 코딩 테크닉을 적을때도 있을 것이다. 필자는 독자에게 알아야할 예제와 정보, 그리고 갖가지 소재들을 줄것이다. 이따금 필자는 독자를 도와줄 데모 프로그램을 짜줄것이다.(정리되어 있을 필요는 없겠죠?)

What will this article cover?

첫번째 글에선, 필자는 간단히 GBA 시스템과 성능에 대해 살펴볼 것이다. 불행히도 우리는 아직 코딩을 시작하지는 않을것이다. - 침착하게, 서서히 그것을 살펴갈것이다(운과 함께)

필자는 충분한 이글의 목적에 대한 개요를 전달했으니, 이제 시작하자.

An overview of the system

훌륭한 시스템을 간단히 살펴보는 것부터 시작하자.

GBA는 32bit 프로세서인 ARM7TDMI를 사용하며, RISC아키텍쳐 위에서 작동한다. 시스템은 16.78mhz를 형성하며 독자의 그래픽 루틴을 도와줄 다소 강력한 2D 가속을 지원한다.(독자가 만약 DOS 프로그래밍을 해본적이 있다면 필자가 무엇에 대해 말하는지 알것이다 - 역자주 : 모르겠습니다만.. -_-;) 시스템은 특별히 3D를 위해 만들어지지는 않았지만 사람들이 3D 데모나 Raycaster Engines을 만드는 것을 방해하지는 않을 것이다.(둠이나 울펜스타인을 보라)

GBA는 96kb의 비디오 메모리와 32kb의 빠른 내부 RAM(fast internal RAM), 그리고 256kb의 외부 메모리(external RAM)을 가지고 있다.

화면은 240x160 pixel이며, 8bit와 16bit칼라를 지원한다. 강력한 가속과 함께 알파 블렌딩, 회전, 스케일링, 그리고 모자이크 생성 효과는 모두 비교적 쉽다.

Screen Modes

GBA 6가지 각기 매우 다른 스크린 모드에서 작동하며, 그 모드들은 각기 다른 필요에 의해 맞추어져 있다.(역자주 : 다소 번역이 매끄럽지 못해 최대한 의역을 해보았습니다. 원문은 The GBA operates in one of 6 different screen modes that are very different from each other. Naturally, many suit many different needs. 입니다.)

처음의 3가지 모드는 Tile 모드다. 기본적으로 이것은 큰 그림 조각으로된 블럭에 의해 표현된 게임에 사용된다. 예를들어 일찌기의 닌텐도 RPG들을 보라.(물론 실제로도 닌텐도 게임들이 그 방식으로 만들어지기도 했지만 말이다)

GBA는 어떻게 이 숫자들의 연속을 GBA의 비디오 메모리에 저장하는 것일까. 이 숫자들은 지도위의 위치해 있는 특별한 8x8 pixel의 타일을 나타낸다. 지도는 일반적으로 화면보다 크며, 모든 방향으로 스크롤이 가능하기 때문에 다른 화면의 부분들을 나타내는 것이 가능하다.

맵들은 일반적인 Text 정보로 저장되거나 회전/스케일링 데이타로 저장되어질 수 있다. 또한 독자가 설정한 모드에 의존하여 최대 4까지 레이어를 가질수 있다. 레이어는 foreground, background 타입과 같은 하나의 맵 위에 그려지는 어떤 것들을 포함한다.

맵들은 또한 회전/스케일링을 지원하느냐 아니냐에 따라 여러 크기를 가질수 있다.

게다가 모든 맵의 레이어에 알파블렌딩, 축소 또는 모자이크를 적용시킬수있다.

필자는 우리가 타일에 대한 글을 진행할때 MUCH 좀더 자세한 세부 사항에 대해 살펴보고, 시도해 볼 것이다.

다음의 3가지 모드는 Standard Bitmap 모드이다. 이들 모드에서는 스크린 안에서의 각각의 픽셀이 Red, Green, Blue의 값이나 팔렛트의 인덱스를 가진다. 이들은 실제로 다루기에 매우 간단하지만, 독자가 직접 스크린에 무언가를 그리기에는 속도에서 다소 무리가 따르게 된다.

각 모드를 좀 더 자세히 살펴보도록 하자

Mode 0 4개의 레이어를 모두 지원하지만 회전과 스케일링을 지원하지 않는다.

Mode 1 레이어 0, 1과 2를 지원하며 레이어 2는 회전과 스케일링이 가능하다.

Mode 2 레이어 2와 3을 지원하며 두개 모두 회전과 스케일링이 가능하다.

Mode 3 모드 3은 간단히 16비트 숫자의 1차원 버퍼이며, 각각이 칼라를 나타낸다. 이것은 상당히 많은 메모리를 차지하기 때문에 하드웨어적인 더블버퍼링을 지원하지는 못한다.(독자 스스로 큰 버퍼로 구성할수 있겠지만) 더블버퍼링은 가상스크린에 그림을 그려두고 실제 스크린에 한꺼번에 전송하는 것을 말한다. 만약 더블 버퍼를 사용하지 않으면 유저가 더디게 그려지는 게임을 볼 가능성이 있다. 이것은 모드 3의 문제이다. - 유저가 알아채지 못할 정도로 스크린을 최대한 빠르게 그리는 것이 어렵기 때문에 말이다.

Mode 4 모드 4 또한 1차원 버퍼이지만 팔렛트로 구성되어 있다. 이것은 독자가 시작시에 스스로 256칼라를 만들어야 된다는 것을 의미하며, 버퍼의 각 숫자들은 이 칼라들의 인덱스를 가르키게 된다. 이는 모드 4에서는 단지 8bit로 밖에 표현할수 없지만, 더블 버퍼링을 사용할 수 있게 된다는 것을 의미하기도 한다.

「불행히도 독자는 GBA 16bit를 단지 단번에 쓸수 밖에 없다는 것이다. 이것은 모드 4를 쓸때 서로 인접한 두개 색의 마스크를 요구하며, 이 때문에 모드 4가 느려질수 있는것을 막는다.(역자주 :이부분은 번역이 어색한 수준을 뛰어넘어 외계어가 되버렸군요. 원문을.. 쿨럭.. 원문 : Unfortunately, you can only write to the GBA 16 bits at a time. This means that writing to Mode 4 requires the masking of the two colors adjacent to each other, and because of this hinderance Mode 4 is slower than it should be.)」

불행히도, 한번에 16bit씩만 쓰기가 가능하다. 즉, 모드 4에서 쓰기작업은 서로 인접한 두개의 색을 한꺼번에 기입해야만 한다는 의미이다. 이것은 모드 4에서 느려짐을 방지하기 위함이다.(모드 4에서는 느려짐을 방지하기 위해, 단번에 16bit씩만 쓰기가 가능하도록 되어 있나봅니다. 허접하지만 의역해 보았습니다. -Taiky)

Mode 5 모드 5는 더블 버퍼와 16비트 칼라를 지원한다. 단 스크린의 사이즈가 160x128로 제한된다.

Sprites GBA는 팔렛트를 가지고 있는 스프라이트의 하드웨어적 렌더링을 지원한다. 스프라이트는 서로 256칼라의 팔렛트를 공유하거나 16색의 팔렛트를 사용할수 있다. 이 팔렛트는 스크린의 팔렛트와는 완전히 별개의 것이며, 이것은 독자가 한 화면에서 한번에 최대 512칼라를 사용할 수 있게 된다는 것을 의미한다. Pretty, ain't it?

스프라이트는 8x8에서 64x64까지 여러 사이즈를 가질수 있다. 이것은 한번에 사용할 128개의 하드웨어적인 별개 스프라이트를 정의 하기에는 충분하다. - 이것에 대해 독자가 생각하고 한번에 그렇게 많이 그려질 필요가 없다는 것을 깨닫길 바란다. 타일모드에서 독자는 스프라이트 데이타를 저장할수 있는 32kb의 메모리를 갖게 되며 다른 모드에선 16kb를 갖게 된다.

Sound

불행히도, 필자는 사운드에 대해선 조금밖에 알지 못하지만, 희망적인건 이것이 이 기사의 끝에서 바뀔것이라는 거다. 필자가 이해하 하고 있는 것은 4개의 Standard 음악 채널과 이펙트 사운드를 섞기 위한 2개의 채널이 있다는 것이다. 더이상 이 굉장한 감상에 대한 정보는 없다.

What we will need

필자는 우리가 앞으로 필요한 대부분의 툴에 대해 소개할 것이지만 독자가 시작하는데 필요한 것들은 얼마 되지 않는다.

Tools

독자는 비트맵 에디터(ie : Paint Shop Pro or Photoshop)와 Text Editor(Notepad)를 원할 것이다. 비록 GBA는 직접적으로 윈도우 표준 포맷의 bitmap을 읽지는 않지만 나중에 필자가 Conversion Tools을 소개해 줄것이다. Notepad는 독자의 코드를 쓰기 위해 필요하다. 사실, 필자는 MSVC++을 코드를 작성하는데 사용하며 필자는 단지 3rd Praty 컴파일러를 쓰고 있지만, 이것은 독자들이 선택할 문제다.

Compiler

필자는 사용하기 쉬운 DevKitAdvance를 강력히 추천한다.(http://www.io.com/~fenix/devkitadv)

Hardware

명백히 독자는 GBA를 원할것이다. 독자가 이것을 가지고 있지 않아도 독자가 작업하는 하드웨어에서 충분히 당신의 작업을 즐겁게 지켜볼수 있다.

만약 독자가 자신의 프로그램을 GBA에서 보고 싶다면 Flash Card와 Linker를 구입하라. www.lik-sang.com에서 "Flash Advance 64M ready to go Set"을 구입하면 두가지를 구비 할 수 있다.

Next Article

Next article, I'm going to go into getting you familiar with the frikkin' compilation that plagued me for so long. 필자는 또한 시작하기 쉬운 bitmap 스크린 모드(3, 4, 5)를 살펴 볼것이다.


제일 위로
최종 수정 일시: 05월 04일(2007년) 05:33 PM 편집 | 정보 | 차이 | 비슷한 페이지 DebugInfo
유용한 페이지들: 분류 분류 | 자유로운 연습장 SandBox | 무작위 페이지들 RandomPages | 인기있는 페이지들 MostPopular