이미 소장하고 있다면 판매해 보세요.
|
베타리더 후기 xiii
프롤로그 xv 이 책에 대하여 xvii PART I 준비운동 CHAPTER 1 MSX 플랫폼과 친해지기 3 1.1 에뮬레이터 5 1.2 MSX1 게임 7 1.3 MSX1 스펙 9 1.4 메모리 레이아웃 11 마치며 13 CHAPTER 2 개발 환경 구축 14 2.1 IDE 17 2.2 WSL2 18 2.3 우분투 20.04 LTS 18 2.4 빌드 시스템 및 WSL 환경 구축 19 __2.4.1 콘솔을 이용하는 방법 20 / 2.4.2 GUI 프로그램을 이용하는 방법 21 __2.4.3 retro_msx 배포판의 내용 22 2.5 소스 코드 설치 23 2.6 소스 코드 빌드 24 마치며 25 PART 2 MSX1 게임 개발 CHAPTER 3 기초 다지기 29 3.1 ubox MSX 라이브러리 30 3.2 HelloWorld 33 __3.2.1 소스 분석 35 / 3.2.2 ubox API 38 __3.2.3 crt0.z80 40 / 3.2.4 Makefile 42 / 3.2.5 실습 42 3.3 콘솔 모드 HelloWorld 43 3.4 타이머 45 3.5 외부 라이브러리 활용하기 48 3.6 배경음악 50 3.7 효과음 52 마치며 54 CHAPTER 4 샘플 게임 프로젝트 56 4.1 스네이크 56 __4.1.1 게임 로직 57 / 4.1.2 정리 63 4.2 소코반 64 __4.2.1 게임 로직 65 / 4.2.2 정리 71 4.3 테트리스 71 __4.3.1 자료구조 72 / 4.3.2 게임 로직 73 / 4.3.3 정리 79 4.4 브레이크아웃 80 __4.4.1 스프라이트 81 / 4.4.2 현대적 렌더링 시스템 81 __4.4.3 MSX1의 스프라이트 시스템 84 / 4.4.4 게임 로직 88 마치며 92 CHAPTER 5 GREEN 프로젝트 94 5.1 프로젝트 구성 95 5.2 메인 함수 및 시스템 초기화 97 5.3 게임 로직 100 __5.3.1 초기화 100 / 5.3.2 게임 루프 106 / 5.3.3 상호작용 107 마치며 112 CHAPTER 6 리소스 유틸리티 115 6.1 맵 데이터 116 __6.1.1 Tiled 맵 에디터 116 / 6.2.1 map.py 121 / 6.1.3 정리 126 6.2 타일 데이터 126 6.3 스프라이트 데이터 127 6.4 사운드 130 __6.4.1 배경음악 131 / 6.4.2 효과음 133 마치며 134 CHAPTER 7 피라미드 퀘스트 136 7.1 게임 로직 137 7.2 맵 데이터 만들기 144 7.3 유틸리티 커스터마이징 147 마치며 150 CHAPTER 8 그래픽 작업 152 8.1 타일셋 152 __8.1.1 기본 아이디어 153 / 8.1.2 근접 색상 구하기 156 / 8.1.3 24비트 PNG로 변환 157 8.2 스프라이트 제작 157 8.3 실전 162 마치며 166 PART 3 심화 주제 CHAPTER 9 디버깅 169 9.1 로깅 170 9.2 openMSX 디버거 173 __9.2.1 디버거 사용법 175 / 9.2.2 심벌 파일 176 / 9.2.3 심벌 변환 및 추가 179 __9.2.4 브레이크포인트 테스트 181 / 9.2.5 변수 조회 184 / 9.2.6 변수 조회 실습 187 마치며 190 CHAPTER 10 크로스 플랫폼 프로그래밍과 포팅 191 10.1 크로스 플랫폼 프로그래밍 192 10.2 Win32 프로젝트 193 __10.2.1 기본 아이디어 194 / 10.2.2 ubox API 수정 195 __10.2.3 GREEN 프로젝트 196 / 10.2.4 ubox API 구현 197 / 10.2.5 정리 204 10.3 안드로이드 프로젝트 205 __10.3.1 기본 프로젝트 생성 206 / 10.3.2 안드로이드 SDL 212 __10.3.3 가상 패드 217 / 10.3.4 포팅 218 / 10.3.5 정리 219 10.4 YUZA OS 220 10.5 에뮬레이터 222 마치며 226 PART 4 진짜 MSX의 세계 CHAPTER 11 MSX-C 229 11.1 개발 환경 구축 230 11.2 컴파일 이해하기 234 11.3 편집기 235 11.4 컴파일 속도 높이기 235 __11.4.1 MSX-C 툴 성능 개선 236 / 11.4.2 하드웨어 교체 236 __11.4.3 플로피에서 하드 디스크로 전환 236 11.5 샘플 프로젝트 237 __11.5.1 슈터 237 / 11.5.2 틱택토 238 / 11.5.3 Tiny Shell 240 마치며 241 CHAPTER 12 MSX 개발을 위한 레퍼런스 243 12.1 SDCC 245 __12.1.1 환경 구축 245 / 12.1.2 스타트업 코드 246 __12.1.3 Skeleton C project for MSX 246 / 12.1.4 libMSX 247 __12.1.5 MSX SDCC Boilerplate 248 / 12.1.6 I.N.E.R.T.I.A. 249 __12.1.7 MSX Fighter 250 / 12.1.8 azombie 251 12.2 HI-TECH C 컴파일러 251 __12.2.1 HelloWorld 252 / 12.2.2 C experiments for msx 253 / 12.2.3 CR3 254 12.3 Fusion-C 255 __12.3.1 환경 설정 256 / 12.3.2 bncball 257 __12.3.3 Brick Breaker Santa Demo 258 / 12.3.4 Captain kik 260 __12.3.5 Atlanta 260 / 12.3.6 Star Rangers 262 / 12.3.7 레퍼런스 263 12.4 비주얼 스튜디오 263 __12.4.1 메이크파일 프로젝트 264 / 12.4.2 MSX-Templates-for-VisualStudio 266 __12.4.3 Arya 267 / 12.4.4 테트리스 267 12.5 Z88DK 268 __12.5.1 환경 구축 269 / 12.5.2 plot 269 / 12.5.3 틱택토 270 __12.5.4 balloons 270 / 12.5.5 Death Star 271 __12.6 RetroDeluxe 게임 엔진 272 12.7 MSX2DAAD 274 마치며 276 CHAPTER 13 기타 언어 MSX 프로그래밍 278 13.1 MSX 베이직 278 __13.1.1 가상 플로피 디스크 준비 278 / 13.1.2 스피드 게임 280 __13.1.3 베이직 명령어 281 / 13.1.4 PAPPLE 281 __13.1.5 MSXPen 282 / 13.1.6 레퍼런스 284 13.2 Z80 어셈블리 285 __13.2.1 HelloWorld 286 / 13.2.2 트랜스볼 289 / 13.2.3 MSXPen 290 __13.2.4 8bitworkshop IDE 293 / 13.2.5 펭귄 플랫포머 게임 294 __13.2.6 퐁 295 / 13.2.7 메탈기어 296 13.3 자바 297 MSX 편 마무리 302 PART 5 MS-DOS용 게임 만들기 CHAPTER 14 MS-DOS 살펴보기 307 14.1 XT 310 14.2 286 310 14.3 메모리 관리 314 __14.3.1 EMS 318 / 14.3.2 XMS 319 14.4 386 321 __14.4.1 EMM386 322 / 14.4.2 도스 익스텐더 323 14.5 486 326 마치며 326 CHAPTER 15 개발 도구 살펴보기 328 15.1 도스박스 329 15.2 컴파일러 333 15.3 환경 구축 333 CHAPTER 16 도스 게임 프로젝트 335 16.1 메모리 모델 335 16.2 도스박스 빌드 시스템 338 __16.2.1 테트리스 338 / 16.2.2 슈터 프로젝트와 MegaBreak 340 __16.2.3 Little Game Engine 342 / 16.2.4 Commander Keen in Keen Dreams 343 16.3 콘솔 도스 빌드 시스템 345 __16.3.1 Jump 'n Bump 345 / 16.3.2 Eradicate 346 마치며 347 CHAPTER 17 VGALIB 349 17.1 Win32 빌드 350 17.2 도스박스 + 볼랜드 C++ IDE 350 17.3 도스박스 + 비주얼 스튜디오 코드 351 17.4 듀얼 모니터를 활용한 디버깅 352 마치며 354 CHAPTER 18 알레그로4 355 18.1 개발 시스템 구축: Win32/DOS 컴플리트 시스템 356 18.2 HelloWorld 358 __18.2.1 Win32 빌드 359 / 18.2.2 DOS 빌드 360 __18.2.3 Makefile 362 / 18.2.4 정리 363 18.3 알레그로4 프로그래밍 기초 363 __18.3.1 기본 프레임워크 363 / 18.3.2 디버깅 365 18.4 알레그로4 API 활용 366 __18.4.1 비트맵 로딩 367 / 18.4.2 더블 버퍼링 368 / 18.4.3 타이머 370 __18.4.4 바운딩 박스를 통한 충돌 감지 371 / 18.4.5 스네이크 바이트 373 __18.4.6 데이터 파일 사용하기 374 / 18.4.7 정리 377 18.5 게임 프로젝트: 기초편 377 __18.5.1 브레이크아웃 377 / 18.5.2 테트리스 381 __18.5.3 테트리스 2 382 / 18.5.4 스네이크 바이트 383 18.6 게임 프로젝트: 고급편 386 __18.6.1 슈터 386 / 18.6.2 RA2 387 / 18.6.3 테트리스 388 __18.6.4 스케이터 388 / 18.6.5 마리오 카트 389 / 18.6.6 동키 390 __18.6.7 어드벤처 데모 프로젝트 390 / 18.6.8 호환성 확인 391 18.7 매피 에디터 392 __18.7.1 맵 데이터 작성 393 / 18.7.2 맵 데이터 로드 395 __18.7.3 맵 데이터와 상호작용 397 / 18.7.4 최종 테스트 401 / 18.7.5 정리 402 18.8 서드파티 403 __18.8.1 zlib 404 / 18.8.2 ppcol 404 / 18.8.3 dumb 406 __18.8.4 jptui 407 / 18.8.5 pmask 407 / 18.8.6 libxml2 409 18.9 폭스레인저 리메이크 409 __18.9.1 서드파티 412 / 18.9.2 한글 출력 414 / 18.9.3 게임 로직 417 __18.9.4 게임 리소스 421 / 18.9.5 정리 423 마치며 424 CHAPTER 19 디버깅 실전 426 19.1 32비트 프로그램 427 19.2 Plumber No More 429 __19.2.1 리모트 디버깅 430 / 19.2.2 디버깅 실전 431 마치며 435 CHAPTER 20 SDL + HX 도스 익스텐더 437 20.1 제약 조건 438 __20.1.1 파일 이름 길이 439 / 20.1.2 컴파일러 선택 439 __20.1.3 그래픽 카드 440 / 20.1.4 SDL 버전 문제 440 20.2 환경 구축 441 20.3 샘플 프로그램 442 __20.3.1 Hello 프로젝트 443 / 20.3.2 팩맨#1 444 / 20.3.3 팩맨#2 445 20.4 GREEN 프로젝트 446 마치며 448 MS-DOS 편 마무리 450 PART 6 그 밖의 레트로 플랫폼 게임 프로그래밍 CHAPTER 21 코모도어 64 455 21.1 환경 구축 455 21.2 Ball 458 21.3 C64maze 459 CHAPTER 22 패밀리 컴퓨터 461 22.1 환경 구축 461 22.2 HelloWorld 462 22.3 2D 플랫포머 게임 463 CHAPTER 23 아미가 465 23.1 에뮬레이터 467 23.2 빌드 환경 구축 472 23.3 비주얼 스튜디오 코드 아미가 익스텐션 474 CHAPTER 24 PC 엔진 477 24.1 환경 설정 477 24.2 HelloWorld 478 24.3 bonks 479 CHAPTER 25 메가 드라이브 480 25.1 환경 설정 480 25.2 IDE 설치 481 25.3 HelloWorld 484 25.4 샘플 2D 플랫포머 485 CHAPTER 26 게임보이 486 26.1 환경 구축 486 26.2 HelloWorld 487 26.3 고급 예제 488 26.4 동적 디버깅 489 CHAPTER 27 슈퍼패미컴 492 27.1 환경 설정 493 27.2 HelloWorld 493 27.3 BreakOut 495 CHAPTER 28 3DO 496 28.1 환경 구축 497 28.2 샘플 프로젝트 빌드 498 28.3 Space Invaders Invaders 499 CHAPTER 29 세가 새턴 500 29.1 조 엔진 501 29.2 Saturn Orbit 504 CHAPTER 30 게임보이 어드밴스 506 30.1 환경 구축 507 30.2 문자 출력 507 30.3 Tank Gameboy Advance 508 30.4 Skiing Advance 509 30.5 BATTLE-CITY-GBA 510 30.6 Programmer’s Notepad 511 APPENDIX 부록 APPENDIX A 비주얼 스튜디오 2019 519 A.1 vcpkg 520 A.2 단축키 521 APPENDIX B SDL 524 B.1 플립 프로젝트 525 B.2 레퍼런스 527 에필로그 513 APPENDIX C 우분투 이미지 만들기 529 C.1 SDCC 4.0 설치 530 C.2 파이썬 3.9 설치 530 C.3 hex2bin 531 C.4 아코스 트래커 2 531 찾아보기 533 |
|
롬팩의 최대 크기는 32 KB 이하가 되어야 하며 램의 크기는 8 KB~64 KB, 비디오램은 16 KB라는 것을 기억해두자. 2021년 기준 최신 데스크톱의 메모리는 64 GB, NVIDIA 지포스 RTX 3090의 비디오램의 크기가 24 GB인 것을 생각하면 MSX1 머신의 사양은 너무 초라해 보인다. / 또 인텔 i9 코어 시리즈의 코어 하나의 클록 속도는 대략 4 GHz이며 Z80 프로세서의 클록은 3.58 MHz이므로 비교하기 민망할 정도의 성능이다. 멀티 코어를 고려했을 때, i9 시리즈는 코어가 10개, 논리 코어가 20개인 것을 감안하면 두 CPU 간 성능 격차는 더욱더 벌어진다.
--- p.11 ubox MSX 라이브러리는 MSX1 게임을 쉽게 제작하자는 취지 아래 제작된 C 라이브러리다. 사용자가 최대한 쉽게 사용할 수 있도록 인터페이스를 구축했다. 물론 MSX 베이직 언어와 Z80 언어로도 MSX 게임을 작성하는 것이 가능하지만 언어의 범용성이 낮고 시간 투자 대비 효율성이 떨어지므로 실용적인 언어로 게임을 작성하는 방법을 강구해야 한다. C 언어는 범용적으로 사용되는 언어일 뿐만 아니라 당분간은 사멸할 운명에 처한 언어가 아니므로 C 언어로 MSX 게임을 개발할 수 있다면 최적일 것이라 판단했다. ubox MSX 라이브러리는 Z80 CPU를 제어하는 코드를 Z80 어셈블리 언어로 구현한 다음, 그 코드를 래핑하여 C 언어에서 호출할 수 있도록 구현했다. --- p.30 앞에서 스프라이트의 개념에 대해 자세하게 소개한 이유는 브레이크아웃 게임을 포함해서 앞으로 다룰 게임들이 스프라이트 기능을 사용하기 때문이다. 여기까지 내용을 이해했다면 ubox MSX 라이브러리가 제공하는 스프라이트 관련 함수도 이름을 통해 쉽게 유추할 수 있을 것이다. / 브레이크아웃 게임 역시 메인 함수에서 run_game 함수를 호출하여 메인 로직을 실행한다. InitGame 함수를 호출해서 게임 환경을 초기화하고 draw_map() 함수를 호출해서 맵을 그린다. 그다음 while 루프로 진입을 해서 메인 로직을 실행한다. 공과 패들 같은 스프라이트를 조작하기 위해서는 스프라이트 매니저 시스템을 활용한다. 스프라이트 관련 함수는 spman.h 파일에 정의되어 있으며 spman_init 함수를 호출해서 초기화를 수행한다. --- p.88 게임 개발에서는 게임 콘텐츠 개발이 핵심이지만 부수적으로 버그를 빠른 시간에 잡아낼 수 있는 디버깅 테크닉이 필요하다. 9장에서는 디버깅 테크닉의 대표적인 예로 로깅 기법과 openMSX 및 openMSX 디버거를 활용한 동적 디버깅 기법을 소개했다. / openMSX 디버거를 활용하면 다소 불편하기는 하지만 전역 변수나 로컬 변수, 그리고 함수의 파라미터 값을 조회할 수 있음을 확인했다. 또한 빌드 시 생성한 심벌을 활용하면 실행 코드를 C 소스 레벨에서도 확인 가능했다. 여기서 확인할 수 있는 사항은, 현대의 디버거는 9장에서 살펴봤던 디버깅 단계를 전부 은닉하여 사용자에게 최대한의 편의성을 제공한다는 것이다. 비주얼 스튜디오에서 C++로 작성된 프로그램을 디버깅할 때에는 자동으로 로컬 변수의 이름을 해결하므로 함수 내부를 조회할 때 어셈블리 언어를 볼 필요가 없다. 디버거가 자동으로 작업을 처리해주기 때문이다. --- p.190 설정 파일에 HIMEM.SYS 드라이버를 로드하고 DOS=HIGH 명령을 기술하면 커널의 일부를 HMA 영역으로 이동할 수 있다. / HIMEM.SYS 드라이버를 실행하고 나면 XMS API 호출에 따른 메모리 할당이 가능해진다. 이후 응용프로그램이 XMS API를 사용해서 XMS 메모리에 메모리 할당을 요청하거나 읽기를 실행하면 HIMEM.SYS에서 구현한 XMS API 구현체가 실행된다. 리얼 모드에서는 1 MB 이상의 메모리에 접근하는 것이 불가능하기 때문에 HIMEM.SYS는 먼저 CPU 운영모드를 16비트 보호 모드로 전환한다. --- p.320 킥스타트(Kickstart)는 코모도어가 개발한 아미가 컴퓨터 부트스트랩 펌웨어다. IBM-PC에 전원을 넣으면 BIOS가 하드웨어를 초기화하듯이 킥스타트도 아미가 컴퓨터의 하드웨어를 초기화한다. 다만 IBM-PC의 BIOS와는 달리, 킥스타트는 자체적으로 아미가(OSAmigaOS)의 구성 요소를 내장하고 있으며 아미가OS의 핵심 구성 요소를 초기화하는 책임도 가진다. 킥스타트는 하드웨어를 초기화하고 OS의 초기화 작업을 완료한 다음에는 하드 디스크나 플로피 디스크 등의 매체를 읽어서 부팅을 시도한다. --- p.466 |
|
실기에서 돌아가는 진정한 레트로 게임 개발, 어른이 된 지금이라면 만들 수 있다
추억 속의 MSX 게임을 오늘날의 개발 툴로 제작하는 방법을 파헤친다. C 언어와 비주얼 스튜디오 등 현세대 도구로 32 KB에 불과한 롬팩에 들어갈 게임을 코딩하고 빌드해본다. 이 코드베이스를 윈도우, 안드로이드, MS-DOS 등으로 포팅하며 크로스 플랫폼 프로그래밍과 동적 디버깅 기법을 익힌다. MSX 다음으로는 MS-DOS 게임 제작에 필요한 지식과 ‘듀얼 시스템’ 개발법을 자세히 살펴본다. 마지막으로 C64, NES, 아미가, PCE, MD, GB, SFC, 3DO, 세가 새턴, GBA 등 레트로 플랫폼에서의 개발 및 빌드 방법을 개괄한다. 현존하는 모든 레트로 게임 개발 지식을 가장 포괄적으로 집대성한 책이라고 자부한다. 1부는 MSX 플랫폼을 개괄하고, 빌드 시스템 및 WSL 환경을 구축한다. 2부의 핵심은 C 언어로 작성된 ubox MSX 라이브러리를 활용한 게임 제작이다. 비주얼 스튜디오 코드로 간단한 샘플 코드를 작성하는 것에서 시작해, 〈왕가의 계곡〉과 유사한 완성도 높은 게임 소스 코드를 분석하며, 맵, 스프라이트, 사운드 등 리소스 사용법과 간단한 제작법까지 살펴본다. 여기까지의 코드를 대상으로, 3부에서 처음으로 디버깅과 크로스 플랫폼 프로그래밍을 설명한다. 4부는 실제 MSX 내에서 MSX-C, MSX 베이직, 어셈블리 등으로 개발하는 방법을 살펴보고, SDCC, HI-TECH C 컴파일러, Fusion-C 등 관련 도구, 그리고 샘플 프로젝트들을 분석한다. 5부는 MSX 개발에서 배운 지식을 바탕으로 MS-DOS에서 작동하는 게임을 만드는 방법을 알아본다. MS-DOS 개발의 가장 큰 걸림돌인 메모리 관리 모델을 자세히 설명하고, 개발 및 디버깅의 편의를 위해 두 운영체제를 활용하는 ‘듀얼 시스템’ 방법론을 도입한다. 도스박스, DJGPP, VGALIB, 알레그로4 등으로 샘플 소스들을 빌드해보며 모던 개발 환경에서 MS-DOS 게임을 제작하는 방법을 익힌다. 디버깅 또한 한 챕터를 할애해 좀 더 자세히 다루고, SDL과 HX 도스 익스텐더를 사용한 더욱 확장된 크로스 플랫폼 프로그래밍의 가능성에 대해서도 살펴본다. 6부는 앞에서 익힌 지식을 바탕으로, 코모도어 64, (슈퍼)패미컴, 아미가, PC 엔진, 메가 드라이브, 게임보이 (어드밴스), 3DO, 세가 새턴 등 10가지 레트로 플랫폼에서 게임을 개발하고 빌드하는 방법을 간단히 살펴본다. |