본문으로 건너뛰기

용어집

가이드에 나오는 용어 154개를 가나다순으로 모았습니다. 영문으로 시작하는 용어는 맨 뒤에 있습니다. 링크를 누르면 그 용어를 설명한 장의 절로 갑니다.

ㄱ

가변폭 폰트 variable width font, VWF

글자마다 폭이 다른 폰트. 글자를 비트 단위로 밀어 붙여 그립니다.

7장 그림과 글자

감시 창 Watch

주소나 식을 적어 두면 멈출 때마다 그 값을 보여 주는 디버거 창

12장 에뮬레이터로 확인

거리·길이 distance / length

LZ 복사 지시의 두 값. 몇 칸 앞에서, 몇 바이트를 가져올지

9장 압축 ① RLE·LZSS

고정폭 fixed-width

모든 글자가 같은 폭을 차지하는 폰트

7장 그림과 글자

글리프 glyph

글자 하나의 그림

7장 그림과 글자

글자표 table file (.tbl)

바이트 값과 글자의 대응을 적은 표

8장 대사는 어떻게 저장되나

끝 코드 terminator

문자열이나 데이터의 끝을 알리는 값

8장 대사는 어떻게 저장되나

색인으로

ㄴ

내부 헤더 internal ROM header

롬 안에 게임 이름·매핑·크기·체크섬을 적어 둔 곳. LoROM은 파일 0x7FC0

4장 주소와 뱅크

네이티브 모드 native mode

16비트 레지스터를 쓸 수 있는 모드. CLC와 XCE로 바꿉니다.

3장 CPU와 65c816

노드 node

트리의 갈림길이나 끝 하나

10장 압축 ② 허프만

색인으로

ㄷ

다시 배치 relocation

대사를 처음부터 다시 채우고 포인터를 새로 만드는 일

8장 대사는 어떻게 저장되나

다이렉트 페이지 direct page

짧은 주소(LDA $10)의 기준 위치. D 레지스터에 담습니다.

3장 CPU와 65c816

대본 script

번호 없이 한 줄로 이어 둔 대사 전체

8장 대사는 어떻게 저장되나

덤프(대사) dump

글자표로 롬의 대사 바이트를 글자로 바꿔 꺼내는 일

8장 대사는 어떻게 저장되나

덤프(롬) ROM dump

카트리지에서 뽑아낸 롬 파일

0장 롬과 패치

덤프(메모리) memory dump

실행 중인 메모리의 내용을 파일로 저장한 것

12장 에뮬레이터로 확인

덮어쓴 명령

점프 명령을 넣느라 지운 원래 명령. 새 코드 안에서 다시 실행해야 합니다.

6장 후킹

데이터 뱅크(DB) data bank register

16비트 주소로 읽고 쓸 때 앞에 붙는 뱅크를 담은 레지스터

3장 CPU와 65c816

디버거 debugger

실행을 멈추고 명령, 레지스터, 메모리를 들여다보는 도구

12장 에뮬레이터로 확인

색인으로

ㄹ

레지스터(하드웨어) I/O register

화면·소리·입력 칩을 다루는 주소. $2100–, $4200– 등

4장 주소와 뱅크

레지스터(CPU) register

CPU 안에서 지금 다루는 값을 잠깐 쥐는 작은 칸. A, X, Y, P 등

3장 CPU와 65c816

레코드 record

IPS에서 위치 3바이트, 길이 2바이트, 바꿀 내용으로 된 묶음 하나

0장 롬과 패치

롬 ROM

카트리지 칩에 들어 있는, 읽기만 하는 메모리. 또는 그 내용을 통째로 옮긴 파일

0장 롬과 패치

롬 확장 ROM expansion

자리가 모자라 롬 파일 자체를 키우는 일

11장 롬 확장

루트 root

트리의 맨 위 노드

10장 압축 ② 허프만

리셋 벡터 reset vector

전원을 켜면 실행을 시작할 주소를 적어 둔 자리($00:FFFC)

3장 CPU와 65c816

리틀 엔디안 little endian

작은 자리 바이트를 앞 칸에 두는 순서. 65c816이 이 순서입니다.

2장 엔디안

리프 leaf

더 갈라지지 않는 끝 노드. 허프만 트리에서는 글자가 리프에 있습니다.

10장 압축 ② 허프만

색인으로

ㅁ

마스크 mask

AND로 필요한 비트만 남길 때 쓰는 값

1장 비트·바이트·16진수

매핑 mapping

롬 파일의 어느 부분이 CPU 주소의 어디에 보이는지 정한 규칙

4장 주소와 뱅크

맵 모드 바이트 map mode byte

내부 헤더에서 매핑과 FastROM 여부를 적은 바이트($FFD5)

4장 주소와 뱅크

명령 instruction

CPU가 한 번에 하는 아주 작은 일 하나. LDA, STA 같은 것

3장 CPU와 65c816

미러 mirror

같은 메모리가 두 주소 이상에서 보이는 것

4장 주소와 뱅크

색인으로

ㅂ

바이트 byte

비트 여덟 개를 묶은 단위. 0부터 255까지의 숫자 하나

1장 비트·바이트·16진수

배경 레이어(BG) background layer

화면을 이루는 배경 판. BG1–BG4까지 겹쳐 그립니다.

7장 그림과 글자

뱅크 bank

24비트 주소의 맨 위 8비트. 주소 공간을 64KB씩 나눈 묶음

4장 주소와 뱅크

벡터 vector

인터럽트나 리셋 때 갈 주소를 적어 둔 자리

5장 어셈블리 기초

보수(체크섬) checksum complement

체크섬의 비트를 모두 뒤집은 값. 체크섬과 더하면 $FFFF

1장 비트·바이트·16진수

부호 있는 수 signed

같은 바이트를 −128–127로 읽는 방식. 0–255로 읽으면 부호 없는 수

1장 비트·바이트·16진수

분기 branch

플래그를 보고 다음에 실행할 곳을 바꾸는 명령

5장 어셈블리 기초

비트 bit

0 또는 1을 담는 한 칸

1장 비트·바이트·16진수

비트열 bitstream

바이트 경계와 상관없이 비트가 이어진 데이터

10장 압축 ② 허프만

비트평면 bitplane

색 번호의 같은 자리 비트만 모은 판. 타일 바이트는 평면별로 놓입니다.

7장 그림과 글자

빅 엔디안 big endian

큰 자리 바이트를 앞 칸에 두는 순서. IPS의 위치와 길이가 이 순서입니다.

2장 엔디안

빈 공간 free space

롬에서 아무도 쓰지 않는 자리. 00이나 FF가 이어져도 빈 곳이 아닐 수 있습니다.

6장 후킹

색인으로

ㅅ

사이클 cycle

명령이 걸리는 시간의 단위

5장 어셈블리 기초

삽입 insertion

번역문을 글자표로 다시 바이트로 바꿔 롬에 넣는 일

8장 대사는 어떻게 저장되나

서브루틴 subroutine

여러 곳에서 불러 쓰는 코드 덩어리. JSR로 부르고 RTS로 돌아옵니다.

5장 어셈블리 기초

세이브 RAM save RAM

카트리지에서 세이브 데이터를 담는 메모리

4장 주소와 뱅크

세이브스테이트 savestate

에뮬레이터가 그 순간의 기계 상태를 통째로 저장한 것

12장 에뮬레이터로 확인

수직 귀선 기간 vertical blank

한 화면을 다 그리고 다음 화면을 그리기 전의 짧은 시간

5장 어셈블리 기초

스택 stack

나중에 넣은 것을 먼저 꺼내는 메모리. 돌아갈 주소와 레지스터를 잠깐 맡깁니다.

5장 어셈블리 기초

시프트 shift

비트를 한쪽으로 미는 연산. 왼쪽으로 한 칸이면 ×2

1장 비트·바이트·16진수

실기 real hardware

실제 게임기

12장 에뮬레이터로 확인

쓰기 감시 write watch

멈추지 않고 그 주소에 값을 쓰는 순간을 기록하는 것. 누가 값을 바꾸는지 찾을 때 씁니다.

6장 후킹

색인으로

ㅇ

압축 compression

데이터를 더 적은 바이트로 줄여 담는 것. 되돌리는 것은 압축 해제(풀기)

9장 압축 ① RLE·LZSS

어셈블러 assembler

어셈블리를 바이트로 바꾸는 도구. 네 패치는 asar를 썼습니다.

5장 어셈블리 기초

어셈블리 assembly

명령 바이트마다 사람이 읽을 이름을 붙여 적은 것

5장 어셈블리 기초

에뮬레이션 모드 emulation mode

전원을 켠 직후 6502처럼 도는 모드

3장 CPU와 65c816

에뮬레이터 emulator

게임기를 소프트웨어로 흉내 내는 프로그램

12장 에뮬레이터로 확인

엔디안 endianness

여러 바이트로 된 숫자를 메모리에 놓는 순서

2장 엔디안

역어셈블 disassembly

바이트를 어셈블리로 바꿔 읽는 것. 반대로 바꾸는 도구가 어셈블러

5장 어셈블리 기초

오픈 버스 open bus

아무것도 연결되지 않은 주소를 읽으면 직전에 버스에 실린 값이 나오는 현상

12장 에뮬레이터로 확인

옵코드 opcode

명령의 종류를 나타내는 첫 바이트. 3장에서는 "명령 바이트"라고 불렀습니다.

5장 어셈블리 기초

완성형 KS X 1001

자주 쓰는 한글 2,350자를 정해 둔 글자 집합

7장 그림과 글자

워드 word

2바이트. VRAM 주소는 워드 단위로 셉니다.

7장 그림과 글자

이벤트 뷰어 event viewer

한 프레임 안에서 레지스터 접근·NMI·DMA가 일어난 위치를 그려 보여 주는 창

12장 에뮬레이터로 확인

인자 argument

제어 코드나 명령 뒤에 붙는 값

8장 대사는 어떻게 저장되나

인터럽트 interrupt

CPU가 하던 일을 멈추고 정해진 루틴을 실행하게 하는 신호

5장 어셈블리 기초

입력 스크립트 input script

몇 번째 프레임에 무엇을 누르고 찍을지 한 줄씩 적은 파일

12장 에뮬레이터로 확인

색인으로

ㅈ

자동 컨트롤러 읽기 auto joypad read

수직 귀선 기간에 하드웨어가 컨트롤러 값을 읽어 $4218–$421F에 넣는 기능

12장 에뮬레이터로 확인

접두 부호 prefix code

어떤 부호도 다른 부호의 앞부분이 아닌 부호. 구분 기호 없이 읽힙니다.

10장 압축 ② 허프만

정규 허프만 부호 canonical Huffman code

부호 길이만 저장하고 부호는 정한 규칙으로 다시 만드는 방식

10장 압축 ② 허프만

정확도 accuracy

에뮬레이터가 실제 기계를 얼마나 똑같이 흉내 내는지

12장 에뮬레이터로 확인

제어 코드 control code

줄바꿈, 기다리기, 이름 넣기처럼 글자가 아닌 명령을 나타내는 바이트

8장 대사는 어떻게 저장되나

조건식 condition

중단점이 특정 값일 때만 멈추도록 붙이는 식

12장 에뮬레이터로 확인

주소 지정 방식 addressing mode

명령이 값을 어디서 가져올지 정하는 방식. 즉시값, 절대 주소, 인덱스 등

5장 어셈블리 기초

중계 코드 trampoline

가까운 곳에 몇 바이트만 두고 먼 뱅크의 본체를 부르는 코드

6장 후킹

중단점 breakpoint

이 주소를 실행·읽기·쓰기하면 멈추라는 표시

12장 에뮬레이터로 확인

즉시값 immediate

# 뒤에 적은 값 그 자체. #이 없으면 그 주소에 든 값

5장 어셈블리 기초

색인으로

ㅊ

창(대사) text window

대사가 나오는 화면 속 상자

8장 대사는 어떻게 저장되나

창(LZ) window

복사해 올 수 있는 바로 앞 구간. 출력이 늘면 함께 미끄러집니다.

9장 압축 ① RLE·LZSS

체크섬 checksum

롬의 모든 바이트를 더한 값의 아래 16비트. 내부 헤더에 적혀 있습니다.

1장 비트·바이트·16진수

추적 기록 trace log

실행한 명령을 레지스터와 함께 한 줄씩 남긴 기록

12장 에뮬레이터로 확인

치트 코드 cheat code

게임 메모리의 값을 강제로 바꾸는 코드. Pro Action Replay 코드는 RAM에 값을 계속 써 넣고, Game Genie 코드는 롬을 읽을 때 값을 바꿔치기합니다.

12장 에뮬레이터로 확인

색인으로

ㅋ

카피어 헤더 copier header

옛 복사 장치가 롬 앞에 붙인 512바이트. 붙어 있으면 모든 파일 오프셋이 0x200 밀립니다.

0장 롬과 패치

코어 core

libretro 규격으로 만든 에뮬레이터 파일

12장 에뮬레이터로 확인

콜백 callback

어떤 일이 생기면 불러 달라고 등록해 두는 함수

12장 에뮬레이터로 확인

크기 바이트 ROM size byte

내부 헤더에 롬 크기를 "1KB × 2의 n제곱"의 n으로 적은 바이트($FFD7)

11장 롬 확장

색인으로

ㅌ

타일 tile

가로세로 8픽셀짜리 작은 그림. 화면은 타일을 이어 붙여 그립니다.

7장 그림과 글자

타일맵 tilemap

화면의 각 칸에 몇 번 타일을 놓을지 적은 표

7장 그림과 글자

트리 tree

한 점에서 아래로 갈라져 나가는 자료 구조

10장 압축 ② 허프만

색인으로

ㅍ

파일 오프셋 file offset

파일 안에서 몇 번째 바이트인지. 첫 바이트가 0이고, 이 가이드는 0x를 붙여 적습니다.

0장 롬과 패치

팔레트 palette

타일의 색 번호가 실제로 어떤 색인지 정한 색 묶음

7장 그림과 글자

패치 patch

원본에서 바뀐 곳만 적어 둔 파일

0장 롬과 패치

포인터 pointer

다른 데이터의 주소를 담은 값

2장 엔디안

포인터 표 pointer table

대사마다 시작 주소를 적은 표. 대사 번호로 위치를 찾습니다.

8장 대사는 어떻게 저장되나

폰트 font

게임 글자를 그린 타일 모음

7장 그림과 글자

폰트 칸

폰트에서 글자 하나가 차지하는 자리. 칸 수가 넣을 수 있는 글자 수를 정합니다.

7장 그림과 글자

프레임 frame

화면 한 장. 슈퍼 패미컴은 1초에 약 60프레임을 그립니다.

12장 에뮬레이터로 확인

프로그램 뱅크(PB) program bank register

지금 실행 중인 코드의 뱅크

3장 CPU와 65c816

플래그 flag

P 레지스터의 한 비트. 방금 결과가 0인지, 올림이 났는지 등을 표시합니다.

3장 CPU와 65c816

플래그 바이트 flag byte

뒤따르는 항목들이 그대로인지 복사인지를 비트 하나씩 적은 바이트

9장 압축 ① RLE·LZSS

플래시 카트리지 flash cartridge

롬 파일을 SD 카드에서 읽어 실기에서 돌리는 카트리지

11장 롬 확장

피연산자 operand

옵코드 뒤에 붙는 값이나 주소. 0–3바이트

5장 어셈블리 기초

색인으로

ㅎ

한글패치

롬의 바이트 일부를 바꿔 게임을 한국어로 만드는 패치

0장 롬과 패치

해제 루틴 decompression routine

롬 안에서 압축을 푸는 코드

9장 압축 ① RLE·LZSS

허프만 부호 Huffman code

자주 나오는 글자에 짧은 비트열을 주는 부호

10장 압축 ② 허프만

후킹 hooking

원래 코드 몇 바이트를 점프로 바꿔 새 코드에 들렀다 돌아오게 하는 방법

6장 후킹

색인으로

영문·숫자

$(16진수 표시)

16진수라는 표시. 이 가이드는 CPU가 보는 주소, 레지스터와 메모리의 값, 표의 번호로 쓰는 ID에 $를 붙입니다.

1장 비트·바이트·16진수

0x(16진수 표시)

16진수라는 표시. 이 가이드는 파일 오프셋과 파일 속 길이에 0x를 붙입니다.

1장 비트·바이트·16진수

16진수 hexadecimal

2진수 네 자리를 0–9, A–F 한 글자로 적은 수

1장 비트·바이트·16진수

24비트 포인터 24-bit pointer

뱅크까지 담은 3바이트 포인터. 어느 뱅크든 가리킬 수 있습니다.

2장 엔디안

2의 거듭제곱 power of two

1, 2, 4, 8 …처럼 두 배씩 커지는 수. 롬 크기는 대개 이 크기입니다.

1장 비트·바이트·16진수

2의 보수 two's complement

맨 위 비트가 1이면 256(16비트면 65,536)을 빼서 읽는 음수 표현

1장 비트·바이트·16진수

2진수 binary

자리마다 두 배씩 커지는 자릿값으로 적은 수

1장 비트·바이트·16진수

6502 MOS 6502

65c816의 조상인 8비트 CPU

2장 엔디안

65c816 WDC 65C816

슈퍼 패미컴의 CPU. 6502를 16비트로 넓히고 주소를 24비트로 늘렸습니다.

3장 CPU와 65c816

A 레지스터 accumulator

계산에 쓰는 레지스터. 읽고 더하고 비교하고 적는 일 대부분이 이곳을 거칩니다.

3장 CPU와 65c816

asar asar

네 패치가 쓴 65c816 어셈블러

6장 후킹

BCD binary-coded decimal

16진수 한 자리에 10진수 한 자리를 넣는 방식. D 플래그를 켜면 ADC·SBC가 BCD로 계산합니다.

1장 비트·바이트·16진수

BG 모드 BG mode

레이어마다 몇 색 타일을 쓸지 정하는 화면 모드 0–7

7장 그림과 글자

bpp bits per pixel

픽셀 하나의 색 번호에 쓰는 비트 수. 2bpp면 4색

7장 그림과 글자

CGRAM color generator RAM

팔레트 색을 담는 512바이트 메모리. 색 하나에 2바이트

7장 그림과 글자

CPU central processing unit

명령을 한 줄씩 읽어 실행하는 장치

3장 CPU와 65c816

CPU 주소 CPU address

CPU가 보는 24비트 주소. $80:8000처럼 뱅크와 주소로 적습니다.

4장 주소와 뱅크

CRC32 CRC32

파일 내용으로 계산한 지문 값. 원본 롬이 맞는지 확인할 때 씁니다.

0장 롬과 패치

DMA direct memory access

CPU 대신 하드웨어가 바이트를 한꺼번에 옮기는 기능. 그림을 VRAM에 올릴 때 씁니다.

7장 그림과 글자

ExHiROM ExHiROM

4MB보다 큰 롬을 위한 HiROM의 확장 매핑

4장 주소와 뱅크

FastROM FastROM

빠르게 읽어도 되는 롬이라는 헤더 표시. 속도는 $420D로 바꿉니다.

1장 비트·바이트·16진수

HiROM HiROM

롬을 64KB씩 잘라 뱅크 $C0부터 통째로 놓는 매핑

4장 주소와 뱅크

IPS

PATCH로 시작해 레코드가 이어지고 EOF로 끝나는 단순한 패치 형식

0장 롬과 패치

JSL·RTL JSL / RTL

다른 뱅크의 서브루틴을 부르고 돌아오는 명령 짝

6장 후킹

KB·MB KiB·MiB

롬 해킹에서는 1KB = 1,024바이트, 1MB = 1,024KB

1장 비트·바이트·16진수

libretro libretro

여러 에뮬레이터를 같은 함수 모양으로 감싼 규격

12장 에뮬레이터로 확인

LoROM LoROM

롬을 32KB씩 잘라 뱅크마다 위쪽 반($8000–$FFFF)에 놓는 매핑

4장 주소와 뱅크

Lua Lua

Mesen 2가 게임과 함께 돌릴 수 있는 작은 프로그래밍 언어

12장 에뮬레이터로 확인

LZ77 LZ77

앞에 나온 덩어리를 "몇 칸 앞에서 몇 개"로 바꿔 적는 압축

9장 압축 ① RLE·LZSS

LZSS Lempel–Ziv–Storer–Szymanski

짧은 일치는 그대로 두고 긴 일치만 복사 지시로 적는 LZ 변형

9장 압축 ① RLE·LZSS

M 플래그·X 플래그 M / X flag

A와 X·Y가 8비트인지 16비트인지 정하는 플래그. 1이면 8비트

3장 CPU와 65c816

NMI non-maskable interrupt

화면을 다 그린 직후마다 오는 인터럽트($4200 비트 7을 켜 두었을 때). 화면 데이터는 이때 바꿉니다.

5장 어셈블리 기초

P 레지스터 processor status

플래그 여덟 개를 담은 레지스터

3장 CPU와 65c816

PC program counter

다음에 실행할 명령의 주소를 가리키는 레지스터

3장 CPU와 65c816

poke poke

실행 중에 메모리에 값을 직접 써 넣는 것

12장 에뮬레이터로 확인

PPU picture processing unit

화면을 그리는 칩

7장 그림과 글자

REP·SEP REP / SEP

P의 비트를 끄고 켜는 명령. REP #$20은 A를 16비트로 바꿉니다.

3장 CPU와 65c816

RLE run-length encoding

같은 값이 이어지면 값과 개수로 적는 압축

9장 압축 ① RLE·LZSS

RLE 레코드 RLE record

길이 자리가 00 00이고 같은 바이트를 몇 번 쓸지 적는 IPS 레코드

0장 롬과 패치

S-CPU S-CPU

본체에 있는 CPU. SA-1과 구별할 때 이렇게 부릅니다.

3장 CPU와 65c816

SA-1 SA-1

카트리지에 든 두 번째 65c816. 슈퍼 마리오 RPG가 씁니다.

3장 CPU와 65c816

Super MMC Super MMC

SA-1 카트리지가 1MB 롬 블록을 골라 창 네 개에 보여 주는 기능

4장 주소와 뱅크

VRAM video RAM

화면 칩(PPU)의 메모리 64KB. 타일 그림과 타일맵이 들어 있습니다.

7장 그림과 글자

WRAM work RAM

게임이 쓰는 작업 메모리 128KB. 뱅크 $7E·$7F

4장 주소와 뱅크

X·Y 레지스터 index registers

X와 Y. 표의 몇 번째 칸인지 세는 데 씁니다.

3장 CPU와 65c816

색인으로