[한글화 강좌]중급 1장 - 하드웨어 구조를 이해하자![한글화 강좌]중급 1장 - 하드웨어 구조를 이해하자!

Posted at 2011. 9. 1. 00:07 | Posted in 이전 카테고리/한글화 강좌 시즌 2
한글화 강좌 중급편 제 1장 하드웨어 구조를 이해하자 편입니다!

사실 하드웨어 구조를 이해하는 것은 한글화 외에 시스템의 동작 원리 등을 이해하는 데에도 많은 도움이 됩니다.
중급 강좌는 주로 이런 쪽으로 강좌를 할 예정이며 우선 다양한 기기의 하드웨어 구조를 문서를 보면서 차근차근 알아보는 쪽으로 가겠습니다. ^^

게임기의 하드웨어는 사용자 입력 인식(버튼, 터치 등), 게임에서 필요한 연산 처리, 그래픽 출력, 외부 장치와의 통신(Wi-Fi 등), 사운드의 재생, 메모리 관리 등등.. 다양한 일을 수행합니다.

따라서 게임 제작시에는 게임기의 특성에 맞춰서 게임 개발을 하게 되는데, 하드웨어 구조를 이해하면 게임의 내부 루틴이나 구조를 쉽게 이해할 수 있습니다.

이런 하드웨어 구조의 전체적인 설명을 스펙(Specifications) 이라고 하며 컴퓨터를 살 때에도 흔히 스펙을 보고 컴퓨터를 사지요.(다만 컴퓨터의 스펙은 성능 차이만 있을 뿐 대부분 호환이 가능하며, 게임기에서의 스펙은 거의 게임기마다 고유합니다.)
 
그렇다면 이 스펙에는 무엇이 있는지 우선 몇가지 알아보겠습니다.
우선 가장 중요한 CPU에 대한 설명이 있습니다.
CPU에는 아키텍처(architecture)라고 하는 것이 있는데 이 아키텍처라는 것에는 명령어의 집합, 처리 방법, 번지 부여 방식 등이 포함됩니다.
아키텍처는 크게 PC에서 사용하는 X86또는 X64,  MIPS, ARM, Z80 등이 있습니다.
이 중에서 현재 가장 많이 사용되는 아키텍처는 x86과 ARM인데 x86은 위에서 말한 것 처럼 PC에서 사용되며 흔히 PC에서 32비트라고 부르는 것은 x86을 뜻합니다. 그리고 ARM은 휴대용 기기에서 주로 사용되는데 아이폰이나 갤럭시 등의 스마트폰에서도 arm 기반 아키텍처를 사용합니다.

아키텍처는 명령어의 집합을 포함하고 있으므로 아키텍처가 다르면 당연히 게임의 내부 코드 또한 달라집니다. 이런 게임의 내부 코드를 수정할때는 기계어를 알아야 수정이 가능한데, 이 기계어를 사람이 볼 수 있게 일종의 언어 코드로 바꾼 것이 바로 어셈블리 언어입니다.

물론 아키텍처가 같다고 해서 언어 구조가 완전히 같지는 않습니다.
이유는 CPU 아키텍처를 커스터마이즈하는 경우가 있어서, 특정 명령어를 없에기도 하고 자체적으로 추가하기도 하기 떄문입니다.
하지만 기본적인 구성은 거의 비슷합니다.

다음으로 스펙에는 I/O에 대한 구조가 포함됩니다.
I/O는 입출력(Input/Output)의 약자인데 데이터를 다른 하드웨어로 옮기거나 다른 하드웨어에서 정보를 받아올떄 쓰입니다.
사용자 입력도 이 I/O 시스템에 의해 처리되고 그래픽/사운드나 다른 출력도 마찬가지입니다.
I/O에 대한 구조에는 어떤 장치가 있는지, 장치와의 통신 방법은 무엇인지 에 대해서 적혀있습니다.

그 다음으로는 메모리 맵이라는 것이 있습니다.
메모리 맵은 메모리를 어떤 식으로 배치 해뒀는지를 기록해놓은 문서입니다.
포인터 강좌에서 보신 분들은 아시겠지만 GBA에서는 포인터를 찾을때 0x8000000 이라는 값을 더합니다.
이 정보도 메모리 맵에서 찾을 수 있는데 GBA의 메모리 맵에는 0x8000000부터 0xA000000 까지에는 카트리지 데이터가 위치한다고 적혀 있습니다.
이렇게 매모리 맵을 참고하면 데이터를 찾거나 코드 추가시에도 아주 유용합니다.

이상 중급 강좌 첫 편인 하드웨어 구조를 이해하자 편을 마칩니다.
이해가 안되시는 부분이 있으시면 문의 주시면 답변해드리겠습니다.
//