<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://hansicgu.wiki.gd/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Root</id>
	<title>한식구 위키 - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://hansicgu.wiki.gd/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Root"/>
	<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/wiki/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Root"/>
	<updated>2026-05-16T04:04:35Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:NesDev%EB%B0%9C%EC%B7%8C&amp;diff=198</id>
		<title>틀:NesDev발췌</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:NesDev%EB%B0%9C%EC%B7%8C&amp;diff=198"/>
		<updated>2025-10-04T04:53:35Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{알림 상자 | 제목 = 해당 문서는 NesDev의 문서를 번역했습니다. | 색 = #99EA61 | 왼쪽 그림 = 없음 | 본문 = 해당 문서의 전체 또는 일부는 NesDev의 문서를 번역했습니다. 원문서는 CC0 1.0 Universal이므로 가져와도 문제가 없습니다.&amp;lt;br&amp;gt; 원글링크: [{{{원글링크|링크를 삽입해 주세요}}}] }}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=ASCII&amp;diff=197</id>
		<title>ASCII</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=ASCII&amp;diff=197"/>
		<updated>2025-10-04T04:52:14Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ 토막글 }}&lt;br /&gt;
== ASCII 코드표 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! &amp;amp;nbsp; !! 0 !! 1 !! 2 !! 3 !! 4 !! 5 !! 6 !! 7 !! 8 !! 9 !! A !! B !! C !! D !! E !! F&lt;br /&gt;
|- style=&amp;quot;background:#bfb;&amp;quot; |&lt;br /&gt;
|  style=&amp;quot;background: #fff&amp;quot; | 0x || ␀ || ␁ || ␂ || ␃ || ␄ || ␅ || ␆ || ␇ || ␈ || ␉ || ␊ || ␋ || ␌ || ␍ || ␎ ||␏&lt;br /&gt;
|- style=&amp;quot;background:#bfb;&amp;quot; |&lt;br /&gt;
|  style=&amp;quot;background: #fff&amp;quot; | 1x || ␐ || ␑ || ␒ || ␓ || ␔ || ␕ || ␖ || ␗ || ␘ || ␙ || ␚ || ␛ || ␜ || ␝ || ␞ || ␟ &lt;br /&gt;
|-&lt;br /&gt;
| 2x || style=&amp;quot;background:#bfb;&amp;quot;  | ␠ || ! || &amp;quot; || # || $ || % || &amp;amp; || &#039; || ( || ) || * || + || , || - || . || /&lt;br /&gt;
|-&lt;br /&gt;
| 3x || 0 || 1 || 2 || 3 || 4 || 5 || 6 || 7 || 8 || 9 || : || ; || &amp;lt; || = || &amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4x || @ || A || B || C || D || E || F || G || H || I || J || K || L || M || N || O &lt;br /&gt;
|-&lt;br /&gt;
| 5x || P || Q || R || S || T || U || V || W || X || Y || Z || [ || \ || ] || ^ || _ &lt;br /&gt;
|-&lt;br /&gt;
| 6x || ` || a || b || c || d || e || f || g || h || i || j || k || l || m || n || o&lt;br /&gt;
|-&lt;br /&gt;
| 7x || p || q || r || s || t || u || v || w || x || y || z || { || | | || } || ~ || style=&amp;quot;background:#bfb;&amp;quot; | ␡&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div&amp;gt;&amp;lt;span style=&amp;quot;background-color:#bfb; border:black solid 1px;min-width:1.25em;&amp;quot;&amp;gt;　&amp;lt;/span&amp;gt;&amp;amp;nbsp;특수문자 : 이 표에서는 Control Pictures 기호로 대체합니다&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:Mbox&amp;diff=171</id>
		<title>틀:Mbox</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:Mbox&amp;diff=171"/>
		<updated>2025-10-01T05:02:33Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ 틀:알림 상자 | 왼쪽 그림 = {{{image|없음}}} | 오른쪽 그림 = {{{imageright|}}} | 본문 = {{{text|}}} }}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:Mbox&amp;diff=170</id>
		<title>틀:Mbox</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:Mbox&amp;diff=170"/>
		<updated>2025-10-01T04:57:05Z</updated>

		<summary type="html">&lt;p&gt;Root: 새 문서: {{#invoke:Message box|Mbox}}&amp;lt;noinclude&amp;gt;{{설명문서}}&amp;lt;/noinclude&amp;gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#invoke:Message box|Mbox}}&amp;lt;noinclude&amp;gt;{{설명문서}}&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=6502/%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=169</id>
		<title>6502/명령어</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=6502/%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=169"/>
		<updated>2025-10-01T04:53:11Z</updated>

		<summary type="html">&lt;p&gt;Root: Root님이 6502/명령어 문서를 6502 명령어 문서로 이동했습니다: 상위문서 부재&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#넘겨주기 [[6502 명령어]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=6502_%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=168</id>
		<title>6502 명령어</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=6502_%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=168"/>
		<updated>2025-10-01T04:53:10Z</updated>

		<summary type="html">&lt;p&gt;Root: Root님이 6502/명령어 문서를 6502 명령어 문서로 이동했습니다: 상위문서 부재&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NES }}&lt;br /&gt;
{{ 틀:NesDev발췌 | 원글링크 = https://www.nesdev.org/wiki/Instruction_reference }}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|+ 6502 공식 명령어&lt;br /&gt;
|-&lt;br /&gt;
| [[#ADC|ADC]] || [[#AND|AND]] || [[#ASL|ASL]] || [[#BCC|BCC]] || [[#BCS|BCS]] || [[#BEQ|BEQ]] || [[#BIT|BIT]] || [[#BMI|BMI]] || [[#BNE|BNE]] || [[#BPL|BPL]] || [[#BRK|BRK]] || [[#BVC|BVC]] || [[#BVS|BVS]] || [[#CLC|CLC]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#CLD|CLD]] || [[#CLI|CLI]] || [[#CLV|CLV]] || [[#CMP|CMP]] || [[#CPX|CPX]] || [[#CPY|CPY]] || [[#DEC|DEC]] || [[#DEX|DEX]] || [[#DEY|DEY]] || [[#EOR|EOR]] || [[#INC|INC]] || [[#INX|INX]] || [[#INY|INY]] || [[#JMP|JMP]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#JSR|JSR]] || [[#LDA|LDA]] || [[#LDX|LDX]] || [[#LDY|LDY]] || [[#LSR|LSR]] || [[#NOP|NOP]] || [[#ORA|ORA]] || [[#PHA|PHA]] || [[#PHP|PHP]] || [[#PLA|PLA]] || [[#PLP|PLP]] || [[#ROL|ROL]] || [[#ROR|ROR]] || [[#RTI|RTI]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#RTS|RTS]] || [[#SBC|SBC]] || [[#SEC|SEC]] || [[#SED|SED]] || [[#SEI|SEI]] || [[#STA|STA]] || [[#STX|STX]] || [[#STY|STY]] || [[#TAX|TAX]] || [[#TAY|TAY]] || [[#TSX|TSX]] || [[#TXA|TXA]] || [[#TXS|TXS]] || [[#TYA|TYA]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 종류별 공식 명령어 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
! 종류&lt;br /&gt;
!colspan=8 class=&amp;quot;unsortable&amp;quot; | 명령어&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 접근 (Access)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#LDA|LDA]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#STA|STA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#LDX|LDX]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#STX|STX]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#LDY|LDY]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#STY|STY]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 전송 (Transfer)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#TAX|TAX]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#TXA|TXA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#TAY|TAY]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#TYA|TYA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 산술 (Arithmetic)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#ADC|ADC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SBC|SBC]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#INC|INC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#DEC|DEC]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#INC|INX]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#DEC|DEX]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#INY|INY]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#DEY|DEY]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 시프트 (Shift)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#ASL|ASL]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#LSR|LSR]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#ROL|ROL]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#ROR|ROR]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 비트연산 (Bitwise)&lt;br /&gt;
|[[#AND|AND]]&lt;br /&gt;
|[[#ORA|ORA]]&lt;br /&gt;
|[[#EOR|EOR]]&lt;br /&gt;
|[[#BIT|BIT]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 비교 (Compare)&lt;br /&gt;
|[[#CMP|CMP]]&lt;br /&gt;
|[[#CPX|CPX]]&lt;br /&gt;
|[[#CPY|CPY]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 분기 (Branch)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BCC|BCC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BCS|BCS]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BEQ|BEQ]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BNE|BNE]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BPL|BPL]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BMI|BMI]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BVC|BVC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BVS|BVS]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 점프 (Jump)&lt;br /&gt;
|[[#JMP|JMP]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#JSR|JSR]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#RTS|RTS]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BRK|BRK]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#RTI|RTI]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 스택 (Stack)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#PHA|PHA]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#PLA|PLA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#PHP|PHP]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#PLP|PLP]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#TXS|TXS]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#TSX|TSX]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 플래그 (Flags)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#CLC|CLC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SEC|SEC]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#CLI|CLI]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SEI|SEI]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#CLD|CLD]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SED|SED]]&lt;br /&gt;
|[[#CLV|CLV]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 기타 (Other)&lt;br /&gt;
|[[#NOP|NOP]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 공식 명령어 ==&lt;br /&gt;
{{Anchor|ADC}}&lt;br /&gt;
=== ADC - 캐리와 함께 더하기 (Add with Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A + 메모리 + C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADC는 캐리 플래그와 메모리 값을 어큐뮬레이터에 더합니다. 그 후 캐리 플래그는 비트 7에서 나오는 캐리 값으로 설정되어, 다음 바이트 덧셈으로 1을 넘겨줌으로써 1바이트보다 큰 값을 더할 수 있게 합니다. 이는 부호 없는 오버플로로 생각할 수도 있습니다. 첫 바이트를 더하기 전에 [[#CLC|CLC]]로 캐리를 클리어하여 알려진 상태로 만들어, 1만큼의 오차를 피하는 것이 일반적입니다. 오버플로 플래그는 부호 있는 오버플로나 언더플로가 발생했는지를 나타냅니다. 이는 두 입력이 모두 양수인데 결과가 음수이거나, 두 입력이 모두 음수인데 결과가 양수인 경우에 발생합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 결과 &amp;gt; $FF || 결과가 $FF를 초과하여 오버플로(랩어라운드)되면, 부호 없는 오버플로가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || (결과 ^ A) &amp;amp; (결과 ^ 메모리) &amp;amp; $80 || 결과의 부호가 A와 메모리의 부호와 모두 다르면, 부호 있는 오버플로(또는 언더플로)가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $69 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $65 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $75 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $6D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $7D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $79 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $61 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $71 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SBC|SBC]], [[#CLC|CLC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|AND}}&lt;br /&gt;
=== AND - 비트 단위 AND (Bitwise AND) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A &amp;amp; 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 명령어는 메모리 값과 어큐뮬레이터를 비트 단위로 AND 연산합니다. 두 입력 비트가 모두 1이면 결과 비트는 1이 되고, 그렇지 않으면 0이 됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;white-space:nowrap; border:1px solid; padding:3px; border-color:rgb(162, 169, 177); background-color:rgb(234, 236, 240);&amp;quot; | AND 진리표&lt;br /&gt;
|-&lt;br /&gt;
! A !! 메모리 !! 결과&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $29 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $25 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $35 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $2D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $3D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $39 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $21 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $31 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ORA|ORA]], [[#EOR|EOR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ASL}}&lt;br /&gt;
=== ASL - 산술 왼쪽 시프트 (Arithmetic Shift Left) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 값 &amp;lt;&amp;lt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; C &amp;lt;- [76543210] &amp;lt;- 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASL은 메모리 값 또는 어큐뮬레이터의 모든 비트를 왼쪽으로 한 자리씩 시프트하여, 각 비트의 값을 다음 비트로 이동시킵니다. 비트 7은 캐리 플래그로 시프트되고, 0이 비트 0으로 시프트됩니다. 이는 부호 없는 값을 2로 곱하는 것과 같으며, 캐리는 오버플로를 나타냅니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 7&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $0A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $06 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $16 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $0E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $1E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LSR|LSR]], [[#ROL|ROL]], [[#ROR|ROR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BCC}}&lt;br /&gt;
=== BCC - 캐리가 클리어되면 분기 (Branch if Carry Clear) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
캐리 플래그가 클리어(0)이면, BCC는 상대 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 캐리가 설정되었을 때 [[#BCS|BCS]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
캐리 플래그는 문맥에 따라 다른 의미를 가집니다. BCC는 비교 후에 레지스터가 메모리 값보다 작을 경우 분기하는 데 사용될 수 있으므로, 때때로 BLT(Branch if Less Than)라고도 불립니다. 또한 [[#SBC|SBC]] 후에는 부호 없는 값이 언더플로되었을 경우, [[#ADC|ADC]] 후에는 오버플로되지 &#039;않았을&#039; 경우 분기하는 데 사용될 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $90 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BCS|BCS]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BCS}}&lt;br /&gt;
=== BCS - 캐리가 설정되면 분기 (Branch if Carry Set) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
캐리 플래그가 설정(1)되면, BCS는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 캐리가 클리어되었을 때 [[#BCC|BCC]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
캐리 플래그는 문맥에 따라 다른 의미를 가집니다. BCS는 비교 후에 레지스터가 메모리 값보다 크거나 같을 경우 분기하는 데 사용될 수 있으므로, 때때로 BGE(Branch if Greater Than or Equal)라고도 불립니다. 또한 [[#ADC|ADC]] 후에는 부호 없는 값이 오버플로되었을 경우, [[#SBC|SBC]] 후에는 언더플로되지 &#039;않았을&#039; 경우 분기하는 데 사용될 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $B0 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BCC|BCC]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BEQ}}&lt;br /&gt;
=== BEQ - 같으면 분기 (Branch if Equal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
제로 플래그가 설정(1)되면, BEQ는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 제로가 클리어되었을 때 [[#BNE|BNE]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
비교 연산은 이 플래그를 사용하여 비교된 값들이 같은지 여부를 나타냅니다. A, X, 또는 Y를 변경하는 모든 명령어는 레지스터가 0이 되는지 여부에 따라 암묵적으로 제로 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $F0 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BNE|BNE]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BIT}}&lt;br /&gt;
=== BIT - 비트 테스트 (Bit Test) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A &amp;amp; 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BIT는 플래그를 수정하지만, 메모리나 레지스터는 변경하지 않습니다. 제로 플래그는 어큐뮬레이터와 메모리 값의 AND 연산 결과에 따라 설정되며, 이는 효과적으로 비트마스크를 적용한 후 설정된 비트가 있는지 확인하는 것과 같습니다. 메모리 값의 비트 7과 6은 네거티브 및 오버플로 플래그로 직접 로드되어, 마스크를 A에 로드할 필요 없이 쉽게 확인할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
BIT는 CPU 플래그만 변경하기 때문에, 때때로 CPU 레지스터를 덮어쓰지 않고 하드웨어 레지스터의 읽기 부작용을 트리거하거나, 3 사이클 [[#NOP|NOP]]처럼 사이클을 낭비하는 데 사용됩니다. 고급 기술로, 피연산자에 1 또는 2바이트 명령어를 숨겨두고 직접 점프할 때만 실행되도록 하여 두 코드 경로를 인터리빙하는 데 가끔 사용됩니다. 그러나 피연산자의 명령어는 읽을 주소로 취급되므로, 하드웨어 레지스터를 읽을 경우 부작용을 일으킬 위험이 있습니다. 이 기술은 공간, 시간 또는 레지스터 사용에 대한 제약이 심할 때 유용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 메모리의 비트 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 메모리의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero page]] || $24 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $2C || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#AND|AND]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BMI}}&lt;br /&gt;
&lt;br /&gt;
=== BMI - 음수이면 분기 (Branch if Minus) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
네거티브 플래그가 설정(1)되면, BMI는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 네거티브가 클리어되었을 때 [[#BPL|BPL]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
A, X, 또는 Y를 변경하는 모든 명령어는 비트 7(부호 비트)에 따라 암묵적으로 네거티브 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $30 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BPL|BPL]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BNE}}&lt;br /&gt;
=== BNE - 같지 않으면 분기 (Branch if Not Equal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
제로 플래그가 클리어(0)이면, BNE는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 네거티브가 설정되었을 때 [[#BEQ|BEQ]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
비교 연산은 이 플래그를 사용하여 비교된 값들이 같은지 여부를 나타냅니다. A, X, 또는 Y를 변경하는 모든 명령어는 레지스터가 0이 되는지 여부에 따라 암묵적으로 제로 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $D0 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BEQ|BEQ]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BPL}}&lt;br /&gt;
=== BPL - 양수이면 분기 (Branch if Plus) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
네거티브 플래그가 클리어(0)이면, BPL는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 네거티브가 설정되었을 때 [[#BMI|BMI]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
A, X, 또는 Y를 변경하는 모든 명령어는 비트 7(부호 비트)에 따라 암묵적으로 네거티브 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $10 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BMI|BMI]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BRK}}&lt;br /&gt;
=== BRK - 중단 (소프트웨어 IRQ) (Break) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에 PC + 2를 [[#PHA|푸시]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;스택에 NV11DIZC 플래그를 [[#PHA|푸시]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PC = ($FFFE)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BRK는 인터럽트 요청(IRQ)을 트리거합니다. IRQ는 보통 외부 하드웨어에 의해 트리거되며, BRK는 소프트웨어에서 이를 수행하는 유일한 방법입니다. 일반적인 IRQ처럼, 현재 프로그램 카운터와 프로세서 플래그를 스택에 푸시하고, 인터럽트 비활성화 플래그를 설정한 후, IRQ 핸들러로 점프합니다. 일반적인 IRQ와 달리, 스택에 푸시되는 플래그 바이트에 브레이크 플래그를 설정하고([[#PHP|PHP]]처럼), 인터럽트 비활성화 플래그가 설정되어 있어도 인터럽트를 트리거합니다. 특히, 스택에 푸시되는 반환 주소는 BRK 옵코드 다음 바이트를 건너뜁니다. 이러한 이유로, BRK는 종종 사용되지 않는 즉시 피연산자를 가진 2바이트 명령어로 간주됩니다.&lt;br /&gt;
&lt;br /&gt;
불행히도, 6502 버그로 인해 BRK IRQ는 동시에 발생하는 NMI에 의해 무시될 수 있습니다. 이 경우, NMI 핸들러만 호출되고 IRQ 핸들러는 건너뜁니다. 그러나 스택에 푸시된 플래그 바이트에는 여전히 브레이크 플래그가 설정되어 있으므로, NMI 핸들러는 이 플래그를 확인하여 (느리지만) 이 상황이 발생했음을 감지할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
BRK는 값 $00을 사용하기 때문에, 프로그래밍 가능한 ROM의 모든 바이트는 BRK 명령어로 덮어써서 실행을 IRQ 핸들러로 보낼 수 있습니다. 이는 일회성 프로그래밍 가능 ROM을 패치하는 데 유용합니다. BRK는 또한 시스템 콜 메커니즘으로 사용될 수 있으며, 사용되지 않는 바이트는 소프트웨어에서 인수로 사용될 수 있습니다 (접근하기는 불편하지만). NES 게임의 맥락에서, BRK는 종종 크래시 핸들러로 가장 유용합니다. 사용되지 않는 프로그램 공간을 $00으로 채우고 IRQ 핸들러가 디버깅 정보를 표시하거나 다른 방식으로 크래시를 깔끔하게 처리합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 1 || 이전 플래그가 스택에 푸시된 후 1로 설정됩니다. 이 플래그 변경의 효과는 지연되지 &#039;않습니다&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#B|B - 브레이크]] || 1로 푸시됨 || 이 플래그는 CPU의 실제 상태가 아닌, 스택에 푸시된 플래그 바이트에만 존재합니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#BRK|Implied]] || $00 || 1 || 7 || BRK는 1바이트만 사용하지만, 반환 주소는 다음 바이트를 건너뜁니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#BRK|#Immediate]] || $00 || 2 || 7 || BRK가 다음 바이트를 건너뛰기 때문에, 종종 2바이트 명령어로 간주됩니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#RTI|RTI]], [[#PHP|PHP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BVC}}&lt;br /&gt;
=== BVC - 오버플로가 클리어되면 분기 (Branch if Overflow Clear) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
오버플로 플래그가 클리어(0)이면, BVC는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 오버플로가 설정되었을 때 [[#BVS|BVS]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
제로, 네거티브, 심지어 캐리와 달리, 오버플로는 매우 적은 수의 명령어에 의해서만 수정됩니다. 주로 [[#BIT|BIT]] 명령어와 함께 사용되며, 특히 하드웨어 레지스터를 폴링할 때 사용됩니다. 또한 [[#ADC|ADC]] 및 [[#SBC|SBC]]와 함께 부호 있는 오버플로에 사용되기도 합니다. 표준 6502 칩은 외부 장치가 핀을 사용하여 오버플로를 설정할 수 있게 하여 소프트웨어가 해당 이벤트를 폴링할 수 있도록 하지만, NES의 2A03에는 이 기능이 없습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $50 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BVS|BVS]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BVS}}&lt;br /&gt;
=== BVS - 오버플로가 설정되면 분기 (Branch if Overflow Set) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
오버플로 플래그가 설정(1)되면, BVS는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 오버플로가 클리어되었을 때 [[#BVC|BVC]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
제로, 네거티브, 심지어 캐리와 달리, 오버플로는 매우 적은 수의 명령어에 의해서만 수정됩니다. 주로 [[#BIT|BIT]] 명령어와 함께 사용되며, 특히 하드웨어 레지스터를 폴링할 때 사용됩니다. 또한 [[#ADC|ADC]] 및 [[#SBC|SBC]]와 함께 부호 있는 오버플로에 사용되기도 합니다. 표준 6502 칩은 외부 장치가 핀을 사용하여 오버플로를 설정할 수 있게 하여 소프트웨어가 해당 이벤트를 폴링할 수 있도록 하지만, NES의 2A03 CPU에는 이 기능이 없습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $70 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BVC|BVC]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLC}}&lt;br /&gt;
=== CLC - 캐리 클리어 (Clear Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;C = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLC는 캐리 플래그를 클리어합니다. 특히, 이는 보통 [[#ADC|ADC]]로 값의 하위 바이트를 더하기 전에 추가적인 1이 더해지는 것을 방지하기 위해 수행됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $18 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SEC|SEC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLD}}&lt;br /&gt;
=== CLD - 데시멀 클리어 (Clear Decimal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;D = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLD는 데시멀 플래그를 클리어합니다. 데시멀 플래그는 보통 [[BCD]] 모드의 활성화 여부를 제어하지만, 이 모드는 [[NES]]의 [[2A03]] CPU에서는 사용할 수 없다. 그러나 플래그 자체는 여전히 작동하며 상태를 저장하는 데 사용될 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $D8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SED|SED]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLI}}&lt;br /&gt;
=== CLI - 인터럽트 비활성화 클리어 (Clear Interrupt Disable) ===&lt;br /&gt;
&amp;lt;code&amp;gt;I = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLI는 인터럽트 비활성화 플래그를 클리어하여, CPU가 하드웨어 IRQ를 처리할 수 있도록 합니다. 이 플래그 변경의 효과는 한 명령어 지연됩니다. 왜냐하면 플래그는 IRQ가 폴링된 후에 변경되어, 보류 중인 IRQ가 감지되고 서비스되기 전에 다음 명령어가 실행될 수 있도록 하기 때문입니다. 이 플래그는 NMI에는 영향을 미치지 않으며, NMI는 이름(&amp;quot;non-maskable&amp;quot;)에서 알 수 있듯이 CPU가 무시할 수 없습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 0 || 이 플래그 변경의 효과는 1 명령어 지연됩니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $58 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SEI|SEI]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLV}}&lt;br /&gt;
=== CLV - 오버플로 클리어 (Clear Overflow) ===&lt;br /&gt;
&amp;lt;code&amp;gt;V = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLV는 오버플로 플래그를 클리어합니다. 이에 해당하는 SEV 명령어는 없습니다. 대신, 오버플로 설정은 6502 CPU에서 외부 하드웨어에 의해 제어되는 핀으로 노출되어 있으며, NES의 2A03 CPU에는 전혀 노출되어 있지 않습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $B8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CMP}}&lt;br /&gt;
=== CMP - A 비교 (Compare A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A - 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CMP는 A를 메모리 값과 비교하여, 플래그를 적절하게 설정하지만 어떤 레지스터도 수정하지 않습니다. 비교는 뺄셈으로 구현되며, 빌림(borrow)이 없으면 캐리를 설정하고, 결과가 0이면 제로를 설정하고, 결과가 음수이면 네거티브를 설정합니다. 그러나 캐리와 제로는 종종 부등식으로 기억하는 것이 가장 쉽습니다.&lt;br /&gt;
&lt;br /&gt;
비교는 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || A &amp;gt;= 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || A == 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $C9 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $C5 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $D5 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $CD || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $DD || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $D9 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $C1 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $D1 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CPX|CPX]], [[#CPY|CPY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CPX}}&lt;br /&gt;
=== CPX - X 비교 (Compare X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X - 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CPX는 X를 메모리 값과 비교하여, 플래그를 적절하게 설정하지만 어떤 레지스터도 수정하지 않습니다. 비교는 뺄셈으로 구현되며, 빌림(borrow)이 없으면 캐리를 설정하고, 결과가 0이면 제로를 설정하고, 결과가 음수이면 네거티브를 설정합니다. 그러나 캐리와 제로는 종종 부등식으로 기억하는 것이 가장 쉽습니다.&lt;br /&gt;
&lt;br /&gt;
비교는 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || X &amp;gt;= 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || X == 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $E0 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $E4 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $EC || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CMP|CMP]], [[#CPY|CPY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CPY}}&lt;br /&gt;
=== CPY - Y 비교 (Compare Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y - 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CPY는 Y를 메모리 값과 비교하여, 플래그를 적절하게 설정하지만 어떤 레지스터도 수정하지 않습니다. 비교는 뺄셈으로 구현되며, 빌림(borrow)이 없으면 캐리를 설정하고, 결과가 0이면 제로를 설정하고, 결과가 음수이면 네거티브를 설정합니다. 그러나 캐리와 제로는 종종 부등식으로 기억하는 것이 가장 쉽습니다.&lt;br /&gt;
&lt;br /&gt;
비교는 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || Y &amp;gt;= 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || Y == 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $C0 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $C4 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $CC || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CMP|CMP]], [[#CPX|CPX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|DEC}}&lt;br /&gt;
=== DEC - 메모리 감소 (Decrement Memory) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = 메모리 - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DEC는 메모리 위치에서 1을 뺍니다. 특히, 이 명령어의 어큐뮬레이터 버전은 없으며, 대신 [[#ADC|ADC]] 또는 [[#SBC|SBC]]를 사용해야 합니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
감소는 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $C6 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $D6 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $CE || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $DE || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#INC|INC]], [[#ADC|ADC]], [[#SBC|SBC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|DEX}}&lt;br /&gt;
=== DEX - X 감소 (Decrement X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = X - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DEX는 X 레지스터에서 1을 뺍니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $CA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#INX|INX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|DEY}}&lt;br /&gt;
=== DEY - Y 감소 (Decrement Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = Y - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DEY는 Y 레지스터에서 1을 뺍니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $88 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#INY|INY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|EOR}}&lt;br /&gt;
=== EOR - 비트 단위 배타적 OR (Bitwise Exclusive OR) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A ^ 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EOR은 메모리 값과 어큐뮬레이터를 비트 단위로 배타적 OR(exclusive-OR) 연산합니다. 입력 비트가 다르면 결과 비트는 1이 되고, 같으면 0이 됩니다. 이 연산은 XOR로도 알려져 있습니다.&lt;br /&gt;
&lt;br /&gt;
6502에는 비트 단위 NOT 명령어가 없지만, 값 $FF와 함께 EOR을 사용하면 동일한 동작을 하여 다른 값의 모든 비트를 반전시킵니다. 사실, EOR은 비트마스크를 사용한 NOT으로 생각할 수 있습니다. 한 값의 모든 1 비트는 다른 값의 해당 비트를 반전시키는 효과를 가지며, 0 비트는 아무것도 하지 않습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;white-space:nowrap; border:1px solid; padding:3px; border-color:rgb(162, 169, 177); background-color:rgb(234, 236, 240);&amp;quot; | EOR 진리표&lt;br /&gt;
|-&lt;br /&gt;
! A !! 메모리 !! 결과&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $49 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $45 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $55 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $4D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $5D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $59 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $41 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $51 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#AND|AND]], [[#ORA|ORA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|INC}}&lt;br /&gt;
&lt;br /&gt;
=== INC - 메모리 증가 (Increment Memory) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = 메모리 + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INC는 메모리 위치에 1을 더합니다. 특히, 이 명령어의 어큐뮬레이터 버전은 없으며, 대신 [[#ADC|ADC]] 또는 [[#SBC|SBC]]를 사용해야 합니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
증가는 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $E6 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $F6 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $EE || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $FE || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#DEC|DEC]], [[#ADC|ADC]], [[#SBC|SBC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|INX}}&lt;br /&gt;
=== INX - X 증가 (Increment X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = X + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INX는 X 레지스터에 1을 더합니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $E8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#DEX|DEX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|INY}}&lt;br /&gt;
=== INY - Y 증가 (Increment Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = Y + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INY는 Y 레지스터에 1을 더합니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $C8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#DEY|DEY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|JMP}}&lt;br /&gt;
=== JMP - 점프 (Jump) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JMP는 프로그램 카운터를 새로운 값으로 설정하여, 코드가 새로운 위치에서 실행되도록 합니다. 해당 위치에서 반환하려면, 대신 [[#JSR|JSR]]을 사용해야 합니다.&lt;br /&gt;
&lt;br /&gt;
간접 주소 지정 모드는 피연산자를 포인터로 사용하여, 지정된 주소에서 새로운 2바이트 프로그램 카운터 값을 가져옵니다. 불행히도, CPU 버그로 인해 이 2바이트 변수의 주소가 $FF로 끝나 페이지를 교차하게 되면, CPU는 두 번째 바이트를 읽을 때 페이지를 증가시키지 못해 잘못된 주소를 읽게 됩니다. 예를 들어, JMP ($03FF)는 $03FF와 $0400 대신 &#039;&#039;$0300&#039;&#039;을 읽습니다. 이 변수가 페이지를 교차하지 않도록 주의해야 합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute|Absolute]] || $4C || 3 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect|(Indirect)]] || $6C || 3 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#JSR|JSR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|JSR}}&lt;br /&gt;
=== JSR - 서브루틴으로 점프 (Jump to Subroutine) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에 PC + 2를 [[#PHA|푸시]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PC = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSR은 현재 프로그램 카운터를 스택에 푸시한 다음, 프로그램 카운터를 새로운 값으로 설정합니다. 이를 통해 코드는 함수를 호출하고 [[#RTS|RTS]]로 JSR 다음 명령어로 돌아올 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
특히, 스택의 반환 주소는 다음 명령어의 시작 지점이 아니라, 그보다 1바이트 앞을 가리킵니다. 이는 [[#RTS|RTS]]가 다음 명령어를 가져오기 전에 프로그램 카운터를 증가시키기 때문입니다. 이는 인터럽트에 의해 푸시되고 [[#RTI|RTI]]에 의해 사용되는 반환 주소와 다릅니다. 인터럽트의 반환 주소는 다음 명령어를 직접 가리킵니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute|Absolute]] || $20 || 3 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#RTS|RTS]], [[#JMP|JMP]], [[#RTI|RTI]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LDA}}&lt;br /&gt;
=== LDA - A 로드 (Load A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LDA는 메모리 값을 어큐뮬레이터로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $A9 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $A5 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $B5 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $AD || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $BD || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $B9 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $A1 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $B1 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#STA|STA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LDX}}&lt;br /&gt;
=== LDX - X 로드 (Load X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LDX는 메모리 값을 X 레지스터로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $A2 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $A6 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,Y]] || $B6 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $AE || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $BE || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#STX|STX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LDY}}&lt;br /&gt;
=== LDY - Y 로드 (Load Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LDY는 메모리 값을 Y 레지스터로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $A0 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $A4 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $B4 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $AC || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $BC || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#STY|STY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LSR}}&lt;br /&gt;
=== LSR - 논리적 오른쪽 시프트 (Logical Shift Right) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 값 &amp;gt;&amp;gt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; 0 -&amp;gt; [76543210] -&amp;gt; C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LSR은 메모리 값 또는 어큐뮬레이터의 모든 비트를 오른쪽으로 한 자리씩 시프트하여, 각 비트의 값을 다음 비트로 이동시킵니다. 0이 비트 7로 시프트되고, 비트 0은 캐리 플래그로 시프트됩니다. 이는 부호 없는 값을 2로 나누고 내림하는 것과 같으며, 나머지는 캐리에 저장됩니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $4A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $46 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $56 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $4E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $5E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ASL|ASL]], [[#ROL|ROL]], [[#ROR|ROR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|NOP}}&lt;br /&gt;
&lt;br /&gt;
=== NOP - 아무 작업 안 함 (No Operation) ===&lt;br /&gt;
&lt;br /&gt;
NOP는 아무 효과가 없습니다. 단지 공간과 CPU 사이클을 낭비할 뿐입니다. 이 명령어는 원하는 시간만큼 지연시키기 위한 시간 코드 작성, 페이지 교차 여부를 보장하기 위한 패딩, 또는 바이너리에서 코드를 비활성화할 때 유용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $EA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ORA}}&lt;br /&gt;
=== ORA - 비트 단위 OR (Bitwise OR) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A | 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ORA는 메모리 값과 어큐뮬레이터를 비트 단위로 포괄적 OR(inclusive-OR) 연산합니다. 입력 비트 중 하나라도 1이면 결과 비트는 1이 되고, 그렇지 않으면 0이 됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;white-space:nowrap; border:1px solid; padding:3px; border-color:rgb(162, 169, 177); background-color:rgb(234, 236, 240);&amp;quot; | OR 진리표&lt;br /&gt;
|-&lt;br /&gt;
! A !! 메모리 !! 결과&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $09 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $05 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $15 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $0D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $1D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $19 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $01 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $11 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#AND|AND]], [[#EOR|EOR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PHA}}&lt;br /&gt;
=== PHA - A 푸시 (Push A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;($0100 + SP) = A&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PHA는 A의 값을 현재 스택 위치에 저장한 다음 스택 포인터를 감소시킵니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $48 || 1 || 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PLA|PLA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PHP}}&lt;br /&gt;
=== PHP - 프로세서 상태 푸시 (Push Processor Status) ===&lt;br /&gt;
&amp;lt;code&amp;gt;($0100 + SP) = NV11DIZC&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PHP는 6개의 상태 플래그와 B 플래그를 포함하는 바이트를 스택에 저장한 다음 스택 포인터를 감소시킵니다. B 플래그와 추가 비트는 모두 1로 푸시됩니다. 비트 순서는 NV1BDIZC (높은 쪽에서 낮은 쪽으로)입니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#B|B - 브레이크]] || 1로 푸시됨 || 이 플래그는 CPU의 실제 상태가 아닌, 스택에 푸시된 플래그 바이트에만 존재합니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $08 || 1 || 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PLP|PLP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PLA}}&lt;br /&gt;
=== PLA - A 풀 (Pull A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP + 1&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;A = ($0100 + SP)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLA는 스택 포인터를 증가시킨 다음 해당 스택 위치의 값을 A로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $68 || 1 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PHA|PHA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PLP}}&lt;br /&gt;
=== PLP - 프로세서 상태 풀 (Pull Processor Status) ===&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP + 1&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NVxxDIZC = ($0100 + SP)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLP는 스택 포인터를 증가시킨 다음 해당 스택 위치의 값을 6개의 상태 플래그로 로드합니다. 비트 순서는 NVxxDIZC (높은 쪽에서 낮은 쪽으로)입니다. B 플래그와 추가 비트는 무시됩니다. I 변경의 효과는 한 명령어 지연됩니다. 왜냐하면 플래그는 IRQ가 폴링된 후에 변경되어, [[#CLI|CLI]] 및 [[#SEI|SEI]]와 같이 다음 명령어에서 IRQ가 폴링될 때까지 효과가 지연되기 때문입니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 결과의 비트 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과의 비트 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 결과의 비트 2 || 이 플래그 변경의 효과는 1 명령어 지연됩니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 결과의 비트 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 결과의 비트 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $28 || 1 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PHP|PHP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ROL}}&lt;br /&gt;
=== ROL - 왼쪽으로 회전 (Rotate Left) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 캐리를 통해 값 &amp;lt;&amp;lt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; C &amp;lt;- [76543210] &amp;lt;- C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROL은 메모리 값 또는 어큐뮬레이터를 왼쪽으로 시프트하여, 각 비트의 값을 다음 비트로 이동시키고 캐리 플래그를 비트 7 위와 비트 0 아래에 모두 있는 것처럼 취급합니다. 구체적으로, 캐리의 값은 비트 0으로 시프트되고, 비트 7은 캐리로 시프트됩니다. 왼쪽으로 9번 회전하면 값과 캐리가 원래 상태로 돌아옵니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 7&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $2A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $26 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $36 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $2E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $3E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ROR|ROR]], [[#ASL|ASL]], [[#LSR|LSR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ROR}}&lt;br /&gt;
=== ROR - 오른쪽으로 회전 (Rotate Right) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 캐리를 통해 값 &amp;gt;&amp;gt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; C -&amp;gt; [76543210] -&amp;gt; C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROR은 메모리 값 또는 어큐뮬레이터를 오른쪽으로 시프트하여, 각 비트의 값을 다음 비트로 이동시키고 캐리 플래그를 비트 7 위와 비트 0 아래에 모두 있는 것처럼 취급합니다. 구체적으로, 캐리의 값은 비트 7로 시프트되고, 비트 0은 캐리로 시프트됩니다. 오른쪽으로 9번 회전하면 값과 캐리가 원래 상태로 돌아옵니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $6A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $66 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $76 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $6E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $7E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ROL|ROL]], [[#ASL|ASL]], [[#LSR|LSR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|RTI}}&lt;br /&gt;
=== RTI - 인터럽트에서 복귀 (Return from Interrupt) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에서 NVxxDIZC 플래그를 [[#PLA|풀]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;스택에서 PC를 [[#PLA|풀]]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RTI는 인터럽트 핸들러에서 복귀하며, 먼저 스택에서 6개의 상태 플래그를 풀(pull)한 다음 새로운 프로그램 카운터를 풀합니다. 플래그 풀링은 [[#PLP|PLP]]처럼 동작하지만, 인터럽트 비활성화 플래그의 변경 사항이 1 명령어 지연되지 않고 즉시 적용된다는 점이 다릅니다. 이는 플래그가 명령어에 대한 IRQ가 폴링된 후가 아니라 전에 변경되기 때문입니다. PC 풀링은 [[#RTS|RTS]]처럼 동작하지만, 반환 주소가 1바이트 전이 아닌 다음 명령어의 정확한 주소라는 점이 다릅니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 풀링된 플래그의 비트 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 풀링된 플래그의 비트 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 풀링된 플래그의 비트 2 || 이 플래그 변경의 효과는 지연되지 &#039;않습니다&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 풀링된 플래그의 비트 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 풀링된 플래그의 비트 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 풀링된 플래그의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $40 || 1 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BRK|BRK]], [[#PLP|PLP]], [[#RTS|RTS]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|RTS}}&lt;br /&gt;
=== RTS - 서브루틴에서 복귀 (Return from Subroutine) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에서 PC를 [[#PLA|풀]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RTS는 스택에서 주소를 프로그램 카운터로 풀(pull)한 다음 프로그램 카운터를 증가시킵니다. 이는 보통 함수 끝에서 함수를 호출한 [[#JSR|JSR]] 다음 명령어로 돌아가기 위해 사용됩니다. 그러나 RTS는 점프 테이블을 구현하는 데 사용되기도 합니다([[Jump table]] 및 [[RTS Trick]] 참조).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $60 || 1 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#JSR|JSR]], [[#PLA|PLA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SBC}}&lt;br /&gt;
=== SBC - 캐리와 함께 빼기 (Subtract with Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A - 메모리 - ~C&amp;lt;/code&amp;gt;, 또는 동등하게: &amp;lt;code&amp;gt;A = A + ~메모리 + C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SBC는 메모리 값과 캐리의 비트 단위 NOT을 어큐뮬레이터에서 뺍니다. 이는 메모리 값의 비트 단위 NOT을 [[#ADC|ADC]]를 사용하여 &#039;&#039;더하는&#039;&#039; 방식으로 수행됩니다. 이 구현 세부 사항은 캐리의 역방향 특성을 설명합니다. SBC는 캐리가 설정되었을 때가 아니라 &#039;&#039;클리어&#039;&#039;되었을 때 1을 더 빼고, 언더플로가 발생하면 캐리가 클리어되고 그렇지 않으면 설정됩니다. [[#ADC|ADC]]와 마찬가지로, 캐리는 한 뺄셈의 빌림(borrow)을 다음 뺄셈으로 넘겨주어 1바이트보다 큰 값의 뺄셈을 가능하게 합니다. 첫 바이트를 빼기 전에 [[#SEC|SEC]]로 캐리를 설정하여 알려진 상태로 만들어, 1만큼의 오차를 피하는 것이 일반적입니다.&lt;br /&gt;
&lt;br /&gt;
오버플로는 [[#ADC|ADC]]와 동일하게 작동하지만, 메모리 값이 반전됩니다. 따라서 결과의 부호가 A의 부호와 다르고 메모리 값의 부호와 같으면 오버플로 또는 언더플로가 발생합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || ~(결과 &amp;lt; $00) || 결과가 $00 미만으로 언더플로(랩어라운드)되면, 부호 없는 언더플로가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || (결과 ^ A) &amp;amp; (결과 ^ ~메모리) &amp;amp; $80 || 결과의 부호가 A의 부호와 다르고 메모리의 부호와 같으면, 부호 있는 오버플로(또는 언더플로)가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $E9 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $E5 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $F5 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $ED || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $FD || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $F9 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $E1 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $F1 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ADC|ADC]], [[#SEC|SEC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SEC}}&lt;br /&gt;
=== SEC - 캐리 설정 (Set Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;C = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SEC는 캐리 플래그를 설정합니다. 특히, 이는 보통 [[#SBC|SBC]]로 값의 하위 바이트를 빼기 전에 추가적인 1이 빼지는 것을 방지하기 위해 수행됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $38 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CLC|CLC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SED}}&lt;br /&gt;
=== SED - 데시멀 설정 (Set Decimal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;D = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SED는 데시멀 플래그를 설정합니다. 데시멀 플래그는 보통 [[BCD]] 모드가 활성화되는지를 제어한다. BCD 모드는 [[NES]]의 [[2A03]] CPU에서는 사용할 수 없지만 플래그 자체는 여전히 작동하며 상태를 저장하는 데 사용될 수 있다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $F8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CLD|CLD]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SEI}}&lt;br /&gt;
=== SEI - 인터럽트 비활성화 설정 (Set Interrupt Disable) ===&lt;br /&gt;
&amp;lt;code&amp;gt;I = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SEI는 인터럽트 비활성화 플래그를 설정하여, CPU가 하드웨어 IRQ를 처리하지 못하게 합니다. 이 플래그 변경의 효과는 한 명령어 지연됩니다. 왜냐하면 플래그는 IRQ가 폴링된 후에 변경되어, 이전에 플래그가 0이었다면 이 명령어와 다음 명령어 사이에 IRQ가 서비스될 수 있기 때문입니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 1 || 이 플래그 변경의 효과는 1 명령어 지연됩니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $78 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CLI|CLI]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|STA}}&lt;br /&gt;
=== STA - A 저장 (Store A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
STA는 어큐뮬레이터 값을 메모리에 저장합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_write|Zero Page]] || $85 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_write|Zero Page,X]] || $95 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_write|Absolute]] || $8D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_write|Absolute,X]] || $9D || 3 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_write|Absolute,Y]] || $99 || 3 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_write|(Indirect,X)]] || $81 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_write|(Indirect),Y]] || $91 || 2 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LDA|LDA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|STX}}&lt;br /&gt;
=== STX - X 저장 (Store X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
STX는 X 레지스터 값을 메모리에 저장합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_write|Zero Page]] || $86 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_write|Zero Page,Y]] || $96 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_write|Absolute]] || $8E || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LDX|LDX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|STY}}&lt;br /&gt;
=== STY - Y 저장 (Store Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = Y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
STY는 Y 레지스터 값을 메모리에 저장합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_write|Zero Page]] || $84 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_write|Zero Page,X]] || $94 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_write|Absolute]] || $8C || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LDY|LDY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TAX}}&lt;br /&gt;
=== TAX - A를 X로 전송 (Transfer A to X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TAX는 어큐뮬레이터 값을 X 레지스터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $AA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TXA|TXA]], [[#TAY|TAY]], [[#TYA|TYA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TAY}}&lt;br /&gt;
=== TAY - A를 Y로 전송 (Transfer A to Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TAY는 어큐뮬레이터 값을 Y 레지스터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $A8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TYA|TYA]], [[#TAX|TAX]], [[#TXA|TXA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TSX}}&lt;br /&gt;
=== TSX - 스택 포인터를 X로 전송 (Transfer Stack Pointer to X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = SP&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TSX는 스택 포인터 값을 X 레지스터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $BA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TXS|TXS]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TXA}}&lt;br /&gt;
=== TXA - X를 A로 전송 (Transfer X to A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TXA는 X 레지스터 값을 어큐뮬레이터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $8A || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TAX|TAX]], [[#TAY|TAY]], [[#TYA|TYA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TXS}}&lt;br /&gt;
=== TXS - X를 스택 포인터로 전송 (Transfer X to Stack Pointer) ===&lt;br /&gt;
&amp;lt;code&amp;gt;SP = X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TXS는 X 레지스터 값을 스택 포인터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $9A || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TXS|TXS]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TYA}}&lt;br /&gt;
=== TYA - Y를 A로 전송 (Transfer Y to A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = Y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TYA는 Y 레지스터 값을 어큐뮬레이터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $98 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TAY|TAY]], [[#TAX|TAX]], [[#TXA|TXA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|footnote}}&lt;br /&gt;
=== 비고 ===&lt;br /&gt;
상대 주소 지정 모드(Relative addressing)에 대해, https://www.nesdev.org/6502_cpu.txt 문서는 분기 명령어가 5개의 가능한 사이클을 갖는 것으로 나타내지만, 이 페이지에 언급된 2-4 사이클이 정확합니다.&lt;br /&gt;
&lt;br /&gt;
        1     PC      R  옵코드 가져오기, PC 증가&lt;br /&gt;
        2     PC      R  피연산자 가져오기, PC 증가&lt;br /&gt;
        3     PC      R  다음 명령어의 옵코드 가져오기,&lt;br /&gt;
                         분기가 발생하면, 피연산자를 PCL에 더함.&lt;br /&gt;
                         그렇지 않으면 PC 증가.&lt;br /&gt;
        4+    PC*     R  다음 명령어의 옵코드 가져오기.&lt;br /&gt;
                         PCH 수정. 변경되지 않았다면 PC 증가.&lt;br /&gt;
        5!    PC      R  다음 명령어의 옵코드 가져오기,&lt;br /&gt;
                         PC 증가.&lt;br /&gt;
&lt;br /&gt;
이 노트들은 문서에서 사이클이 표현되는 방식을 명확히 하는 데 도움이 됩니다:&lt;br /&gt;
* 분기가 발생하지 않으면, 여기에 표시된 사이클 3은 실제로는 다음 명령어의 사이클 1입니다 (분기 명령어는 2 사이클 후에 종료됨).&lt;br /&gt;
* 분기가 발생하고 페이지 경계를 넘지 않으면, 여기에 표시된 사이클 4는 다음 명령어의 사이클 1입니다 (분기 명령어는 3 사이클 후에 종료됨).&lt;br /&gt;
* 페이지 경계가 교차되면, 여기에 표시된 사이클 5는 다음 명령어의 사이클 1입니다 (분기 명령어는 4 사이클 후에 종료됨).&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:Anchor&amp;diff=167</id>
		<title>틀:Anchor</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:Anchor&amp;diff=167"/>
		<updated>2025-10-01T04:52:44Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{ 1|}}}|&amp;lt;span id=&amp;quot;{{anchorencode:{{{ 1|}}}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{ 2|}}}|&amp;lt;span id=&amp;quot;{{anchorencode:{{{ 2|}}}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{ 3|}}}|&amp;lt;span id=&amp;quot;{{anchorencode:{{{ 3|}}}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{ 4|}}}|&amp;lt;span id=&amp;quot;{{anchorencode:{{{ 4|}}}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{ 5|}}}|&amp;lt;span id=&amp;quot;{{anchorencode:{{{ 5|}}}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{ 6|}}}|&amp;lt;span id=&amp;quot;{{anchorencode:{{{ 6|}}}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{ 7|}}}|&amp;lt;span id=&amp;quot;{{anchorencode:{{{ 7|}}}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{ 8|}}}|&amp;lt;span id=&amp;quot;{{anchorencode:{{{ 8|}}}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{ 9|}}}|&amp;lt;span id=&amp;quot;{{anchorencode:{{{ 9|}}}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{10|}}}|&amp;lt;span id=&amp;quot;{{anchorencode:{{{10|}}}}}&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;{{#if:{{{11|}}}&lt;br /&gt;
    |&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;[[Template:Anchor]] (or Anchors): too many anchors, maximum is ten&amp;lt;/span&amp;gt;&amp;lt;!--&lt;br /&gt;
--&amp;gt;}}&amp;lt;!--&lt;br /&gt;
--&amp;gt;}} }} }} }} }} }} }} }} }} }}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
Borrowed from: [https://www.mediawiki.org/wiki/Template:Anchor MediaWiki:Template:Anchor]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=6502_%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=166</id>
		<title>6502 명령어</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=6502_%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=166"/>
		<updated>2025-10-01T04:51:45Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NES }}&lt;br /&gt;
{{ 틀:NesDev발췌 | 원글링크 = https://www.nesdev.org/wiki/Instruction_reference }}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|+ 6502 공식 명령어&lt;br /&gt;
|-&lt;br /&gt;
| [[#ADC|ADC]] || [[#AND|AND]] || [[#ASL|ASL]] || [[#BCC|BCC]] || [[#BCS|BCS]] || [[#BEQ|BEQ]] || [[#BIT|BIT]] || [[#BMI|BMI]] || [[#BNE|BNE]] || [[#BPL|BPL]] || [[#BRK|BRK]] || [[#BVC|BVC]] || [[#BVS|BVS]] || [[#CLC|CLC]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#CLD|CLD]] || [[#CLI|CLI]] || [[#CLV|CLV]] || [[#CMP|CMP]] || [[#CPX|CPX]] || [[#CPY|CPY]] || [[#DEC|DEC]] || [[#DEX|DEX]] || [[#DEY|DEY]] || [[#EOR|EOR]] || [[#INC|INC]] || [[#INX|INX]] || [[#INY|INY]] || [[#JMP|JMP]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#JSR|JSR]] || [[#LDA|LDA]] || [[#LDX|LDX]] || [[#LDY|LDY]] || [[#LSR|LSR]] || [[#NOP|NOP]] || [[#ORA|ORA]] || [[#PHA|PHA]] || [[#PHP|PHP]] || [[#PLA|PLA]] || [[#PLP|PLP]] || [[#ROL|ROL]] || [[#ROR|ROR]] || [[#RTI|RTI]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#RTS|RTS]] || [[#SBC|SBC]] || [[#SEC|SEC]] || [[#SED|SED]] || [[#SEI|SEI]] || [[#STA|STA]] || [[#STX|STX]] || [[#STY|STY]] || [[#TAX|TAX]] || [[#TAY|TAY]] || [[#TSX|TSX]] || [[#TXA|TXA]] || [[#TXS|TXS]] || [[#TYA|TYA]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 종류별 공식 명령어 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
! 종류&lt;br /&gt;
!colspan=8 class=&amp;quot;unsortable&amp;quot; | 명령어&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 접근 (Access)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#LDA|LDA]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#STA|STA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#LDX|LDX]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#STX|STX]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#LDY|LDY]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#STY|STY]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 전송 (Transfer)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#TAX|TAX]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#TXA|TXA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#TAY|TAY]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#TYA|TYA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 산술 (Arithmetic)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#ADC|ADC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SBC|SBC]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#INC|INC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#DEC|DEC]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#INC|INX]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#DEC|DEX]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#INY|INY]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#DEY|DEY]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 시프트 (Shift)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#ASL|ASL]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#LSR|LSR]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#ROL|ROL]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#ROR|ROR]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 비트연산 (Bitwise)&lt;br /&gt;
|[[#AND|AND]]&lt;br /&gt;
|[[#ORA|ORA]]&lt;br /&gt;
|[[#EOR|EOR]]&lt;br /&gt;
|[[#BIT|BIT]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 비교 (Compare)&lt;br /&gt;
|[[#CMP|CMP]]&lt;br /&gt;
|[[#CPX|CPX]]&lt;br /&gt;
|[[#CPY|CPY]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 분기 (Branch)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BCC|BCC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BCS|BCS]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BEQ|BEQ]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BNE|BNE]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BPL|BPL]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BMI|BMI]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BVC|BVC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BVS|BVS]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 점프 (Jump)&lt;br /&gt;
|[[#JMP|JMP]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#JSR|JSR]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#RTS|RTS]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BRK|BRK]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#RTI|RTI]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 스택 (Stack)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#PHA|PHA]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#PLA|PLA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#PHP|PHP]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#PLP|PLP]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#TXS|TXS]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#TSX|TSX]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 플래그 (Flags)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#CLC|CLC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SEC|SEC]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#CLI|CLI]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SEI|SEI]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#CLD|CLD]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SED|SED]]&lt;br /&gt;
|[[#CLV|CLV]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 기타 (Other)&lt;br /&gt;
|[[#NOP|NOP]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 공식 명령어 ==&lt;br /&gt;
{{Anchor|ADC}}&lt;br /&gt;
=== ADC - 캐리와 함께 더하기 (Add with Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A + 메모리 + C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADC는 캐리 플래그와 메모리 값을 어큐뮬레이터에 더합니다. 그 후 캐리 플래그는 비트 7에서 나오는 캐리 값으로 설정되어, 다음 바이트 덧셈으로 1을 넘겨줌으로써 1바이트보다 큰 값을 더할 수 있게 합니다. 이는 부호 없는 오버플로로 생각할 수도 있습니다. 첫 바이트를 더하기 전에 [[#CLC|CLC]]로 캐리를 클리어하여 알려진 상태로 만들어, 1만큼의 오차를 피하는 것이 일반적입니다. 오버플로 플래그는 부호 있는 오버플로나 언더플로가 발생했는지를 나타냅니다. 이는 두 입력이 모두 양수인데 결과가 음수이거나, 두 입력이 모두 음수인데 결과가 양수인 경우에 발생합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 결과 &amp;gt; $FF || 결과가 $FF를 초과하여 오버플로(랩어라운드)되면, 부호 없는 오버플로가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || (결과 ^ A) &amp;amp; (결과 ^ 메모리) &amp;amp; $80 || 결과의 부호가 A와 메모리의 부호와 모두 다르면, 부호 있는 오버플로(또는 언더플로)가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $69 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $65 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $75 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $6D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $7D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $79 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $61 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $71 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SBC|SBC]], [[#CLC|CLC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|AND}}&lt;br /&gt;
=== AND - 비트 단위 AND (Bitwise AND) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A &amp;amp; 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 명령어는 메모리 값과 어큐뮬레이터를 비트 단위로 AND 연산합니다. 두 입력 비트가 모두 1이면 결과 비트는 1이 되고, 그렇지 않으면 0이 됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;white-space:nowrap; border:1px solid; padding:3px; border-color:rgb(162, 169, 177); background-color:rgb(234, 236, 240);&amp;quot; | AND 진리표&lt;br /&gt;
|-&lt;br /&gt;
! A !! 메모리 !! 결과&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $29 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $25 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $35 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $2D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $3D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $39 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $21 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $31 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ORA|ORA]], [[#EOR|EOR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ASL}}&lt;br /&gt;
=== ASL - 산술 왼쪽 시프트 (Arithmetic Shift Left) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 값 &amp;lt;&amp;lt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; C &amp;lt;- [76543210] &amp;lt;- 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASL은 메모리 값 또는 어큐뮬레이터의 모든 비트를 왼쪽으로 한 자리씩 시프트하여, 각 비트의 값을 다음 비트로 이동시킵니다. 비트 7은 캐리 플래그로 시프트되고, 0이 비트 0으로 시프트됩니다. 이는 부호 없는 값을 2로 곱하는 것과 같으며, 캐리는 오버플로를 나타냅니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 7&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $0A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $06 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $16 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $0E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $1E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LSR|LSR]], [[#ROL|ROL]], [[#ROR|ROR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BCC}}&lt;br /&gt;
=== BCC - 캐리가 클리어되면 분기 (Branch if Carry Clear) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
캐리 플래그가 클리어(0)이면, BCC는 상대 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 캐리가 설정되었을 때 [[#BCS|BCS]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
캐리 플래그는 문맥에 따라 다른 의미를 가집니다. BCC는 비교 후에 레지스터가 메모리 값보다 작을 경우 분기하는 데 사용될 수 있으므로, 때때로 BLT(Branch if Less Than)라고도 불립니다. 또한 [[#SBC|SBC]] 후에는 부호 없는 값이 언더플로되었을 경우, [[#ADC|ADC]] 후에는 오버플로되지 &#039;않았을&#039; 경우 분기하는 데 사용될 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $90 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BCS|BCS]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BCS}}&lt;br /&gt;
=== BCS - 캐리가 설정되면 분기 (Branch if Carry Set) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
캐리 플래그가 설정(1)되면, BCS는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 캐리가 클리어되었을 때 [[#BCC|BCC]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
캐리 플래그는 문맥에 따라 다른 의미를 가집니다. BCS는 비교 후에 레지스터가 메모리 값보다 크거나 같을 경우 분기하는 데 사용될 수 있으므로, 때때로 BGE(Branch if Greater Than or Equal)라고도 불립니다. 또한 [[#ADC|ADC]] 후에는 부호 없는 값이 오버플로되었을 경우, [[#SBC|SBC]] 후에는 언더플로되지 &#039;않았을&#039; 경우 분기하는 데 사용될 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $B0 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BCC|BCC]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BEQ}}&lt;br /&gt;
=== BEQ - 같으면 분기 (Branch if Equal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
제로 플래그가 설정(1)되면, BEQ는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 제로가 클리어되었을 때 [[#BNE|BNE]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
비교 연산은 이 플래그를 사용하여 비교된 값들이 같은지 여부를 나타냅니다. A, X, 또는 Y를 변경하는 모든 명령어는 레지스터가 0이 되는지 여부에 따라 암묵적으로 제로 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $F0 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BNE|BNE]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BIT}}&lt;br /&gt;
=== BIT - 비트 테스트 (Bit Test) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A &amp;amp; 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BIT는 플래그를 수정하지만, 메모리나 레지스터는 변경하지 않습니다. 제로 플래그는 어큐뮬레이터와 메모리 값의 AND 연산 결과에 따라 설정되며, 이는 효과적으로 비트마스크를 적용한 후 설정된 비트가 있는지 확인하는 것과 같습니다. 메모리 값의 비트 7과 6은 네거티브 및 오버플로 플래그로 직접 로드되어, 마스크를 A에 로드할 필요 없이 쉽게 확인할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
BIT는 CPU 플래그만 변경하기 때문에, 때때로 CPU 레지스터를 덮어쓰지 않고 하드웨어 레지스터의 읽기 부작용을 트리거하거나, 3 사이클 [[#NOP|NOP]]처럼 사이클을 낭비하는 데 사용됩니다. 고급 기술로, 피연산자에 1 또는 2바이트 명령어를 숨겨두고 직접 점프할 때만 실행되도록 하여 두 코드 경로를 인터리빙하는 데 가끔 사용됩니다. 그러나 피연산자의 명령어는 읽을 주소로 취급되므로, 하드웨어 레지스터를 읽을 경우 부작용을 일으킬 위험이 있습니다. 이 기술은 공간, 시간 또는 레지스터 사용에 대한 제약이 심할 때 유용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 메모리의 비트 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 메모리의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero page]] || $24 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $2C || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#AND|AND]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BMI}}&lt;br /&gt;
&lt;br /&gt;
=== BMI - 음수이면 분기 (Branch if Minus) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
네거티브 플래그가 설정(1)되면, BMI는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 네거티브가 클리어되었을 때 [[#BPL|BPL]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
A, X, 또는 Y를 변경하는 모든 명령어는 비트 7(부호 비트)에 따라 암묵적으로 네거티브 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $30 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BPL|BPL]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BNE}}&lt;br /&gt;
=== BNE - 같지 않으면 분기 (Branch if Not Equal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
제로 플래그가 클리어(0)이면, BNE는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 네거티브가 설정되었을 때 [[#BEQ|BEQ]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
비교 연산은 이 플래그를 사용하여 비교된 값들이 같은지 여부를 나타냅니다. A, X, 또는 Y를 변경하는 모든 명령어는 레지스터가 0이 되는지 여부에 따라 암묵적으로 제로 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $D0 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BEQ|BEQ]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BPL}}&lt;br /&gt;
=== BPL - 양수이면 분기 (Branch if Plus) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
네거티브 플래그가 클리어(0)이면, BPL는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 네거티브가 설정되었을 때 [[#BMI|BMI]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
A, X, 또는 Y를 변경하는 모든 명령어는 비트 7(부호 비트)에 따라 암묵적으로 네거티브 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $10 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BMI|BMI]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BRK}}&lt;br /&gt;
=== BRK - 중단 (소프트웨어 IRQ) (Break) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에 PC + 2를 [[#PHA|푸시]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;스택에 NV11DIZC 플래그를 [[#PHA|푸시]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PC = ($FFFE)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BRK는 인터럽트 요청(IRQ)을 트리거합니다. IRQ는 보통 외부 하드웨어에 의해 트리거되며, BRK는 소프트웨어에서 이를 수행하는 유일한 방법입니다. 일반적인 IRQ처럼, 현재 프로그램 카운터와 프로세서 플래그를 스택에 푸시하고, 인터럽트 비활성화 플래그를 설정한 후, IRQ 핸들러로 점프합니다. 일반적인 IRQ와 달리, 스택에 푸시되는 플래그 바이트에 브레이크 플래그를 설정하고([[#PHP|PHP]]처럼), 인터럽트 비활성화 플래그가 설정되어 있어도 인터럽트를 트리거합니다. 특히, 스택에 푸시되는 반환 주소는 BRK 옵코드 다음 바이트를 건너뜁니다. 이러한 이유로, BRK는 종종 사용되지 않는 즉시 피연산자를 가진 2바이트 명령어로 간주됩니다.&lt;br /&gt;
&lt;br /&gt;
불행히도, 6502 버그로 인해 BRK IRQ는 동시에 발생하는 NMI에 의해 무시될 수 있습니다. 이 경우, NMI 핸들러만 호출되고 IRQ 핸들러는 건너뜁니다. 그러나 스택에 푸시된 플래그 바이트에는 여전히 브레이크 플래그가 설정되어 있으므로, NMI 핸들러는 이 플래그를 확인하여 (느리지만) 이 상황이 발생했음을 감지할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
BRK는 값 $00을 사용하기 때문에, 프로그래밍 가능한 ROM의 모든 바이트는 BRK 명령어로 덮어써서 실행을 IRQ 핸들러로 보낼 수 있습니다. 이는 일회성 프로그래밍 가능 ROM을 패치하는 데 유용합니다. BRK는 또한 시스템 콜 메커니즘으로 사용될 수 있으며, 사용되지 않는 바이트는 소프트웨어에서 인수로 사용될 수 있습니다 (접근하기는 불편하지만). NES 게임의 맥락에서, BRK는 종종 크래시 핸들러로 가장 유용합니다. 사용되지 않는 프로그램 공간을 $00으로 채우고 IRQ 핸들러가 디버깅 정보를 표시하거나 다른 방식으로 크래시를 깔끔하게 처리합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 1 || 이전 플래그가 스택에 푸시된 후 1로 설정됩니다. 이 플래그 변경의 효과는 지연되지 &#039;않습니다&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#B|B - 브레이크]] || 1로 푸시됨 || 이 플래그는 CPU의 실제 상태가 아닌, 스택에 푸시된 플래그 바이트에만 존재합니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#BRK|Implied]] || $00 || 1 || 7 || BRK는 1바이트만 사용하지만, 반환 주소는 다음 바이트를 건너뜁니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#BRK|#Immediate]] || $00 || 2 || 7 || BRK가 다음 바이트를 건너뛰기 때문에, 종종 2바이트 명령어로 간주됩니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#RTI|RTI]], [[#PHP|PHP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BVC}}&lt;br /&gt;
=== BVC - 오버플로가 클리어되면 분기 (Branch if Overflow Clear) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
오버플로 플래그가 클리어(0)이면, BVC는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 오버플로가 설정되었을 때 [[#BVS|BVS]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
제로, 네거티브, 심지어 캐리와 달리, 오버플로는 매우 적은 수의 명령어에 의해서만 수정됩니다. 주로 [[#BIT|BIT]] 명령어와 함께 사용되며, 특히 하드웨어 레지스터를 폴링할 때 사용됩니다. 또한 [[#ADC|ADC]] 및 [[#SBC|SBC]]와 함께 부호 있는 오버플로에 사용되기도 합니다. 표준 6502 칩은 외부 장치가 핀을 사용하여 오버플로를 설정할 수 있게 하여 소프트웨어가 해당 이벤트를 폴링할 수 있도록 하지만, NES의 2A03에는 이 기능이 없습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $50 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BVS|BVS]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BVS}}&lt;br /&gt;
=== BVS - 오버플로가 설정되면 분기 (Branch if Overflow Set) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
오버플로 플래그가 설정(1)되면, BVS는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 오버플로가 클리어되었을 때 [[#BVC|BVC]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
제로, 네거티브, 심지어 캐리와 달리, 오버플로는 매우 적은 수의 명령어에 의해서만 수정됩니다. 주로 [[#BIT|BIT]] 명령어와 함께 사용되며, 특히 하드웨어 레지스터를 폴링할 때 사용됩니다. 또한 [[#ADC|ADC]] 및 [[#SBC|SBC]]와 함께 부호 있는 오버플로에 사용되기도 합니다. 표준 6502 칩은 외부 장치가 핀을 사용하여 오버플로를 설정할 수 있게 하여 소프트웨어가 해당 이벤트를 폴링할 수 있도록 하지만, NES의 2A03 CPU에는 이 기능이 없습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $70 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BVC|BVC]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLC}}&lt;br /&gt;
=== CLC - 캐리 클리어 (Clear Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;C = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLC는 캐리 플래그를 클리어합니다. 특히, 이는 보통 [[#ADC|ADC]]로 값의 하위 바이트를 더하기 전에 추가적인 1이 더해지는 것을 방지하기 위해 수행됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $18 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SEC|SEC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLD}}&lt;br /&gt;
=== CLD - 데시멀 클리어 (Clear Decimal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;D = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLD는 데시멀 플래그를 클리어합니다. 데시멀 플래그는 보통 [[BCD]] 모드의 활성화 여부를 제어하지만, 이 모드는 [[NES]]의 [[2A03]] CPU에서는 사용할 수 없다. 그러나 플래그 자체는 여전히 작동하며 상태를 저장하는 데 사용될 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $D8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SED|SED]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLI}}&lt;br /&gt;
=== CLI - 인터럽트 비활성화 클리어 (Clear Interrupt Disable) ===&lt;br /&gt;
&amp;lt;code&amp;gt;I = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLI는 인터럽트 비활성화 플래그를 클리어하여, CPU가 하드웨어 IRQ를 처리할 수 있도록 합니다. 이 플래그 변경의 효과는 한 명령어 지연됩니다. 왜냐하면 플래그는 IRQ가 폴링된 후에 변경되어, 보류 중인 IRQ가 감지되고 서비스되기 전에 다음 명령어가 실행될 수 있도록 하기 때문입니다. 이 플래그는 NMI에는 영향을 미치지 않으며, NMI는 이름(&amp;quot;non-maskable&amp;quot;)에서 알 수 있듯이 CPU가 무시할 수 없습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 0 || 이 플래그 변경의 효과는 1 명령어 지연됩니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $58 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SEI|SEI]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLV}}&lt;br /&gt;
=== CLV - 오버플로 클리어 (Clear Overflow) ===&lt;br /&gt;
&amp;lt;code&amp;gt;V = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLV는 오버플로 플래그를 클리어합니다. 이에 해당하는 SEV 명령어는 없습니다. 대신, 오버플로 설정은 6502 CPU에서 외부 하드웨어에 의해 제어되는 핀으로 노출되어 있으며, NES의 2A03 CPU에는 전혀 노출되어 있지 않습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $B8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CMP}}&lt;br /&gt;
=== CMP - A 비교 (Compare A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A - 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CMP는 A를 메모리 값과 비교하여, 플래그를 적절하게 설정하지만 어떤 레지스터도 수정하지 않습니다. 비교는 뺄셈으로 구현되며, 빌림(borrow)이 없으면 캐리를 설정하고, 결과가 0이면 제로를 설정하고, 결과가 음수이면 네거티브를 설정합니다. 그러나 캐리와 제로는 종종 부등식으로 기억하는 것이 가장 쉽습니다.&lt;br /&gt;
&lt;br /&gt;
비교는 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || A &amp;gt;= 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || A == 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $C9 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $C5 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $D5 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $CD || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $DD || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $D9 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $C1 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $D1 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CPX|CPX]], [[#CPY|CPY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CPX}}&lt;br /&gt;
=== CPX - X 비교 (Compare X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X - 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CPX는 X를 메모리 값과 비교하여, 플래그를 적절하게 설정하지만 어떤 레지스터도 수정하지 않습니다. 비교는 뺄셈으로 구현되며, 빌림(borrow)이 없으면 캐리를 설정하고, 결과가 0이면 제로를 설정하고, 결과가 음수이면 네거티브를 설정합니다. 그러나 캐리와 제로는 종종 부등식으로 기억하는 것이 가장 쉽습니다.&lt;br /&gt;
&lt;br /&gt;
비교는 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || X &amp;gt;= 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || X == 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $E0 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $E4 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $EC || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CMP|CMP]], [[#CPY|CPY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CPY}}&lt;br /&gt;
=== CPY - Y 비교 (Compare Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y - 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CPY는 Y를 메모리 값과 비교하여, 플래그를 적절하게 설정하지만 어떤 레지스터도 수정하지 않습니다. 비교는 뺄셈으로 구현되며, 빌림(borrow)이 없으면 캐리를 설정하고, 결과가 0이면 제로를 설정하고, 결과가 음수이면 네거티브를 설정합니다. 그러나 캐리와 제로는 종종 부등식으로 기억하는 것이 가장 쉽습니다.&lt;br /&gt;
&lt;br /&gt;
비교는 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || Y &amp;gt;= 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || Y == 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $C0 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $C4 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $CC || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CMP|CMP]], [[#CPX|CPX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|DEC}}&lt;br /&gt;
=== DEC - 메모리 감소 (Decrement Memory) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = 메모리 - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DEC는 메모리 위치에서 1을 뺍니다. 특히, 이 명령어의 어큐뮬레이터 버전은 없으며, 대신 [[#ADC|ADC]] 또는 [[#SBC|SBC]]를 사용해야 합니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
감소는 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $C6 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $D6 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $CE || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $DE || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#INC|INC]], [[#ADC|ADC]], [[#SBC|SBC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|DEX}}&lt;br /&gt;
=== DEX - X 감소 (Decrement X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = X - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DEX는 X 레지스터에서 1을 뺍니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $CA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#INX|INX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|DEY}}&lt;br /&gt;
=== DEY - Y 감소 (Decrement Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = Y - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DEY는 Y 레지스터에서 1을 뺍니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $88 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#INY|INY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|EOR}}&lt;br /&gt;
=== EOR - 비트 단위 배타적 OR (Bitwise Exclusive OR) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A ^ 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EOR은 메모리 값과 어큐뮬레이터를 비트 단위로 배타적 OR(exclusive-OR) 연산합니다. 입력 비트가 다르면 결과 비트는 1이 되고, 같으면 0이 됩니다. 이 연산은 XOR로도 알려져 있습니다.&lt;br /&gt;
&lt;br /&gt;
6502에는 비트 단위 NOT 명령어가 없지만, 값 $FF와 함께 EOR을 사용하면 동일한 동작을 하여 다른 값의 모든 비트를 반전시킵니다. 사실, EOR은 비트마스크를 사용한 NOT으로 생각할 수 있습니다. 한 값의 모든 1 비트는 다른 값의 해당 비트를 반전시키는 효과를 가지며, 0 비트는 아무것도 하지 않습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;white-space:nowrap; border:1px solid; padding:3px; border-color:rgb(162, 169, 177); background-color:rgb(234, 236, 240);&amp;quot; | EOR 진리표&lt;br /&gt;
|-&lt;br /&gt;
! A !! 메모리 !! 결과&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $49 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $45 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $55 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $4D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $5D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $59 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $41 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $51 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#AND|AND]], [[#ORA|ORA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|INC}}&lt;br /&gt;
&lt;br /&gt;
=== INC - 메모리 증가 (Increment Memory) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = 메모리 + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INC는 메모리 위치에 1을 더합니다. 특히, 이 명령어의 어큐뮬레이터 버전은 없으며, 대신 [[#ADC|ADC]] 또는 [[#SBC|SBC]]를 사용해야 합니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
증가는 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $E6 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $F6 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $EE || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $FE || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#DEC|DEC]], [[#ADC|ADC]], [[#SBC|SBC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|INX}}&lt;br /&gt;
=== INX - X 증가 (Increment X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = X + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INX는 X 레지스터에 1을 더합니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $E8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#DEX|DEX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|INY}}&lt;br /&gt;
=== INY - Y 증가 (Increment Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = Y + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INY는 Y 레지스터에 1을 더합니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $C8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#DEY|DEY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|JMP}}&lt;br /&gt;
=== JMP - 점프 (Jump) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JMP는 프로그램 카운터를 새로운 값으로 설정하여, 코드가 새로운 위치에서 실행되도록 합니다. 해당 위치에서 반환하려면, 대신 [[#JSR|JSR]]을 사용해야 합니다.&lt;br /&gt;
&lt;br /&gt;
간접 주소 지정 모드는 피연산자를 포인터로 사용하여, 지정된 주소에서 새로운 2바이트 프로그램 카운터 값을 가져옵니다. 불행히도, CPU 버그로 인해 이 2바이트 변수의 주소가 $FF로 끝나 페이지를 교차하게 되면, CPU는 두 번째 바이트를 읽을 때 페이지를 증가시키지 못해 잘못된 주소를 읽게 됩니다. 예를 들어, JMP ($03FF)는 $03FF와 $0400 대신 &#039;&#039;$0300&#039;&#039;을 읽습니다. 이 변수가 페이지를 교차하지 않도록 주의해야 합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute|Absolute]] || $4C || 3 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect|(Indirect)]] || $6C || 3 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#JSR|JSR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|JSR}}&lt;br /&gt;
=== JSR - 서브루틴으로 점프 (Jump to Subroutine) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에 PC + 2를 [[#PHA|푸시]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PC = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSR은 현재 프로그램 카운터를 스택에 푸시한 다음, 프로그램 카운터를 새로운 값으로 설정합니다. 이를 통해 코드는 함수를 호출하고 [[#RTS|RTS]]로 JSR 다음 명령어로 돌아올 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
특히, 스택의 반환 주소는 다음 명령어의 시작 지점이 아니라, 그보다 1바이트 앞을 가리킵니다. 이는 [[#RTS|RTS]]가 다음 명령어를 가져오기 전에 프로그램 카운터를 증가시키기 때문입니다. 이는 인터럽트에 의해 푸시되고 [[#RTI|RTI]]에 의해 사용되는 반환 주소와 다릅니다. 인터럽트의 반환 주소는 다음 명령어를 직접 가리킵니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute|Absolute]] || $20 || 3 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#RTS|RTS]], [[#JMP|JMP]], [[#RTI|RTI]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LDA}}&lt;br /&gt;
=== LDA - A 로드 (Load A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LDA는 메모리 값을 어큐뮬레이터로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $A9 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $A5 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $B5 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $AD || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $BD || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $B9 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $A1 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $B1 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#STA|STA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LDX}}&lt;br /&gt;
=== LDX - X 로드 (Load X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LDX는 메모리 값을 X 레지스터로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $A2 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $A6 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,Y]] || $B6 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $AE || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $BE || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#STX|STX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LDY}}&lt;br /&gt;
=== LDY - Y 로드 (Load Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LDY는 메모리 값을 Y 레지스터로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $A0 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $A4 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $B4 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $AC || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $BC || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#STY|STY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LSR}}&lt;br /&gt;
=== LSR - 논리적 오른쪽 시프트 (Logical Shift Right) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 값 &amp;gt;&amp;gt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; 0 -&amp;gt; [76543210] -&amp;gt; C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LSR은 메모리 값 또는 어큐뮬레이터의 모든 비트를 오른쪽으로 한 자리씩 시프트하여, 각 비트의 값을 다음 비트로 이동시킵니다. 0이 비트 7로 시프트되고, 비트 0은 캐리 플래그로 시프트됩니다. 이는 부호 없는 값을 2로 나누고 내림하는 것과 같으며, 나머지는 캐리에 저장됩니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $4A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $46 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $56 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $4E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $5E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ASL|ASL]], [[#ROL|ROL]], [[#ROR|ROR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|NOP}}&lt;br /&gt;
&lt;br /&gt;
=== NOP - 아무 작업 안 함 (No Operation) ===&lt;br /&gt;
&lt;br /&gt;
NOP는 아무 효과가 없습니다. 단지 공간과 CPU 사이클을 낭비할 뿐입니다. 이 명령어는 원하는 시간만큼 지연시키기 위한 시간 코드 작성, 페이지 교차 여부를 보장하기 위한 패딩, 또는 바이너리에서 코드를 비활성화할 때 유용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $EA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ORA}}&lt;br /&gt;
=== ORA - 비트 단위 OR (Bitwise OR) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A | 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ORA는 메모리 값과 어큐뮬레이터를 비트 단위로 포괄적 OR(inclusive-OR) 연산합니다. 입력 비트 중 하나라도 1이면 결과 비트는 1이 되고, 그렇지 않으면 0이 됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;white-space:nowrap; border:1px solid; padding:3px; border-color:rgb(162, 169, 177); background-color:rgb(234, 236, 240);&amp;quot; | OR 진리표&lt;br /&gt;
|-&lt;br /&gt;
! A !! 메모리 !! 결과&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $09 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $05 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $15 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $0D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $1D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $19 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $01 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $11 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#AND|AND]], [[#EOR|EOR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PHA}}&lt;br /&gt;
=== PHA - A 푸시 (Push A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;($0100 + SP) = A&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PHA는 A의 값을 현재 스택 위치에 저장한 다음 스택 포인터를 감소시킵니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $48 || 1 || 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PLA|PLA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PHP}}&lt;br /&gt;
=== PHP - 프로세서 상태 푸시 (Push Processor Status) ===&lt;br /&gt;
&amp;lt;code&amp;gt;($0100 + SP) = NV11DIZC&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PHP는 6개의 상태 플래그와 B 플래그를 포함하는 바이트를 스택에 저장한 다음 스택 포인터를 감소시킵니다. B 플래그와 추가 비트는 모두 1로 푸시됩니다. 비트 순서는 NV1BDIZC (높은 쪽에서 낮은 쪽으로)입니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#B|B - 브레이크]] || 1로 푸시됨 || 이 플래그는 CPU의 실제 상태가 아닌, 스택에 푸시된 플래그 바이트에만 존재합니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $08 || 1 || 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PLP|PLP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PLA}}&lt;br /&gt;
=== PLA - A 풀 (Pull A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP + 1&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;A = ($0100 + SP)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLA는 스택 포인터를 증가시킨 다음 해당 스택 위치의 값을 A로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $68 || 1 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PHA|PHA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PLP}}&lt;br /&gt;
=== PLP - 프로세서 상태 풀 (Pull Processor Status) ===&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP + 1&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NVxxDIZC = ($0100 + SP)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLP는 스택 포인터를 증가시킨 다음 해당 스택 위치의 값을 6개의 상태 플래그로 로드합니다. 비트 순서는 NVxxDIZC (높은 쪽에서 낮은 쪽으로)입니다. B 플래그와 추가 비트는 무시됩니다. I 변경의 효과는 한 명령어 지연됩니다. 왜냐하면 플래그는 IRQ가 폴링된 후에 변경되어, [[#CLI|CLI]] 및 [[#SEI|SEI]]와 같이 다음 명령어에서 IRQ가 폴링될 때까지 효과가 지연되기 때문입니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 결과의 비트 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과의 비트 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 결과의 비트 2 || 이 플래그 변경의 효과는 1 명령어 지연됩니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 결과의 비트 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 결과의 비트 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $28 || 1 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PHP|PHP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ROL}}&lt;br /&gt;
=== ROL - 왼쪽으로 회전 (Rotate Left) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 캐리를 통해 값 &amp;lt;&amp;lt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; C &amp;lt;- [76543210] &amp;lt;- C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROL은 메모리 값 또는 어큐뮬레이터를 왼쪽으로 시프트하여, 각 비트의 값을 다음 비트로 이동시키고 캐리 플래그를 비트 7 위와 비트 0 아래에 모두 있는 것처럼 취급합니다. 구체적으로, 캐리의 값은 비트 0으로 시프트되고, 비트 7은 캐리로 시프트됩니다. 왼쪽으로 9번 회전하면 값과 캐리가 원래 상태로 돌아옵니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 7&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $2A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $26 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $36 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $2E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $3E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ROR|ROR]], [[#ASL|ASL]], [[#LSR|LSR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ROR}}&lt;br /&gt;
=== ROR - 오른쪽으로 회전 (Rotate Right) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 캐리를 통해 값 &amp;gt;&amp;gt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; C -&amp;gt; [76543210] -&amp;gt; C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROR은 메모리 값 또는 어큐뮬레이터를 오른쪽으로 시프트하여, 각 비트의 값을 다음 비트로 이동시키고 캐리 플래그를 비트 7 위와 비트 0 아래에 모두 있는 것처럼 취급합니다. 구체적으로, 캐리의 값은 비트 7로 시프트되고, 비트 0은 캐리로 시프트됩니다. 오른쪽으로 9번 회전하면 값과 캐리가 원래 상태로 돌아옵니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $6A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $66 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $76 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $6E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $7E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ROL|ROL]], [[#ASL|ASL]], [[#LSR|LSR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|RTI}}&lt;br /&gt;
=== RTI - 인터럽트에서 복귀 (Return from Interrupt) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에서 NVxxDIZC 플래그를 [[#PLA|풀]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;스택에서 PC를 [[#PLA|풀]]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RTI는 인터럽트 핸들러에서 복귀하며, 먼저 스택에서 6개의 상태 플래그를 풀(pull)한 다음 새로운 프로그램 카운터를 풀합니다. 플래그 풀링은 [[#PLP|PLP]]처럼 동작하지만, 인터럽트 비활성화 플래그의 변경 사항이 1 명령어 지연되지 않고 즉시 적용된다는 점이 다릅니다. 이는 플래그가 명령어에 대한 IRQ가 폴링된 후가 아니라 전에 변경되기 때문입니다. PC 풀링은 [[#RTS|RTS]]처럼 동작하지만, 반환 주소가 1바이트 전이 아닌 다음 명령어의 정확한 주소라는 점이 다릅니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 풀링된 플래그의 비트 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 풀링된 플래그의 비트 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 풀링된 플래그의 비트 2 || 이 플래그 변경의 효과는 지연되지 &#039;않습니다&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 풀링된 플래그의 비트 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 풀링된 플래그의 비트 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 풀링된 플래그의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $40 || 1 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BRK|BRK]], [[#PLP|PLP]], [[#RTS|RTS]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|RTS}}&lt;br /&gt;
=== RTS - 서브루틴에서 복귀 (Return from Subroutine) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에서 PC를 [[#PLA|풀]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RTS는 스택에서 주소를 프로그램 카운터로 풀(pull)한 다음 프로그램 카운터를 증가시킵니다. 이는 보통 함수 끝에서 함수를 호출한 [[#JSR|JSR]] 다음 명령어로 돌아가기 위해 사용됩니다. 그러나 RTS는 점프 테이블을 구현하는 데 사용되기도 합니다([[Jump table]] 및 [[RTS Trick]] 참조).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $60 || 1 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#JSR|JSR]], [[#PLA|PLA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SBC}}&lt;br /&gt;
=== SBC - 캐리와 함께 빼기 (Subtract with Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A - 메모리 - ~C&amp;lt;/code&amp;gt;, 또는 동등하게: &amp;lt;code&amp;gt;A = A + ~메모리 + C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SBC는 메모리 값과 캐리의 비트 단위 NOT을 어큐뮬레이터에서 뺍니다. 이는 메모리 값의 비트 단위 NOT을 [[#ADC|ADC]]를 사용하여 &#039;&#039;더하는&#039;&#039; 방식으로 수행됩니다. 이 구현 세부 사항은 캐리의 역방향 특성을 설명합니다. SBC는 캐리가 설정되었을 때가 아니라 &#039;&#039;클리어&#039;&#039;되었을 때 1을 더 빼고, 언더플로가 발생하면 캐리가 클리어되고 그렇지 않으면 설정됩니다. [[#ADC|ADC]]와 마찬가지로, 캐리는 한 뺄셈의 빌림(borrow)을 다음 뺄셈으로 넘겨주어 1바이트보다 큰 값의 뺄셈을 가능하게 합니다. 첫 바이트를 빼기 전에 [[#SEC|SEC]]로 캐리를 설정하여 알려진 상태로 만들어, 1만큼의 오차를 피하는 것이 일반적입니다.&lt;br /&gt;
&lt;br /&gt;
오버플로는 [[#ADC|ADC]]와 동일하게 작동하지만, 메모리 값이 반전됩니다. 따라서 결과의 부호가 A의 부호와 다르고 메모리 값의 부호와 같으면 오버플로 또는 언더플로가 발생합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || ~(결과 &amp;lt; $00) || 결과가 $00 미만으로 언더플로(랩어라운드)되면, 부호 없는 언더플로가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || (결과 ^ A) &amp;amp; (결과 ^ ~메모리) &amp;amp; $80 || 결과의 부호가 A의 부호와 다르고 메모리의 부호와 같으면, 부호 있는 오버플로(또는 언더플로)가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $E9 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $E5 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $F5 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $ED || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $FD || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $F9 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $E1 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $F1 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ADC|ADC]], [[#SEC|SEC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SEC}}&lt;br /&gt;
=== SEC - 캐리 설정 (Set Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;C = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SEC는 캐리 플래그를 설정합니다. 특히, 이는 보통 [[#SBC|SBC]]로 값의 하위 바이트를 빼기 전에 추가적인 1이 빼지는 것을 방지하기 위해 수행됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $38 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CLC|CLC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SED}}&lt;br /&gt;
=== SED - 데시멀 설정 (Set Decimal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;D = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SED는 데시멀 플래그를 설정합니다. 데시멀 플래그는 보통 [[BCD]] 모드가 활성화되는지를 제어한다. BCD 모드는 [[NES]]의 [[2A03]] CPU에서는 사용할 수 없지만 플래그 자체는 여전히 작동하며 상태를 저장하는 데 사용될 수 있다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $F8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CLD|CLD]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SEI}}&lt;br /&gt;
=== SEI - 인터럽트 비활성화 설정 (Set Interrupt Disable) ===&lt;br /&gt;
&amp;lt;code&amp;gt;I = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SEI는 인터럽트 비활성화 플래그를 설정하여, CPU가 하드웨어 IRQ를 처리하지 못하게 합니다. 이 플래그 변경의 효과는 한 명령어 지연됩니다. 왜냐하면 플래그는 IRQ가 폴링된 후에 변경되어, 이전에 플래그가 0이었다면 이 명령어와 다음 명령어 사이에 IRQ가 서비스될 수 있기 때문입니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 1 || 이 플래그 변경의 효과는 1 명령어 지연됩니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $78 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CLI|CLI]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|STA}}&lt;br /&gt;
=== STA - A 저장 (Store A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
STA는 어큐뮬레이터 값을 메모리에 저장합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_write|Zero Page]] || $85 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_write|Zero Page,X]] || $95 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_write|Absolute]] || $8D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_write|Absolute,X]] || $9D || 3 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_write|Absolute,Y]] || $99 || 3 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_write|(Indirect,X)]] || $81 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_write|(Indirect),Y]] || $91 || 2 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LDA|LDA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|STX}}&lt;br /&gt;
=== STX - X 저장 (Store X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
STX는 X 레지스터 값을 메모리에 저장합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_write|Zero Page]] || $86 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_write|Zero Page,Y]] || $96 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_write|Absolute]] || $8E || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LDX|LDX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|STY}}&lt;br /&gt;
=== STY - Y 저장 (Store Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = Y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
STY는 Y 레지스터 값을 메모리에 저장합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_write|Zero Page]] || $84 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_write|Zero Page,X]] || $94 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_write|Absolute]] || $8C || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LDY|LDY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TAX}}&lt;br /&gt;
=== TAX - A를 X로 전송 (Transfer A to X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TAX는 어큐뮬레이터 값을 X 레지스터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $AA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TXA|TXA]], [[#TAY|TAY]], [[#TYA|TYA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TAY}}&lt;br /&gt;
=== TAY - A를 Y로 전송 (Transfer A to Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TAY는 어큐뮬레이터 값을 Y 레지스터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $A8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TYA|TYA]], [[#TAX|TAX]], [[#TXA|TXA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TSX}}&lt;br /&gt;
=== TSX - 스택 포인터를 X로 전송 (Transfer Stack Pointer to X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = SP&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TSX는 스택 포인터 값을 X 레지스터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $BA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TXS|TXS]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TXA}}&lt;br /&gt;
=== TXA - X를 A로 전송 (Transfer X to A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TXA는 X 레지스터 값을 어큐뮬레이터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $8A || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TAX|TAX]], [[#TAY|TAY]], [[#TYA|TYA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TXS}}&lt;br /&gt;
=== TXS - X를 스택 포인터로 전송 (Transfer X to Stack Pointer) ===&lt;br /&gt;
&amp;lt;code&amp;gt;SP = X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TXS는 X 레지스터 값을 스택 포인터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $9A || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TXS|TXS]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TYA}}&lt;br /&gt;
=== TYA - Y를 A로 전송 (Transfer Y to A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = Y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TYA는 Y 레지스터 값을 어큐뮬레이터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $98 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TAY|TAY]], [[#TAX|TAX]], [[#TXA|TXA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|footnote}}&lt;br /&gt;
=== 비고 ===&lt;br /&gt;
상대 주소 지정 모드(Relative addressing)에 대해, https://www.nesdev.org/6502_cpu.txt 문서는 분기 명령어가 5개의 가능한 사이클을 갖는 것으로 나타내지만, 이 페이지에 언급된 2-4 사이클이 정확합니다.&lt;br /&gt;
&lt;br /&gt;
        1     PC      R  옵코드 가져오기, PC 증가&lt;br /&gt;
        2     PC      R  피연산자 가져오기, PC 증가&lt;br /&gt;
        3     PC      R  다음 명령어의 옵코드 가져오기,&lt;br /&gt;
                         분기가 발생하면, 피연산자를 PCL에 더함.&lt;br /&gt;
                         그렇지 않으면 PC 증가.&lt;br /&gt;
        4+    PC*     R  다음 명령어의 옵코드 가져오기.&lt;br /&gt;
                         PCH 수정. 변경되지 않았다면 PC 증가.&lt;br /&gt;
        5!    PC      R  다음 명령어의 옵코드 가져오기,&lt;br /&gt;
                         PC 증가.&lt;br /&gt;
&lt;br /&gt;
이 노트들은 문서에서 사이클이 표현되는 방식을 명확히 하는 데 도움이 됩니다:&lt;br /&gt;
* 분기가 발생하지 않으면, 여기에 표시된 사이클 3은 실제로는 다음 명령어의 사이클 1입니다 (분기 명령어는 2 사이클 후에 종료됨).&lt;br /&gt;
* 분기가 발생하고 페이지 경계를 넘지 않으면, 여기에 표시된 사이클 4는 다음 명령어의 사이클 1입니다 (분기 명령어는 3 사이클 후에 종료됨).&lt;br /&gt;
* 페이지 경계가 교차되면, 여기에 표시된 사이클 5는 다음 명령어의 사이클 1입니다 (분기 명령어는 4 사이클 후에 종료됨).&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=165</id>
		<title>틀:알림 상자</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=165"/>
		<updated>2025-10-01T04:35:23Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{| style=&amp;quot;clear: both; width: {{{폭|100%}}}; margin: 0 auto; border-collapse: collapse; background: {{{배경색|#fbfbfb}}}; border: {{{경계선|1px solid #aaa}}};  {{#if:{{{오른쪽색|}}}|border-right: 10px solid {{{오른쪽색|#1e90ff}}}; }}border-top: 5px solid {{{색|#1e90ff}}};&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
{{#ifeq:{{{왼쪽 그림}}}|없음| |{{!}}style=&amp;quot;width: 52px; padding: 2px 0px 2px 0.5em;&amp;quot;{{!}}{{{왼쪽 그림 예외|[[그림:{{{왼쪽 그림|information icon4.svg}}}|링크=|{{{왼쪽 그림 크기|45px}}}|{{{왼쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|style=&amp;quot;padding: {{{간격|12px}}}; font-size:130%;&amp;quot;|{{#if:{{{제목|}}}|&amp;lt;span style=&amp;quot;color:{{{제목색|#000000}}};&amp;quot;&amp;gt;&#039;&#039;&#039;{{{제목}}}&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;}}&amp;lt;span style=&amp;quot;color:{{{본문색|#000000}}};font-size:70%;line-height:0.8;&amp;quot;&amp;gt;{{{본문|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
{{#if:{{{오른쪽 그림|}}}|{{!}}style=&amp;quot;width: 52px; padding: 2px 4px 2px 0px;&amp;quot;{{!}}{{{오른쪽 그림 예외|[[그림:{{{오른쪽 그림| - }}}|링크=|{{{오른쪽 그림 크기|45px}}}|{{{오른쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|}{{#if: {{{분류|}}}|[[분류:{{{분류}}}]]}}{{#ifeq: {{NAMESPACE}}|틀|[[분류:알림 상자 틀]]}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 설명 || 사용&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* 폭 = 100% (기본 설정)&lt;br /&gt;
* 색 = #1e90ff (기본 설정)&lt;br /&gt;
* 배경색 = #fbfbfb (기본 설정)&lt;br /&gt;
* 경계선 = 1px solid #aaaaaa (기본 설정)&lt;br /&gt;
* 왼쪽 그림 = Info non-talk.png (기본 설정, ‘없음’으로 설정할 수도 있습니다.)&lt;br /&gt;
* 왼쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 왼쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 왼쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 오른쪽 그림 = 없어도 됨&lt;br /&gt;
* 오른쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 오른쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 오른쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 간격 = 12px (기본 설정)&lt;br /&gt;
* 제목색 = #000000 (기본 설정)&lt;br /&gt;
* 본문색 = #000000 (기본 설정)&lt;br /&gt;
* 제목 = &lt;br /&gt;
* 본문 = &lt;br /&gt;
||&amp;lt;pre&amp;gt;{{알림 상자&lt;br /&gt;
| 폭 = &lt;br /&gt;
| 색 = &lt;br /&gt;
| 배경색 = &lt;br /&gt;
| 경계선 = &lt;br /&gt;
| 왼쪽 그림 =&lt;br /&gt;
| 왼쪽 그림 크기 =&lt;br /&gt;
| 왼쪽 그림 설명 =&lt;br /&gt;
| 왼쪽 그림 예외 =&lt;br /&gt;
| 오른쪽 그림 = &lt;br /&gt;
| 오른쪽 그림 크기 =&lt;br /&gt;
| 오른쪽 그림 설명 =&lt;br /&gt;
| 오른쪽 그림 예외 =&lt;br /&gt;
| 간격 = &lt;br /&gt;
| 제목 = &lt;br /&gt;
| 본문 = &lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=PPU&amp;diff=164</id>
		<title>PPU</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=PPU&amp;diff=164"/>
		<updated>2025-10-01T04:33:07Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NES }}&lt;br /&gt;
[[NES]] &#039;&#039;&#039;PPU&#039;&#039;&#039;(Picture Processing Unit)는 텔레비전 수신용으로 설계된 240라인의 픽셀로 구성된 컴포지트 비디오 신호를 생성한다.&lt;br /&gt;
&lt;br /&gt;
1980년대 초 패미컴 칩셋이 설계되었을 당시, 이는 비디오 게임을 위한 매우 진보한 2D 그래픽 생성기로 여겨졌다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PPU는 자체 주소 공간을 가지며, 여기에는 일반적으로 10KB의 메모리가 포함된다.&lt;br /&gt;
&lt;br /&gt;
이 공간은 게임팩에 탑재된 8KB의 ROM 또는 RAM(일반적인 매퍼를 사용하면 확장 가능)에 배경 및 스프라이트 타일의 모양을 저장하고, 콘솔 내 2KB의 RAM에 한두 개의 맵을 저장하는 데 사용된다.&lt;br /&gt;
&lt;br /&gt;
두 개의 분리된 더 작은 주소 공간에는 여러 인덱스에 연결된 색상을 제어하는 팔레트와, 스프라이트(독립적으로 움직이는 객체)의 위치, 방향, 모양, 색상 정보를 저장하는 [[OAM]](Object Attribute Memory)이 존재한다. 이들은 PPU 내부에 있으며, 팔레트는 정적 메모리로 구성된 반면 [[OAM]]은 동적 메모리를 사용한다.(PPU가 렌더링을 멈추면 데이터가 서서히 소실됨)&lt;br /&gt;
&lt;br /&gt;
[[PPU 레지스터]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[PPU 패턴 테이블]](타일 그래픽)&amp;lt;br&amp;gt;&lt;br /&gt;
[[PPU 네임테이블]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[PPU Attribute table]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[OAM]](sprite)&amp;lt;br&amp;gt;&lt;br /&gt;
[[팔레트]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[메모리 맵]]&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=2A03&amp;diff=163</id>
		<title>2A03</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=2A03&amp;diff=163"/>
		<updated>2025-10-01T04:32:22Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NES }}&lt;br /&gt;
2A03은 RP2A03의 약칭으로, [[NTSC]] 방식 [[NES]] [[CPU]] 칩의 일반적인 명칭이다.&lt;br /&gt;
&lt;br /&gt;
이 칩은 MOS Technology [[6502]] 프로세서(10진 모드 없음), 오디오, 조이패드, DMA 기능으로 구성된다.&lt;br /&gt;
&lt;br /&gt;
[[PAL]] 방식 시스템에서는 유사한 RP2A07을 사용하는데, 이 칩은 [[클럭]] 속도가 다르고 샘플 오디오 속도가 조정되었으며 DMA 버그가 수정되었다.&lt;br /&gt;
&lt;br /&gt;
===2A03 레지스터 사양===&lt;br /&gt;
여기서 레지스터란 CPU에서 여러 외부 장치를 조작하기 위해 메모리 공간 상에 예약된 공간을 의미한다. 즉, 이러한 주소에 읽기·쓰기 작업을 할 경우 RAM의 데이터를 조작하는게 아니라 다른 장치의 상태를 읽어오거나 명령 또는 데이터를 전달하는 것이 된다.&lt;br /&gt;
&lt;br /&gt;
2A03은 6502 코어의 레지스터 외에도 [[사운드]] 생성([[NES APU]] 참조), 조이스틱 입력, [[OAM DMA]] 전송을 위한 22개의 메모리 매핑 레지스터를 포함한다.&lt;br /&gt;
&lt;br /&gt;
PPU 및 매퍼 레지스터의 주소와 달리, CPU 레지스터 주소는 완전히 디코딩된다.&lt;br /&gt;
&lt;br /&gt;
이는 CPU 레지스터의 끝($4020)부터 주소 공간의 최상단($FFFF)까지의 전체 공간을 게임팩에서 사용할 수 있음을 의미한다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$4018-$401F 범위는 정식 발매된 NES에서 아무 기능도 하지 않는다. 이 영역은 실제 생산품에는 적용되지 않은 2A03 기능을 위해 의도되었다.&lt;br /&gt;
&lt;br /&gt;
다양한 2A03 리비전에는 테스트 레지스터(정상 작동 시 비활성화됨) 또는 회로의 나머지 부분과 연결이 끊긴 채 불완전하게 구현된 IRQ 카운터의 흔적이 포함되어 있다.&lt;br /&gt;
&lt;br /&gt;
[[매퍼]]는 2A03과 충돌 없이 이 영역에 쓰기 가능한 레지스터를 배치할 수 있지만, [[DMA]]와의 충돌 때문에 읽기 가능한 레지스터를 배치하는 것은 피해야 한다. (이 문서의 의미는 [[MMC5]]에 설명하도록 하겠다.)&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ 2A03 레지스터&lt;br /&gt;
! 주소&lt;br /&gt;
! 이름&lt;br /&gt;
! 설명 (쓰기)&lt;br /&gt;
! 설명 (읽기)&lt;br /&gt;
|-&lt;br /&gt;
| $4000&lt;br /&gt;
| SQ1_VOL (Pulse 1)&lt;br /&gt;
| 듀티 사이클 및 볼륨&lt;br /&gt;
| 오픈 버스&lt;br /&gt;
|-&lt;br /&gt;
| $4001&lt;br /&gt;
| SQ1_SWEEP&lt;br /&gt;
| 스위프 제어 레지스터&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4002&lt;br /&gt;
| SQ1_LO&lt;br /&gt;
| 주기의 하위 바이트&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4003&lt;br /&gt;
| SQ1_HI&lt;br /&gt;
| 주기의 상위 바이트 및 길이 카운터 값&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4004&lt;br /&gt;
| SQ2_VOL (Pulse 2)&lt;br /&gt;
| 듀티 사이클 및 볼륨&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4005&lt;br /&gt;
| SQ2_SWEEP&lt;br /&gt;
| 스위프 제어 레지스터&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4006&lt;br /&gt;
| SQ2_LO&lt;br /&gt;
| 주기의 하위 바이트&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4007&lt;br /&gt;
| SQ2_HI&lt;br /&gt;
| 주기의 상위 바이트 및 길이 카운터 값&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4008&lt;br /&gt;
| TRI_LINEAR (Triangle)&lt;br /&gt;
| 선형 카운터&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4009&lt;br /&gt;
|&lt;br /&gt;
| 사용 안 함&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $400A&lt;br /&gt;
| TRI_LO&lt;br /&gt;
| 주기의 하위 바이트&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $400B&lt;br /&gt;
| TRI_HI&lt;br /&gt;
| 주기의 상위 바이트 및 길이 카운터 값&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $400C&lt;br /&gt;
| NOISE_VOL (Noise)&lt;br /&gt;
| 볼륨&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $400D&lt;br /&gt;
|&lt;br /&gt;
| 사용 안 함&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $400E&lt;br /&gt;
| NOISE_LO&lt;br /&gt;
| 주기 및 파형 모양&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $400F&lt;br /&gt;
| NOISE_HI&lt;br /&gt;
| 길이 카운터 값&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4010&lt;br /&gt;
| DMC_FREQ (DMC)&lt;br /&gt;
| IRQ 플래그, 루프 플래그 및 주파수&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4011&lt;br /&gt;
| DMC_RAW&lt;br /&gt;
| 7비트 DAC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4012&lt;br /&gt;
| DMC_START&lt;br /&gt;
| 시작 주소 = $C000 + $40 * $xx&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4013&lt;br /&gt;
| DMC_LEN&lt;br /&gt;
| 샘플 길이 = $10 * $xx + 1 바이트 (128 * $xx + 8 샘플)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4014&lt;br /&gt;
| OAMDMA&lt;br /&gt;
| OAM DMA: $xx00-$xxFF에서 OAMDATA($2004)를 통해 OAM으로 256바이트 복사&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $4015&lt;br /&gt;
| SND_CHN&lt;br /&gt;
| 사운드 채널 활성화&lt;br /&gt;
| 사운드 채널 및 IRQ 상태&lt;br /&gt;
|-&lt;br /&gt;
| $4016&lt;br /&gt;
| JOY1&lt;br /&gt;
| 조이스틱 스트로브&lt;br /&gt;
| 조이스틱 1 데이터&lt;br /&gt;
|-&lt;br /&gt;
| $4017&lt;br /&gt;
| JOY2&lt;br /&gt;
| 프레임 카운터 제어&lt;br /&gt;
| 조이스틱 2 데이터&lt;br /&gt;
|-&lt;br /&gt;
| $4018-$401A&lt;br /&gt;
|&lt;br /&gt;
| 일반적으로 비활성화된 APU 테스트 기능. (CPU 테스트 모드 참조)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| $401C-$401F&lt;br /&gt;
|&lt;br /&gt;
| 항상 비활성화된 미완성 IRQ 타이머 기능. (RP2A03 프로그래머블 인터벌 타이머 참조)&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 명령어 ===&lt;br /&gt;
[[6502/명령어]] 문서 참고.&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=PPU_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0&amp;diff=162</id>
		<title>PPU 레지스터</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=PPU_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0&amp;diff=162"/>
		<updated>2025-10-01T04:32:03Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NES }}&lt;br /&gt;
{{ NesDev발췌 | 원글링크 = https://www.nesdev.org/wiki/PPU_registers }}&lt;br /&gt;
[[PPU]]는 CPU에 8개의 메모리 매핑된 레지스터를 노출한다. 이것들은 명목상 CPU의 주소 공간에서 $2000부터 $2007까지 위치하지만, 주소가 불완전하게 디코딩되기 때문에 $2008부터 $3FFF까지 8바이트마다 [[Mirroring#Memory Mirroring|미러링]]된다. 예를 들어, $3456에 쓰는 것은 $2006에 쓰는 것과 같다.&lt;br /&gt;
&lt;br /&gt;
PPU는 전원 인가 또는 리셋 직후 렌더링을 시작하지만, 다음 프레임의 프리 렌더 스캔라인에 도달할 때까지 대부분의 레지스터($2000, $2001, $2005, $2006)에 대한 쓰기를 무시한다. 더 구체적으로, CPU와 PPU가 동시에 리셋된다고 가정할 때 약 29658 NTSC CPU 사이클 또는 33132 PAL CPU 사이클 동안이다. 자세한 내용은 [[PPU power up state]] 및 [[Init code]]를 참조하라.&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== 요약 ==&lt;br /&gt;
{| class=&amp;quot;tabular&amp;quot;&lt;br /&gt;
! 일반 이름&lt;br /&gt;
! 주소&lt;br /&gt;
! 비트&lt;br /&gt;
! 타입&lt;br /&gt;
! 노트&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUCTRL|PPUCTRL]]&lt;br /&gt;
! $2000&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;VPHB SINN&amp;lt;/tt&amp;gt; || W || [[NMI]] 활성화 (V), PPU 마스터/슬레이브 (P), 스프라이트 높이 (H), 배경 타일 선택 (B), 스프라이트 타일 선택 (S), 증가 모드 (I), 네임테이블 선택 / X 및 Y 스크롤 비트 8 (NN)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUMASK|PPUMASK]]&lt;br /&gt;
! $2001&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;BGRs bMmG&amp;lt;/tt&amp;gt; || W || 색상 강조 (BGR), 스프라이트 활성화 (s), 배경 활성화 (b), 스프라이트 왼쪽 열 활성화 (M), 배경 왼쪽 열 활성화 (m), 그레이스케일 (G)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUSTATUS|PPUSTATUS]]&lt;br /&gt;
! $2002&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;VSO- ----&amp;lt;/tt&amp;gt; || R || vblank (V), 스프라이트 0 히트 (S), 스프라이트 오버플로 (O); 읽기는 $2005/$2006의 쓰기 쌍을 리셋한다&lt;br /&gt;
|-&lt;br /&gt;
! [[#OAMADDR|OAMADDR]]&lt;br /&gt;
! $2003&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;AAAA AAAA&amp;lt;/tt&amp;gt; || W || [[PPU OAM|OAM]] 읽기/쓰기 주소&lt;br /&gt;
|-&lt;br /&gt;
! [[#OAMDATA|OAMDATA]]&lt;br /&gt;
! $2004&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;DDDD DDDD&amp;lt;/tt&amp;gt; || RW || OAM 데이터 읽기/쓰기&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUSCROLL|PPUSCROLL]]&lt;br /&gt;
! $2005&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;XXXX XXXX YYYY YYYY&amp;lt;/tt&amp;gt; || Wx2 || X 및 Y 스크롤 비트 7-0 (두 번 쓰기: X 스크롤, 그 다음 Y 스크롤)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUADDR|PPUADDR]]&lt;br /&gt;
! $2006&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;..AA AAAA AAAA AAAA&amp;lt;/tt&amp;gt; || Wx2 || VRAM 주소 (두 번 쓰기: 최상위 바이트, 그 다음 최하위 바이트)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUDATA|PPUDATA]]&lt;br /&gt;
! $2007&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;DDDD DDDD&amp;lt;/tt&amp;gt; || RW || VRAM 데이터 읽기/쓰기&lt;br /&gt;
|-&lt;br /&gt;
! [[#OAMDMA|OAMDMA]]&lt;br /&gt;
! $4014&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;AAAA AAAA&amp;lt;/tt&amp;gt; || W || OAM DMA 상위 주소&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
레지스터 타입:&lt;br /&gt;
* &#039;&#039;&#039;R&#039;&#039;&#039; - 읽기 가능&lt;br /&gt;
* &#039;&#039;&#039;W&#039;&#039;&#039; - 쓰기 가능&lt;br /&gt;
* &#039;&#039;&#039;x2&#039;&#039;&#039; - 두 번의 1바이트 접근으로 접근하는 내부 2바이트 상태&lt;br /&gt;
&lt;br /&gt;
{{Anchor|Ports}}&lt;br /&gt;
== MMIO 레지스터 ==&lt;br /&gt;
&lt;br /&gt;
PPU는 CPU와의 통신에 사용하는 내부 데이터 버스를 가지고 있다.&lt;br /&gt;
이 버스는 [[Visual 2C02]]에서 `_io_db`로, FCEUX에서는 `PPUGenLatch`로 불리며&amp;lt;ref&amp;gt;[http://sourceforge.net/p/fceultra/code/HEAD/tree/fceu/trunk/src/ppu.cpp#l183 ppu.cpp] by Bero and Xodnizel&amp;lt;/ref&amp;gt;, PPU의 여러 부분으로 이어지는 매우 긴 트레이스의 커패시턴스로 인해 8비트 동적 래치처럼 동작한다.&lt;br /&gt;
명목상 읽기 전용인 PPUSTATUS를 포함한 모든 PPU 포트에 값을 쓰면 이 래치가 채워진다.&lt;br /&gt;
읽기 가능한 포트(PPUSTATUS, OAMDATA, 또는 PPUDATA)를 읽는 것도 읽은 비트로 래치를 채운다.&lt;br /&gt;
명목상 &amp;quot;쓰기 전용&amp;quot; 레지스터를 읽으면 래치의 현재 값이 반환되며, PPUSTATUS의 사용되지 않는 비트도 마찬가지다.&lt;br /&gt;
이 값의 적어도 하나의 비트는 3ms에서 30ms 후에 붕괴되며, PPU가 따뜻할 때 더 빠르다. &amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=24639 lidnariq의 PPU 붕괴 테스트 ROM에 대한 답글]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUCTRL}}{{Anchor|Reg2000}}{{Anchor|Controller_($2000)_&amp;gt;_write}}&lt;br /&gt;
=== PPUCTRL - 기타 설정 ($2000 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 VPHB SINN&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 |||| ||++- 기본 네임테이블 주소&lt;br /&gt;
 |||| ||    (0 = $2000; 1 = $2400; 2 = $2800; 3 = $2C00)&lt;br /&gt;
 |||| |+--- PPUDATA의 CPU 읽기/쓰기 당 VRAM 주소 증가&lt;br /&gt;
 |||| |     (0: 1씩 증가, 가로로 진행; 1: 32씩 증가, 세로로 진행)&lt;br /&gt;
 |||| +---- 8x8 스프라이트의 스프라이트 패턴 테이블 주소&lt;br /&gt;
 ||||       (0: $0000; 1: $1000; 8x16 모드에서는 무시됨)&lt;br /&gt;
 |||+------ 배경 패턴 테이블 주소 (0: $0000; 1: $1000)&lt;br /&gt;
 ||+------- [[Sprite size]] (0: 8x8 픽셀; 1: 8x16 픽셀 – [[PPU OAM#Byte 1]] 참조)&lt;br /&gt;
 |+-------- PPU 마스터/슬레이브 선택&lt;br /&gt;
 |          (0: EXT 핀에서 배경 읽기; 1: EXT 핀에 색상 출력)&lt;br /&gt;
 +--------- [[wikipedia:Vertical blanking interval|Vblank]] [[NMI]] 활성화 (0: 꺼짐, 1: 켜짐)&lt;br /&gt;
&lt;br /&gt;
PPUCTRL (&amp;quot;컨트롤&amp;quot; 또는 &amp;quot;컨트롤러&amp;quot; 레지스터)은 렌더링, 스크롤 위치, vblank NMI, 그리고 듀얼 PPU 구성과 관련된 설정의 조합을 포함한다. [[PPU power up state|전원/리셋 후]], 이 레지스터에 대한 쓰기는 첫 번째 프리 렌더 스캔라인까지 무시된다.&lt;br /&gt;
&lt;br /&gt;
==== Vblank NMI ====&lt;br /&gt;
&lt;br /&gt;
PPUCTRL에서 NMI를 활성화하면 vblank 시작 시(스캔라인 241, 도트 1) NMI 핸들러가 호출된다. 이것은 소프트웨어가 디스플레이의 프레임 속도로 실행될 수 있도록 신뢰할 수 있는 시간 소스를 제공하고, 소프트웨어에 vblank를 알린다. Vblank는 렌더링이 활성화된 상태에서 소프트웨어가 VRAM 및 OAM에 데이터를 보낼 수 있는 유일한 시간이며, 이 NMI는 vblank를 감지하는 &#039;&#039;유일한&#039;&#039; 신뢰할 수 있는 방법이다. [[#PPUSTATUS|PPUSTATUS]]에서 vblank 플래그를 폴링하는 것은 vblank를 완전히 놓칠 수 있다.&lt;br /&gt;
&lt;br /&gt;
[[#PPUSTATUS|PPUSTATUS]]의 vblank 플래그가 1인 동안 NMI 활성화를 0에서 1로 변경하면 즉시 NMI가 트리거된다. 이것은 PPUSTATUS 레지스터가 아직 읽히지 않은 경우 vblank 중에 발생한다. NMI 루틴이 vblank에서 너무 늦게 실행되어 제시간에 끝나지 못하게 하여 그래픽 결함을 일으키거나, 게임이 실제로 발생한 것보다 더 많은 프레임을 처리하게 할 수 있다. 이 문제를 피하려면, PPUCTRL에서 NMI를 활성화하기 전에 먼저 PPUSTATUS를 읽어 vblank 플래그를 지우는 것이 신중하다.&lt;br /&gt;
&lt;br /&gt;
==== 스크롤링 ====&lt;br /&gt;
PPUCTRL 비트 0과 1의 현재 네임테이블 비트는 스크롤 좌표의 최상위 비트로 간주될 수 있으며, 이는 9비트 너비이다([[PPU_nametables|네임테이블]] 및 [[#PPUSCROLL|PPUSCROLL]] 참조):&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 .... ..YX&lt;br /&gt;
        ||&lt;br /&gt;
        |+- X 스크롤 위치 비트 8 (즉, X에 256을 더함)&lt;br /&gt;
        +-- Y 스크롤 위치 비트 8 (즉, Y에 240을 더함)&lt;br /&gt;
&lt;br /&gt;
이 두 비트는 [[PPUSCROLL]]에 기록된 값과 동일한 [[#Internal registers|내부 t 레지스터]]로 이동하며, 스크롤 위치를 완전히 지정하려면 [[#PPUSCROLL|PPUSCROLL]]과 함께 기록되어야 한다.&lt;br /&gt;
&lt;br /&gt;
==== 마스터/슬레이브 모드와 EXT 핀 ====&lt;br /&gt;
PPUCTRL의 비트 6은 PPU를 손상시킬 수 있으므로 순정 콘솔에서는 절대 설정해서는 안 된다.&lt;br /&gt;
&lt;br /&gt;
이 비트가 클리어되면(일반적인 경우), PPU는 EXT 핀에서 배경색에 대한 [[PPU_palettes|팔레트 인덱스]]를 가져온다. 순정 NES는 이 핀들을 접지하여 예상대로 팔레트 인덱스 0을 배경색으로 만든다. EXT 핀에 연결된 보조 그림 생성기는 배경 팔레트의 색상을 사용하여 배경을 다른 이미지로 교체할 수 있으며, 이는 시차 스크롤링과 같은 기능에 사용될 수 있다.&lt;br /&gt;
&lt;br /&gt;
비트 6을 설정하면 PPU는 각 픽셀에 대해 EXT 핀에 팔레트 메모리 인덱스의 하위 4비트를 출력한다. 4비트만 출력되므로 일반적으로 배경과 스프라이트 픽셀을 이 방법으로 구별할 수 없다. 이 비트를 설정해도 PPU의 컴포지트 비디오 출력의 이미지는 영향을 받지 않는다. 수정되지 않은 NES에서는 EXT 핀이 접지되어 있으므로, 비트 6을 설정하는 것은 0이 아닌 픽셀 값을 출력할 때마다 칩을 손상시킬 수 있으므로 권장되지 않는다(실질적으로 Vcc와 GND를 함께 단락시키기 때문). 투명 픽셀에 대한 EXT 출력은 일반적인 배경색이 아니라 해당 배경 슬라이버 팔레트의 항목 0이라는 점에 유의하라. 렌더링이 비활성화되면 [[PPU palettes|배경 재정의]]에 관계없이 EXT 출력은 항상 인덱스 0이다.&lt;br /&gt;
&lt;br /&gt;
==== 비트 0 경쟁 조건 ====&lt;br /&gt;
수평 네임테이블 배열(일명 수직 미러링) 또는 4화면 VRAM을 사용하는 경우 vblank 외부에서 이 레지스터에 쓸 때 주의하라.&lt;br /&gt;
특정 CPU-PPU 정렬의 경우, [[PPU scrolling#At dot 257 of each scanline|도트 257]]에서 시작하는 쓰기는 다음 스캔라인만 왼쪽 네임테이블에서 잘못 그려지게 한다.&lt;br /&gt;
이것은 눈에 보이는 결함을 유발할 수 있으며, 해당 스캔라인에 대한 스프라이트 0 히트를 방해할 수도 있다(잘못된 배경으로 그려지기 때문).&lt;br /&gt;
이 결함은 수평 또는 단일 화면 미러링에서는 왼쪽과 오른쪽 네임테이블이 동일하기 때문에 효과가 없다.&lt;br /&gt;
도트 257에서 시작하여 도트 258까지 계속되는 쓰기만 이 결함을 유발할 수 있다. 다른 모든 수평 타이밍은 안전하다.&lt;br /&gt;
이 결함은 구체적으로 열린 버스의 값을 레지스터에 쓰는데, 이는 거의 항상 주소의 상위 바이트가 될 것이다. 원하는 네임테이블에 따라 이 레지스터 또는 $2100에 있는 이 레지스터의 미러에 쓰는 것이 [//forums.nesdev.org/viewtopic.php?p=230434#p230434 기능적인 해결 방법]으로 보인다.&lt;br /&gt;
&lt;br /&gt;
이것은 &#039;&#039;슈퍼 마리오 브라더스&#039;&#039;에서 프로그램이 게임 로직 끝에 PPUCTRL에 쓸 때 가끔 [[Game bugs|보이는 결함]]을 생성한다.&lt;br /&gt;
게임 로직 중에 NMI를 껐다가 게임 로직이 끝나면 NMI를 다시 켜서 게임 로직이 끝나기 전에 NMI 핸들러가 다시 호출되는 것을 방지하는 것으로 보인다.&lt;br /&gt;
또 다른 해결 방법은 PPU의 NMI 활성화를 사용하는 대신 소프트웨어 플래그를 사용하여 NMI 재진입을 방지하는 것이다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUMASK}}{{Anchor|Reg2001}}{{Anchor|Mask_($2001)_&amp;gt;_write}}&lt;br /&gt;
=== PPUMASK - 렌더링 설정 ($2001 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 BGRs bMmG&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 |||| |||+- 그레이스케일 (0: 일반 색상, 1: 그레이스케일)&lt;br /&gt;
 |||| ||+-- 1: 화면 왼쪽 8픽셀에 배경 표시, 0: 숨기기&lt;br /&gt;
 |||| |+--- 1: 화면 왼쪽 8픽셀에 스프라이트 표시, 0: 숨기기&lt;br /&gt;
 |||| +---- 1: 배경 렌더링 활성화&lt;br /&gt;
 |||+------ 1: 스프라이트 렌더링 활성화&lt;br /&gt;
 ||+------- 빨간색 강조 (PAL/Dendy에서는 녹색)&lt;br /&gt;
 |+-------- 녹색 강조 (PAL/Dendy에서는 빨간색)&lt;br /&gt;
 +--------- 파란색 강조&lt;br /&gt;
&lt;br /&gt;
PPUMASK (&amp;quot;마스크&amp;quot; 레지스터)는 스프라이트와 배경의 렌더링 및 색상 효과를 제어한다. [[PPU power up state|전원/리셋 후]], 이 레지스터에 대한 쓰기는 첫 번째 프리 렌더 스캔라인까지 무시된다.&lt;br /&gt;
&lt;br /&gt;
가장 일반적으로, PPUMASK는 게임 플레이 외부에서 VRAM으로 대량의 데이터를 전송할 수 있도록 $00으로 설정되고, 게임 플레이 중에는 색상 효과 없이 모든 렌더링을 활성화하기 위해 $1E로 설정된다.&lt;br /&gt;
&lt;br /&gt;
==== 렌더링 제어 ====&lt;br /&gt;
&lt;br /&gt;
렌더링은 PPU가 메모리를 적극적으로 가져와 화면에 이미지를 그리는 과정이다. PPUMASK에서 스프라이트 및 배경 렌더링 중 하나 또는 둘 다 활성화되어 있는 한 렌더링 전체가 활성화된다. 한 구성 요소가 활성화되고 다른 구성 요소가 활성화되지 않은 경우, 비활성화된 구성 요소는 단순히 투명하게 처리된다. 렌더링 프로세스는 그 외에는 영향을 받지 않는다. 비트 3과 4를 통해 두 구성 요소가 모두 비활성화되면 렌더링 프로세스가 중지되고 PPU는 배경색을 표시한다.&lt;br /&gt;
&lt;br /&gt;
렌더링 중에는 PPU가 VRAM과 OAM을 적극적으로 사용한다. 이로 인해 CPU는 [[#PPUDATA|PPUDATA]]를 통해 VRAM에 접근하거나 [[#OAMDATA|OAMDATA]]를 통해 OAM에 접근할 수 없으므로, 이러한 접근은 렌더링 외부에서 수행되어야 한다. 즉, vblank 중(게임 플레이 중 데이터 전송) 또는 렌더링이 꺼진 상태(레벨 로드와 같은 대규모 데이터 전송)에서 수행해야 한다. 수많은 하드웨어 버그와 제한을 피하기 위해, 일반적으로 렌더링은 vblank 중에만 켜거나 끄는 것이 좋다. 이는 원하는 PPUMASK 값을 레지스터 자체가 아닌 변수에 쓰고 NMI 핸들러의 vblank 중에만 해당 변수를 PPUMASK에 복사하여 수행할 수 있다.&lt;br /&gt;
&lt;br /&gt;
PPU는 화면의 가장 왼쪽 8픽셀에서만 스프라이트와 배경을 선택적으로 숨길 수 있으며, 이를 투명하게 만들어 배경색을 그린다. 스프라이트의 경우, 이는 스프라이트가 오른쪽 가장자리에서처럼 화면 왼쪽 가장자리에서 부분적으로 걸칠 수 없는 제한인 스프라이트 팝인을 피하는 데 유용할 수 있다. 배경의 경우, 이는 수직 또는 단일 화면 네임테이블 배열로 수평으로 스크롤할 때 타일 아티팩트를 제거하고 속성 아티팩트를 줄일 수 있다. 이러한 배열은 스크롤 이음새를 화면 밖으로 숨길 수 없기 때문이다. 배경색은 배경 아트에 사용된 색상과 일치하지 않을 수 있으므로 왼쪽 열을 비활성화하는 것이 사소한 아티팩트보다 더 산만할 수 있다.&lt;br /&gt;
&lt;br /&gt;
참고:&lt;br /&gt;
* 렌더링 중에 PPUDATA에 쓰면 VRAM이 손상될 수 있으므로, 쓰기는 vblank 중이거나 PPUMASK 비트 3과 4에서 렌더링이 비활성화된 상태에서 수행해야 한다.&lt;br /&gt;
* 배경이나 스프라이트가 비활성화된 영역에서는 스프라이트 0 히트가 트리거되지 않는다.&lt;br /&gt;
* 렌더링 토글은 쓰기 후 약 3-4 도트 후에 적용된다. 이 지연은 Battletoads가 충돌을 피하기 위해 필요하다.&lt;br /&gt;
* 화면 중간에 렌더링을 토글하면 종종 OAM의 1개 행이 손상되고 현재 및 다음 스캔라인에 대해 잘못된 스프라이트가 그려진다. (참조: [[Errata#OAM and Sprites|정오표]])&lt;br /&gt;
* 화면 중간에 렌더링을 끄면 [[#Internal registers|내부 v 레지스터]]의 하위 14비트 값이 $3C00-$3FFF 사이인 경우 팔레트 RAM이 손상될 수 있다.&lt;br /&gt;
* 렌더링을 늦게 켜면 프리 렌더 끝의 도트가 절대 건너뛰지 않게 되어 정지된 화면에서 도트 크롤이 발생할 수 있다.&lt;br /&gt;
* 렌더링을 늦게 켜면 [[PPU_scrolling#Split_X/Y_scroll|복잡한 쓰기 시리즈로 수동으로 설정]]하지 않는 한 PPU의 스크롤 값이 잘못된다.&lt;br /&gt;
&lt;br /&gt;
==== 색상 제어 ====&lt;br /&gt;
&lt;br /&gt;
그레이스케일 모드는 모든 색상을 회색 또는 흰색 음영으로 강제한다. 이것은 색상을 $30과 비트 AND 연산하여 수행되며, 모든 색상이 회색 열($00, $10, $20, $30)에서 나오게 한다. 이 열에는 검은색이 없다는 점에 유의하라. 이 AND 동작은 색상이 뒤섞인 RGB PPU(2C04 시리즈)가 실제로 회색 음영을 얻는 것이 아니라 $x0 열에 있는 색상을 얻는다는 것을 의미한다. 팔레트 RAM에서 읽을 때 반환된 값은 이 AND 동작을 반영하지만 기본 데이터는 보존된다. 팔레트 쓰기는 그레이스케일 모드에 관계없이 정상적으로 작동한다.&lt;br /&gt;
&lt;br /&gt;
[[Color emphasis]]는 다른 두 색상 구성 요소를 어둡게 하여 선택한 구성 요소를 비교적 밝게 만들어 강조하는 색조 효과를 유발한다. 3가지 구성 요소를 모두 강조하면 모든 색상이 단순히 어두워진다. 이것은 그레이스케일과 독립적으로 작동하여 회색을 착색할 수 있다. PAL 및 Dendy PPU는 강조 비트 순서가 다르므로 포트 및 이중 지역 게임은 비트를 재정렬해야 한다. 또한 RGB PPU의 강조는 완전히 다르며, 대신 강조된 구성 요소의 밝기를 최대화하고 모든 구성 요소가 강조될 때 완전히 흰색 화면을 생성한다. RGB 강조는 훨씬 덜 유용하며 일반적으로 피하는 것이 가장 좋다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUSTATUS}}{{Anchor|Reg2002}}{{Anchor|Status_($2002)_&amp;lt;_read}}&lt;br /&gt;
=== PPUSTATUS - 렌더링 이벤트 ($2002 읽기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 VSOx xxxx&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 |||+-++++- ([[Open_bus_behavior#PPU_open_bus|PPU 열린 버스]] 또는 2C05 PPU 식별자)&lt;br /&gt;
 ||+------- [[PPU_sprite_evaluation#Sprite_overflow_bug|스프라이트 오버플로]] 플래그&lt;br /&gt;
 |+-------- [[PPU_OAM#Sprite_zero_hits|스프라이트 0 히트]] 플래그&lt;br /&gt;
 +--------- Vblank 플래그, 읽을 때 지워짐. &amp;lt;u&amp;gt;&#039;&#039;&#039;신뢰할 수 없음&#039;&#039;&#039;&amp;lt;/u&amp;gt;; 아래 참조.&lt;br /&gt;
&lt;br /&gt;
PPUSTATUS (&amp;quot;상태&amp;quot; 레지스터)는 렌더링 관련 이벤트의 상태를 반영하며 주로 타이밍에 사용된다. 이 레지스터의 세 플래그는 프리렌더 스캔라인의 도트 1에서 자동으로 지워진다. 설정 및 해제 타이밍에 대한 자세한 내용은 [[PPU 렌더링]]을 참조하라.&lt;br /&gt;
&lt;br /&gt;
이 레지스터를 읽으면 PPU의 [[#Internal registers|내부 w 레지스터]]가 지워지는 부작용이 있다. 쓰기가 올바른 순서로 이루어지도록 [[#PPUSCROLL|PPUSCROLL]] 및 [[#PPUADDR|PPUADDR]]에 쓰기 전에 일반적으로 읽는다.&lt;br /&gt;
&lt;br /&gt;
==== Vblank 플래그 ====&lt;br /&gt;
&lt;br /&gt;
vblank 플래그는 vblank 시작 시(스캔라인 241, 도트 1) 설정된다. PPUSTATUS를 읽으면 이 플래그의 현재 상태가 반환된 다음 지워진다. 읽어서 vblank 플래그가 지워지지 않으면 프리렌더 스캔라인의 도트 1에서 자동으로 지워진다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;vblank 플래그를 읽는 것은 vblank를 감지하는 신뢰할 수 있는 방법이 아니다. 대신 [[NMI thread|NMI]]를 사용해야 한다.&#039;&#039;&#039;&amp;lt;/u&amp;gt; 플래그가 설정되기 전 도트(스캔라인 241, 도트 0)에서 플래그를 읽으면 0으로 읽히고 지워지므로, vblank 플래그에 대해 PPUSTATUS를 폴링하면 vblank를 놓치고 게임이 버벅거릴 수 있다. 이 경우 NMI도 억제되며, 다음 도트 또는 두 도트에 걸친 읽기에 의해서도 억제될 수 있다. NTSC 및 PAL에서는 플래그가 두 프레임 연속으로 떨어지지 않는 것이 보장되지만, Dendy에서는 [[PPU_power_up_state#Dendy|매 프레임마다 발생]]하여 게임이 충돌할 수 있다. NMI를 사용하면 소프트웨어가 매 프레임마다 vblank를 올바르게 감지할 수 있다. 또한 PlayChoice-10에서도 필요하며, NMI가 너무 오랫동안 비활성화되면 게임을 거부한다. 콘솔을 부팅하는 동안에는 vblank 플래그를 폴링해야 하지만, 이 시점의 타이밍은 중요하지 않다(안전한 부팅에 대한 자세한 내용은 [[Init code]] 참조).&lt;br /&gt;
&lt;br /&gt;
vblank 플래그는 NMI 생성에 사용되며, 이 플래그가 1인 동안 NMI를 활성화하면 즉시 NMI가 발생한다([[PPU_registers#Vblank_NMI|PPUCTRL]] 참조).&lt;br /&gt;
&lt;br /&gt;
==== 스프라이트 0 히트 플래그 ====&lt;br /&gt;
&lt;br /&gt;
[[PPU_OAM#Sprite_zero_hits|스프라이트 0 히트]]는 OAM의 첫 번째 스프라이트(스프라이트 0)와 배경 간의 픽셀 단위 충돌을 감지하는 하드웨어 충돌 감지 기능이다. 스프라이트 0 히트 플래그는 스프라이트 0의 불투명한 픽셀이 배경의 불투명한 픽셀과 겹칠 때 즉시 설정되며, 스프라이트 우선 순위와는 무관하다. &#039;불투명&#039;은 픽셀이 &#039;투명&#039;하지 않다는 것을 의미한다. 즉, [[PPU_pattern_tables|두 패턴 비트]]가 %00이 아니다. 플래그는 프리렌더 스캔라인의 도트 1까지 설정된 상태를 유지하므로 프레임당 하나의 충돌만 감지할 수 있다.&lt;br /&gt;
&lt;br /&gt;
이 플래그는 충돌을 감지하지만 주로 타이밍에 사용된다. 많은 게임에서 스프라이트 0을 화면의 고정된 위치에 배치하고 이 플래그가 설정될 때까지 폴링한다. 이를 통해 CPU는 화면에서 대략적인 위치를 파악하여 하드웨어 레지스터에 대한 화면 중간 쓰기 시간을 맞출 수 있다. 일반적으로 이것은 &#039;&#039;슈퍼 마리오 브라더스&#039;&#039;와 같이 배경 기반 HUD를 허용하기 위해 화면 중간에 스크롤 위치를 변경하는 데 사용된다. 그러나 일부 최신 홈브루 게임은 [https://forums.nesdev.org/viewtopic.php?t=15850 &#039;&#039;Lunar Limit&#039;&#039;] 및 [https://fiskbit.itch.io/irritating-ship &#039;&#039;Irritating Ship&#039;&#039;]과 같이 실제 충돌에 이를 사용한다.&lt;br /&gt;
&lt;br /&gt;
스프라이트 0 히트는 X=255에서 또는 [[#PPUMASK|PPUMASK]]를 통해 스프라이트나 배경이 비활성화된 곳에서는 충돌을 감지할 수 없다. 여기에는 가장 왼쪽 8픽셀이 숨겨져 있을 때 X=0..7이 포함된다. 그러나 PAL의 왼쪽 및 오른쪽 가장자리 자르기에는 영향을 받지 않는다.&lt;br /&gt;
&lt;br /&gt;
타이밍에 이 플래그를 사용할 때 몇 가지 중요한 고려 사항이 있다.&lt;br /&gt;
* 스프라이트 0 히트는 프리렌더 스캔라인까지 지워지지 않으므로 소프트웨어는 이전 프레임의 히트를 현재 프레임의 히트로 착각할 수 있다. 따라서 플래그가 다시 설정되기를 기다리기 전에 플래그가 지워질 때까지 폴링해야 할 수 있다.&lt;br /&gt;
* 게임이 스프라이트 0 히트가 발생할 것으로 예상하고 발생하지 않으면 종종 충돌이 발생한다. 히트가 발생하지 않을 위험이 있는 경우(아마도 스크롤할 때 겹침이 발생하지 않거나 전원 주기, 콘솔 또는 에뮬레이터에 따라 달라질 수 있는 정확한 화면 중간 타이밍에 의존하기 때문에) 폴링 루프를 빠져나갈 다른 방법이 있는 것이 중요하다. 예를 들어, vblank 플래그를 폴링하거나 NMI 핸들러가 게임이 여전히 스프라이트 0 히트를 폴링하고 있는지 확인하여 이를 수행할 수 있다.&lt;br /&gt;
* 게임은 종종 랙 프레임에서 스프라이트 0 히트를 처리하지 않아 화면 중간 이벤트가 발생하지 않는다. 이로 인한 일반적인 결과는 랙 중에 HUD가 깜박이는 것이다. 적어도 랙 프레임에서 NMI 핸들러에서 스프라이트 0 히트를 처리하면 이 문제를 해결할 수 있다.&lt;br /&gt;
&lt;br /&gt;
==== 스프라이트 오버플로 플래그 ====&lt;br /&gt;
&lt;br /&gt;
스프라이트 오버플로 플래그는 스캔라인에 8개 이상의 스프라이트가 있을 때마다 설정되도록 의도되었다. 불행히도 이를 감지하는 논리가 제대로 작동하지 않아 PPU가 9번째 스프라이트를 검색할 때 OAM에서 잘못된 인덱스를 확인하게 된다. 이로 인해 거짓 양성과 거짓 음성이 모두 발생한다. 잘못된 동작에 대한 자세한 내용은 [[PPU sprite evaluation#Sprite_overflow_bug|PPU 스프라이트 평가]]를 참조하라. 실제로 스프라이트 오버플로는 스프라이트 0 히트와 같이 타이밍에 사용되지만, 버그가 있는 동작과 9개의 스프라이트 타일 비용 때문에 일반적으로 두 개 이상의 타이밍 소스가 필요할 때만 사용된다. 스프라이트 0 히트와 마찬가지로 이 플래그는 프리렌더 스캔라인 시작 시 지워지며 프레임당 한 번만 설정할 수 있다.&lt;br /&gt;
&lt;br /&gt;
스프라이트 오버플로를 사용하는 것은 종종 최후의 수단이다. 매퍼 IRQ를 사용할 수 없는 경우 [[APU_DMC#Usage_of_DMC_for_syncing_to_video|DMC IRQ]]는 타이밍에 효과적인 대안이 될 수 있지만 사용하기 복잡하다.&lt;br /&gt;
&lt;br /&gt;
==== 2C05 식별자 ====&lt;br /&gt;
&lt;br /&gt;
2C05 시리즈 아케이드 PPU는 PPU 열린 버스 대신 비트 4-0에 식별자를 반환한다. 이 값은 일종의 복사 방지 형태로 게임에서 확인한다. 이는 소비자용 2C05-99에는 적용되지 않으며, 평소와 같이 열린 버스를 반환한다. PPU에서 직접 데이터를 수집하지는 않았지만 2C05 게임은 다음 값을 예상한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;tabular&amp;quot;&lt;br /&gt;
! PPU&lt;br /&gt;
! 마스크&lt;br /&gt;
! 값&lt;br /&gt;
|-&lt;br /&gt;
| 2C05-02&lt;br /&gt;
| $3F&lt;br /&gt;
| $3D&lt;br /&gt;
|-&lt;br /&gt;
| 2C05-03&lt;br /&gt;
| $1F&lt;br /&gt;
| $1C&lt;br /&gt;
|-&lt;br /&gt;
| 2C05-04&lt;br /&gt;
| $1F&lt;br /&gt;
| $1B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Anchor|OAMADDR}}{{Anchor|Reg2003}}{{Anchor|OAM_address_($2003)_&amp;gt;_write}}&lt;br /&gt;
=== OAMADDR - 스프라이트 RAM 주소 ($2003 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 AAAA AAAA&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- OAM 주소&lt;br /&gt;
&lt;br /&gt;
여기에 접근하려는 [[PPU OAM|OAM]]의 주소를 쓴다. 대부분의 게임은 여기에 $00을 쓰고 [[#OAMDMA|OAMDMA]]를 사용한다. (DMA는 2A03/7 칩에 구현되어 있으며 [[#OAMDATA|OAMDATA]]에 반복적으로 쓰는 방식으로 작동한다)&lt;br /&gt;
&lt;br /&gt;
==== 렌더링 중 값 ====&lt;br /&gt;
&lt;br /&gt;
OAMADDR은 프리렌더 및 가시 스캔라인의 257-320 틱(스프라이트 타일 로딩 간격) 각각 동안 0으로 설정된다. 이는 또한 정상적으로 완료된 렌더링 프레임의 끝에서 OAMADDR이 항상 0으로 돌아온다는 것을 의미한다.&lt;br /&gt;
&lt;br /&gt;
렌더링이 스캔라인 중간에 활성화되면&amp;lt;ref name=&amp;quot;OAMADDR Clarification&amp;quot;/&amp;gt;, 가시 스캔라인의 틱 65에서 OAM 스프라이트 평가가 시작되기 전에 OAMADDR이 0으로 설정되지 않은 경우 추가적인 결과가 발생한다. 이 틱에서의 OAMADDR 값은 이 스캔라인에 대한 스프라이트 평가의 시작 주소를 결정하며, 이로 인해 OAMADDR의 스프라이트가 [[sprite-0 hit]] 및 우선 순위 모두에 대해 스프라이트 0인 것처럼 처리될 수 있다. OAMADDR이 정렬되지 않고 OAM 항목의 Y 위치(첫 번째 바이트)를 가리키지 않으면, 가리키는 모든 것(타일 인덱스, 속성 또는 X 좌표)이 Y 위치로 재해석되고 다음 바이트도 유사하게 재해석된다. OAM의 끝에 도달하면 더 이상 스프라이트가 발견되지 않으며, 시작 OAMADDR 이전의 모든 스프라이트를 효과적으로 숨긴다.&lt;br /&gt;
&lt;br /&gt;
==== OAMADDR 주의사항 ====&lt;br /&gt;
&lt;br /&gt;
2C02G에서는 OAMADDR에 쓰면 OAM이 손상된다. 정확한 손상은 완전히 설명되지 않았지만, 이는 일반적으로 대상 주소의 8바이트 행 위에 스프라이트 8과 9(주소 $20)를 복사하는 것으로 보인다. 이 복사의 소스 주소는 CPU 버스의 이전 값(가장 자주 $2003 피연산자에서 $20)에서 오는 것으로 보인다.&amp;lt;ref name=&amp;quot;OAMADDR Clarification&amp;quot;&amp;gt;[//forums.nesdev.org/viewtopic.php?p=285674#p285674 OAMDATA $2003 손상 명확화?] - 포럼 스레드&amp;lt;/ref&amp;gt;&amp;lt;ref name = &amp;quot;OAMglitch&amp;quot;&amp;gt;[//forums.nesdev.org/viewtopic.php?t=10189 수동 OAM 쓰기 결함] blargg의 스레드&amp;lt;/ref&amp;gt; 다른 가능한 동작도 있을 수 있다. 그런 다음 OAM의 256바이트를 모두 써서 이 문제를 해결할 수 있지만, [[PPU OAM#Dynamic RAM decay|OAM 붕괴]]가 시작되기 전의 제한된 시간으로 인해 일반적으로 OAMDMA를 통해 수행해야 한다.&lt;br /&gt;
&lt;br /&gt;
또한 렌더링이 시작될 때 OAMADDR이 8보다 작지 않으면 &amp;lt;tt&amp;gt;OAMADDR &amp;amp; 0xF8&amp;lt;/tt&amp;gt;에서 시작하는 8바이트가 OAM의 첫 8바이트에 복사되는 경우도 있다. 이것이 관련이 있을 가능성이 높다. Dendy에서는 후자의 버그가 2C02 호환성을 위해 필요하다.&lt;br /&gt;
&lt;br /&gt;
2C03, 2C04, 2C05&amp;lt;ref name=&amp;quot;noOAMglitch&amp;quot;&amp;gt;[//forums.nesdev.org/viewtopic.php?p=179676#p179676 $2003에 대한 쓰기는 OAM 손상을 일으키지 않는 것으로 보임] lidnariq의 게시물&amp;lt;/ref&amp;gt; 및 2C07에서는 OAMADDR이 의도한 대로 작동하는 것으로 알려져 있다. 이 버그가 2C02의 모든 리비전에 존재하는지는 알려져 있지 않다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|OAMDATA}}{{Anchor|Reg2004}}{{Anchor|OAM_data_($2004)_&amp;lt;&amp;gt;_read/write}}&lt;br /&gt;
=== OAMDATA - 스프라이트 RAM 데이터 ($2004 읽기/쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 DDDD DDDD&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- OAM 데이터&lt;br /&gt;
&lt;br /&gt;
여기에 OAM 데이터를 쓴다. 쓰기는 쓰기 후 [[#OAMADDR|OAMADDR]]을 증가시킨다. 읽기는 그렇지 않다. 수직 또는 강제 블랭킹 중 읽기는 해당 주소의 OAM에서 값을 반환한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;대부분의 경우 이 레지스터에 직접 쓰지 마라.&#039;&#039;&#039; OAM에 대한 변경은 일반적으로 vblank 중에만 이루어져야 하므로, OAMDATA를 통한 쓰기는 부분 업데이트에만 효과적이다. 한 vblank 간격 내에 모든 OAM을 업데이트하기에는 너무 느리고, 위에서 설명한 것처럼 부분 쓰기는 손상을 유발하기 때문이다. 대부분의 게임은 대신 [[#OAMDMA|OAMDMA]]를 통해 DMA 기능을 사용한다.&lt;br /&gt;
&lt;br /&gt;
* PPU가 렌더링하는 동안 OAMDATA를 읽으면 스프라이트 평가 및 로딩 중 내부 OAM 접근이 노출된다. &#039;&#039;Micro Machines&#039;&#039;가 이를 수행한다.&lt;br /&gt;
* 렌더링 중(프리 렌더 라인 및 가시 라인 0-239에서, 스프라이트 또는 배경 렌더링이 활성화된 경우) OAMDATA에 대한 쓰기는 OAM의 값을 수정하지 않지만, [[#OAMADDR|OAMADDR]]의 결함 있는 증가를 수행하여 상위 6비트만 증가시킨다(즉, [[PPU sprite evaluation]]에서 &#039;&#039;[n]&#039;&#039; 값을 증가시킨다. 스프라이트 평가의 현재 상태에 따라 하위 비트를 대신 증가시킬 수도 있다). 이는 $2004에 대한 쓰기를 사용하므로 [[#OAMDMA|OAMDMA]]를 통한 DMA 전송에도 적용된다. 에뮬레이션 목적으로는 렌더링 중 쓰기를 완전히 무시하는 것이 가장 좋다.&lt;br /&gt;
* 이전에는 이 레지스터에서 읽는 것이 신뢰할 수 없다고 생각되었다&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=6424 $2004 읽기 신뢰성?] blargg의 스레드&amp;lt;/ref&amp;gt;. 그러나 최근 증거에 따르면 이는 전적으로 [[#OAMADDR|OAMADDR]] 쓰기에 의한 손상 때문인 것으로 보인다.&lt;br /&gt;
* 초기 Famicom 및 NES에서 발견된 가장 오래된 PPU 구현에서는 이 레지스터를 읽을 수 없다&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?p=62137#p62137 초기 리비전에서는 $2004를 읽을 수 없음] jsr의 답글&amp;lt;/ref&amp;gt;. 읽기 기능은 대부분의 NES 및 이후 Famicom에서 발견된 RP2C02G에 추가되었다.&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?p=150926#p150926 하드웨어 리비전 및 $2004 읽기] Great Hierophant의 답글&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 2C07에서는 스프라이트 평가를 &#039;&#039;절대&#039;&#039; 완전히 비활성화할 수 없으며, vblank 시작 후 24 스캔라인 후에 항상 시작된다&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=11041 2C07 PPU 스프라이트 평가 노트] thefox의 스레드&amp;lt;/ref&amp;gt;(2C02에서 프리렌더 스캔라인이 있었을 때와 동일). 따라서 OAM에 대한 모든 업데이트는 2C07이 수직 블랭킹을 신호한 후 처음 24 스캔라인 내에 수행되어야 한다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUSCROLL}}{{Anchor|Reg2005}}{{Anchor|Scroll_($2005)_&amp;gt;&amp;gt;_write_x2}}&lt;br /&gt;
=== PPUSCROLL - X 및 Y 스크롤 ($2005 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 1번째 쓰기&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 XXXX XXXX&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- X 스크롤 비트 7-0 (PPUCTRL 비트 0의 비트 8)&lt;br /&gt;
 &lt;br /&gt;
 2번째 쓰기&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 YYYY YYYY&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- Y 스크롤 비트 7-0 (PPUCTRL 비트 1의 비트 8)&lt;br /&gt;
&lt;br /&gt;
이 레지스터는 [[PPU scrolling|스크롤 위치]]를 변경하는 데 사용되며, [[#PPUCTRL|PPUCTRL]]을 통해 선택된 네임테이블의 어떤 픽셀이 렌더링된 화면의 왼쪽 상단 모서리에 있어야 하는지 PPU에 알려준다. PPUSCROLL은 두 번의 쓰기를 필요로 한다. 첫 번째는 X 스크롤이고 두 번째는 Y 스크롤이다. 이것이 첫 번째 쓰기인지 두 번째 쓰기인지는 [[#PPUADDR|PPUADDR]]과 공유되는 [[#Internal_registers|w 레지스터]]에 의해 내부적으로 추적된다. 일반적으로 이 레지스터는 다음 프레임이 원하는 위치에서 렌더링을 시작하도록 수직 블랭킹 중에 쓰여지지만, 화면을 분할하기 위해 렌더링 중에 수정될 수도 있다. 렌더링 중에 수직 스크롤을 변경하면 다음 프레임에만 적용된다. PPUCTRL의 네임테이블 비트와 함께 스크롤은 구성 요소당 9비트로 생각할 수 있으며, 스크롤 위치를 완전히 지정하려면 PPUSCROLL과 함께 PPUCTRL을 업데이트해야 한다.&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = warning&lt;br /&gt;
| text = &amp;lt;font size=+1&amp;gt;PPU 스크롤 레지스터는 PPU 주소 레지스터와 [[PPU_scrolling#PPU_internal_registers|내부 상태를 공유]]한다. 이 때문에 PPUSCROLL 및 PPUCTRL의 네임테이블 비트는 PPUADDR에 대한 모든 쓰기 &#039;&#039;후에&#039;&#039; 쓰여져야 한다.&amp;lt;/font&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
[[#Internal_registers|w (쓰기 래치)]]를 지우기 위해 [[#PPUSTATUS|PPUSTATUS]]를 읽은 후, 화면을 켜기 직전에 PPUSCROLL에 수평 및 수직 스크롤 오프셋을 쓴다.&lt;br /&gt;
&lt;br /&gt;
  ; X 및 Y 스크롤의 상위 비트를 설정한다.&lt;br /&gt;
  lda ppuctrl_value&lt;br /&gt;
  ora current_nametable&lt;br /&gt;
  sta PPUCTRL&lt;br /&gt;
 &lt;br /&gt;
  ; X 및 Y 스크롤의 하위 8비트를 설정한다.&lt;br /&gt;
  bit PPUSTATUS&lt;br /&gt;
  lda cam_position_x&lt;br /&gt;
  sta PPUSCROLL&lt;br /&gt;
  lda cam_position_y&lt;br /&gt;
  sta PPUSCROLL&lt;br /&gt;
&lt;br /&gt;
수평 오프셋은 0에서 255까지의 범위를 갖는다. &amp;quot;정상적인&amp;quot; 수직 오프셋은 0에서 239까지의 범위를 가지며, 240에서 255까지의 값은 현재 네임테이블 끝의 속성 데이터가 타일 데이터로 잘못 사용되게 한다. PPU는 일반적으로 239에서 다음 네임테이블의 0으로 자동으로 건너뛰므로 이러한 &amp;quot;잘못된&amp;quot; 스크롤 위치는 명시적으로 기록된 경우에만 발생한다.&lt;br /&gt;
&lt;br /&gt;
여기서 여러 프레임에 걸쳐 스크롤 값을 변경하고 새로 드러난 네임테이블 영역에 타일을 쓰면 큰 배경 위로 카메라가 패닝하는 효과를 얻을 수 있다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUADDR}}{{Anchor|Reg2006}}{{Anchor|Address_($2006)_&amp;gt;&amp;gt;_write_x2}}&lt;br /&gt;
=== PPUADDR - VRAM 주소 ($2006 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 1번째 쓰기  2번째 쓰기&lt;br /&gt;
 15 bit  8  7  bit  0&lt;br /&gt;
 ---- ----  ---- ----&lt;br /&gt;
 ..AA AAAA  AAAA AAAA&lt;br /&gt;
   || ||||  |||| ||||&lt;br /&gt;
   ++-++++--++++-++++- VRAM 주소&lt;br /&gt;
&lt;br /&gt;
CPU와 PPU는 별도의 버스에 있기 때문에 어느 쪽도 다른 쪽의 메모리에 직접 접근할 수 없다. CPU는 PPU의 한 쌍의 레지스터를 통해 VRAM에 쓴다. 먼저 [[#PPUADDR|PPUADDR]]에 주소를 로드한 다음 [[#PPUDATA|PPUDATA]]에 데이터를 반복적으로 쓴다. 각 PPUDATA 접근은 [[#PPUCTRL|PPUCTRL]]에 구성된 대로 주소를 자동으로 1 또는 32만큼 증가시키므로 VRAM 주소는 모든 데이터 쓰기 시리즈에 대해 한 번만 설정하면 된다.&lt;br /&gt;
&lt;br /&gt;
16비트 주소는 PPUADDR에 한 번에 한 바이트씩, 상위 바이트부터 쓴다. 이것이 첫 번째 쓰기인지 두 번째 쓰기인지는 PPU의 [[#Internal_registers|내부 w 레지스터]]에 의해 추적되며, 이는 [[#PPUSCROLL|PPUSCROLL]]과 공유된다. w가 0이 아니거나 그 상태를 알 수 없는 경우, 주소를 쓰기 전에 [[#PPUSTATUS|PPUSTATUS]]를 읽어 지워야 한다. 예를 들어, w가 0으로 알려진 후 VRAM 주소를 $2108로 설정하려면:&lt;br /&gt;
&lt;br /&gt;
   lda #$21&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   lda #$08&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
&lt;br /&gt;
[[PPU_memory_map|PPU 주소 공간]]은 14비트로, $0000-$3FFF에 걸쳐 있다. 이 레지스터에 기록된 값의 비트 14와 15는 무시된다. 그러나 PPUADDR에 기록된 데이터를 보유하는 [[#Internal_registers|내부 t 레지스터]]의 비트 14는 PPUADDR 상위 바이트를 쓸 때 0으로 강제된다. 이 세부 사항은 VRAM 주소를 설정하기 위해 PPUADDR을 사용할 때는 중요하지 않지만, 화면 중간 스크롤을 제어하는 데 사용할 때는 중요한 제한 사항이다(자세한 내용은 [[PPU scrolling]] 참조).&lt;br /&gt;
&lt;br /&gt;
==== 참고 ====&lt;br /&gt;
화면 새로 고침 중 [[#PPUSCROLL|PPUSCROLL]] 및 [[#PPUADDR|PPUADDR]]에 접근하면 흥미로운 래스터 효과가 발생한다. 각 스캔라인의 시작 위치는 네임테이블 메모리의 모든 픽셀 위치로 설정할 수 있다. 자세한 내용은 [[PPU scrolling]]을 참조하라.&lt;br /&gt;
&lt;br /&gt;
==== 팔레트 손상 ====&lt;br /&gt;
특정 상황에서 PPU 팔레트의 항목이 손상될 수 있다. 이것이 정확히 어떻게 또는 왜 발생하는지는 불분명하지만, NTSC PPU의 모든 리비전은 적어도 어느 정도 취약한 것으로 보인다.&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=23209 렌더링 중 PPU가 꺼졌을 때 팔레트 변색 문제] N·K의 스레드&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
팔레트 메모리에 쓰기를 마쳤을 때의 해결 방법은 항상 다음과 같다.&lt;br /&gt;
# 필요한 경우 주소를 업데이트하여 $3F00, $3F10, $3F20 또는 다른 미러를 가리키도록 한다.&lt;br /&gt;
# 그런 다음에만 주소를 팔레트 메모리 외부를 가리키도록 변경한다.&lt;br /&gt;
&lt;br /&gt;
이 해결 방법을 구현하는 코드 조각은 수많은 게임에 존재한다.&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?p=280899#p280899 이상한 PPU 쓰기] Fiskbit의 스레드&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   lda #$3F&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   lda #0&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
&lt;br /&gt;
==== 버스 충돌 ====&lt;br /&gt;
래스터 효과 중, PPUADDR에 대한 두 번째 쓰기가 특정 시간에 발생하면 최대 한 축의 스크롤링이 기록된 값과 현재 값의 비트 AND로 설정된다. 두 번째 쓰기를 완료하는 유일한 안전한 시간은 블랭킹 중이다. 더 구체적인 타이밍은 [[PPU scrolling]]을 참조하라. [//forums.nesdev.org/viewtopic.php?p=230391#p230391]&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUDATA}}{{Anchor|Reg2007}}{{Anchor|Data_($2007)_&amp;lt;&amp;gt;_read/write}}&lt;br /&gt;
=== PPUDATA - VRAM 데이터 ($2007 읽기/쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 DDDD DDDD&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- VRAM 데이터&lt;br /&gt;
&lt;br /&gt;
VRAM 읽기/쓰기 데이터 레지스터. 접근 후, 비디오 메모리 주소는 $2000의 비트 2에 의해 결정된 양만큼 증가한다.&lt;br /&gt;
&lt;br /&gt;
[[#PPUMASK|PPUMASK]]로 배경/스프라이트 렌더링 플래그를 비활성화하여 화면이 꺼지거나 수직 블랭킹 중에 이 포트를 통해 VRAM에서 데이터를 읽거나 쓸 수 있다. 이 레지스터에 접근하면 VRAM 주소가 증가하므로, 그래픽 결함을 유발하고 쓰기 시 예측할 수 없는 VRAM 주소에 쓰게 되므로 수직 또는 강제 블랭킹 외부에서는 접근해서는 안 된다. 그러나 소수의 게임은 렌더링 중에 PPUDATA에서 읽는 것으로 알려져 있으며, 이로 인해 스크롤 위치가 변경된다. [[PPU scrolling#$2007 reads and writes|PPU 스크롤링]] 및 [[Tricky-to-emulate games]]를 참조하라.&lt;br /&gt;
&lt;br /&gt;
VRAM 읽기 및 쓰기는 렌더링이 사용하는 것과 동일한 내부 주소 레지스터를 공유한다. 따라서 비디오 메모리에 데이터를 로드한 후, 프로그램은 잘못된 스크롤링을 피하기 위해 [[#PPUSCROLL|PPUSCROLL]] 및 [[#PPUCTRL|PPUCTRL]] (비트 1-0) 쓰기로 스크롤 위치를 다시 로드해야 한다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|The PPUDATA read buffer (post-fetch)}}&lt;br /&gt;
==== PPUDATA 읽기 버퍼 ====&lt;br /&gt;
&lt;br /&gt;
PPUDATA에서 읽는 것은 현재 VRAM 주소의 값을 직접 반환하는 것이 아니라 내부 읽기 버퍼의 내용을 반환한다. 이 읽기 버퍼는 모든 PPUDATA 읽기에서 업데이트되지만, 이전 내용이 CPU로 반환된 &#039;&#039;후에만&#039;&#039; 업데이트되므로 PPUDATA 읽기를 효과적으로 하나 지연시킨다. 이는 PPU 버스 읽기가 너무 느려서 CPU 읽기를 서비스할 시간에 완료할 수 없기 때문이다. 이 읽기 버퍼 때문에, PPUADDR을 통해 VRAM 주소를 설정한 후에는 먼저 PPUDATA를 읽어 읽기 버퍼를 준비(결과 무시)한 다음 원하는 데이터를 읽어야 한다.&lt;br /&gt;
&lt;br /&gt;
읽기 버퍼는 PPUDATA 읽기에서만 업데이트된다는 점에 유의하라. 쓰기나 렌더링과 같은 다른 PPU 프로세스에는 영향을 받지 않으며, 다음 읽기까지 값을 무기한 유지한다.&lt;br /&gt;
&lt;br /&gt;
==== 팔레트 RAM 읽기 ====&lt;br /&gt;
&lt;br /&gt;
이후 PPU는 $3F00-$3FFF에서 팔레트 데이터를 읽는 신뢰할 수 없는 기능을 추가했다. 이러한 읽기는 팔레트 RAM이 PPU 주소 공간에 오버레이된 PPU 내부의 별도 메모리 공간이므로 표준 VRAM 읽기와 다르게 작동한다. 참조된 6비트 팔레트 데이터는 내부 읽기 버퍼로 가지 않고 즉시 반환되므로 준비 읽기가 필요하지 않다. 동시에 PPU는 지정된 주소의 PPU 메모리에서 팔레트 데이터 &amp;quot;아래&amp;quot;에서 일반 읽기를 수행하고 이 읽기 결과는 평소와 같이 읽기 버퍼로 들어간다. 읽기 버퍼의 이전 내용은 팔레트를 읽을 때 버려지지만, 주소를 팔레트 RAM 외부로 변경하고 한 번 읽으면 이 그림자 메모리([[PPU memory map|일반적으로 미러링된 네임테이블]])의 내용에 접근할 수 있다. 팔레트 RAM 읽기를 지원하지 않는 PPU에서는 이 메모리 범위가 나머지 PPU 메모리와 동일하게 동작한다.&lt;br /&gt;
&lt;br /&gt;
이 기능은 2C02G, 2C02H 및 PAL PPU에서 지원된다. 팔레트를 읽을 때 반환되는 바이트는 상위 2비트에 [[Open_bus_behavior#PPU_open_bus|PPU 열린 버스]]를 포함하며, 값은 그레이스케일 모드에 의해 수정된 후 반환된다. 그레이스케일 모드가 활성화되면 하위 4비트가 지워진다. 불행히도 일부 콘솔에서는 마스터 클럭에 대한 4개의 CPU/PPU 정렬 중 하나에서 팔레트 읽기가 손상될 수 있다. 이 손상은 레지스터 접근을 나타내는 [[PPU pinout|PPU /CS]] 신호가 언제 비활성화되는지에 따라 다르며, 이는 콘솔마다 다르다. 이 기능이 모든 PPU에 있는 것은 아니라는 점과 결합하여 개발자는 팔레트 RAM에서 읽는 것에 의존해서는 안 된다.&lt;br /&gt;
&lt;br /&gt;
==== DPCM 샘플과의 읽기 충돌 ====&lt;br /&gt;
&lt;br /&gt;
현재 DPCM 샘플을 재생 중인 경우, APU의 샘플 가져오기 중단이 $2007을 읽는 명령어와 동시에 발생하면 추가 읽기 사이클이 발생할 가능성이 있다. 이로 인해 추가 증가가 발생하고 바이트가 건너뛰어져 잘못된 데이터가 읽힌다. 참조: [[APU_DMC#Conflict with controller and PPU read|APU DMC]]&lt;br /&gt;
&lt;br /&gt;
{{Anchor|OAMDMA}}{{Anchor|Reg4014}}&lt;br /&gt;
=== OAMDMA - 스프라이트 DMA ($4014 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 AAAA AAAA&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- 소스 페이지 (소스 주소의 상위 바이트)&lt;br /&gt;
&lt;br /&gt;
OAMDMA는 CPU를 일시 중단하여 [[DMA]]를 사용하여 CPU 메모리 페이지를 PPU OAM으로 빠르게 복사할 수 있는 CPU 레지스터이다. 항상 256바이트를 복사하고 소스 주소는 항상 페이지 정렬($00으로 끝남)로 시작한다. 이 레지스터에 기록된 값은 소스 주소의 상위 바이트이며, 복사는 쓰기 직후 사이클에서 시작된다. 복사는 513 또는 514 사이클이 걸리며, CPU 메모리에서 읽기와 [[#OAMDATA|OAMDATA]]에 쓰기의 256 쌍으로 구현된다. vblank가 매우 짧고 [[#OAMADDR|OAMADDR]]을 변경하면 종종 OAM이 손상되기 때문에, OAM DMA는 일반적으로 매 프레임마다 스프라이트를 업데이트하는 유일한 현실적인 옵션이다. 데이터가 올바르게 정렬되고 [[Errata|손상을 피하기 위해]] DMA를 시작하기 전에 OAMADDR에 0을 써야 한다.&amp;lt;ref name = &amp;quot;OAMglitch&amp;quot; /&amp;gt; OAM DMA는 렌더링이 비활성화된 상태에서 프레임 중간에 수행할 수 있지만, 일반적으로 vblank에서만 수행된다.&lt;br /&gt;
&lt;br /&gt;
OAM은 동적 RAM(DRAM)으로 구성되어 있으며, 자주 새로 고치지 않으면 붕괴된다. 이는 NTSC와 PAL에서 다른 고려 사항이 필요하다. 새로 고침은 DRAM 행을 읽거나 쓸 때마다 자동으로 발생하므로, 렌더링 중 스프라이트 평가 프로세스에 의해 모든 스캔라인에서 새로 고쳐진다. NTSC에서는 vblank가 충분히 짧아서 렌더링이 다시 시작되기 전에 OAM이 붕괴되지 않으므로, OAM DMA는 vblank 중 언제든지 수행할 수 있다. PAL에서는 vblank가 훨씬 길기 때문에 그 시간 동안 붕괴를 피하기 위해 PPU는 NMI 후 24 스캔라인 후에 강제 새로 고침을 자동으로 수행하며, 이 동안에는 OAM에 쓸 수 없다. 이는 OAM DMA가 PAL의 vblank 시작으로 제한된다는 것을 의미한다. NTSC vblank는 24 PAL 스캔라인보다 짧으므로, NTSC 호환 NMI 핸들러는 강제 새로 고침 전에 완료되므로 OAM DMA 타이밍에 관계없이 PAL에서 작동해야 한다. 어느 경우든, vblank 중에 업데이트되지 않으면 OAM은 붕괴되지 않으며, 실제로 랙 프레임(CPU가 vblank 전에 작업을 완료하지 못한 프레임)에서는 불완전한 스프라이트 데이터를 PPU에 복사하는 것을 피하기 위해 일반적으로 업데이트해서는 안 된다.&lt;br /&gt;
&lt;br /&gt;
== 내부 레지스터 ==&lt;br /&gt;
&lt;br /&gt;
PPU에는 [[PPU scrolling#PPU internal registers|PPU 스크롤링]]에 자세히 설명된 4개의 내부 레지스터도 있다.&lt;br /&gt;
* &#039;&#039;&#039;v&#039;&#039;&#039;: 렌더링 중에는 스크롤 위치에 사용된다. 렌더링 외부에서는 현재 VRAM 주소로 사용된다.&lt;br /&gt;
* &#039;&#039;&#039;t&#039;&#039;&#039;: 렌더링 중에는 다음 스캔라인의 시작 거친 x 스크롤과 화면의 시작 y 스크롤을 지정한다. 렌더링 외부에서는 스크롤 또는 VRAM 주소를 v로 전송하기 전에 보유한다.&lt;br /&gt;
* &#039;&#039;&#039;x&#039;&#039;&#039;: 현재 스크롤의 미세 x 위치로, 렌더링 중에 v와 함께 사용된다.&lt;br /&gt;
* &#039;&#039;&#039;w&#039;&#039;&#039;: [[#PPUSCROLL|PPUSCROLL]] 또는 [[#PPUADDR|PPUADDR]]에 대한 각 쓰기에서 토글되며, 이것이 첫 번째 쓰기인지 두 번째 쓰기인지를 나타낸다. [[#PPUSTATUS|PPUSTATUS]]를 읽으면 지워진다. &#039;쓰기 래치&#039; 또는 &#039;쓰기 토글&#039;이라고도 한다.&lt;br /&gt;
&lt;br /&gt;
== 참조 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=6502_%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=161</id>
		<title>6502 명령어</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=6502_%EB%AA%85%EB%A0%B9%EC%96%B4&amp;diff=161"/>
		<updated>2025-10-01T04:31:49Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NES }}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
|+ 6502 공식 명령어&lt;br /&gt;
|-&lt;br /&gt;
| [[#ADC|ADC]] || [[#AND|AND]] || [[#ASL|ASL]] || [[#BCC|BCC]] || [[#BCS|BCS]] || [[#BEQ|BEQ]] || [[#BIT|BIT]] || [[#BMI|BMI]] || [[#BNE|BNE]] || [[#BPL|BPL]] || [[#BRK|BRK]] || [[#BVC|BVC]] || [[#BVS|BVS]] || [[#CLC|CLC]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#CLD|CLD]] || [[#CLI|CLI]] || [[#CLV|CLV]] || [[#CMP|CMP]] || [[#CPX|CPX]] || [[#CPY|CPY]] || [[#DEC|DEC]] || [[#DEX|DEX]] || [[#DEY|DEY]] || [[#EOR|EOR]] || [[#INC|INC]] || [[#INX|INX]] || [[#INY|INY]] || [[#JMP|JMP]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#JSR|JSR]] || [[#LDA|LDA]] || [[#LDX|LDX]] || [[#LDY|LDY]] || [[#LSR|LSR]] || [[#NOP|NOP]] || [[#ORA|ORA]] || [[#PHA|PHA]] || [[#PHP|PHP]] || [[#PLA|PLA]] || [[#PLP|PLP]] || [[#ROL|ROL]] || [[#ROR|ROR]] || [[#RTI|RTI]]&lt;br /&gt;
|-&lt;br /&gt;
| [[#RTS|RTS]] || [[#SBC|SBC]] || [[#SEC|SEC]] || [[#SED|SED]] || [[#SEI|SEI]] || [[#STA|STA]] || [[#STX|STX]] || [[#STY|STY]] || [[#TAX|TAX]] || [[#TAY|TAY]] || [[#TSX|TSX]] || [[#TXA|TXA]] || [[#TXS|TXS]] || [[#TYA|TYA]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 종류별 공식 명령어 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;text-align: center&amp;quot;&lt;br /&gt;
! 종류&lt;br /&gt;
!colspan=8 class=&amp;quot;unsortable&amp;quot; | 명령어&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 접근 (Access)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#LDA|LDA]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#STA|STA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#LDX|LDX]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#STX|STX]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#LDY|LDY]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#STY|STY]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 전송 (Transfer)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#TAX|TAX]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#TXA|TXA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#TAY|TAY]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#TYA|TYA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 산술 (Arithmetic)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#ADC|ADC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SBC|SBC]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#INC|INC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#DEC|DEC]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#INC|INX]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#DEC|DEX]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#INY|INY]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#DEY|DEY]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 시프트 (Shift)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#ASL|ASL]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#LSR|LSR]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#ROL|ROL]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#ROR|ROR]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 비트연산 (Bitwise)&lt;br /&gt;
|[[#AND|AND]]&lt;br /&gt;
|[[#ORA|ORA]]&lt;br /&gt;
|[[#EOR|EOR]]&lt;br /&gt;
|[[#BIT|BIT]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 비교 (Compare)&lt;br /&gt;
|[[#CMP|CMP]]&lt;br /&gt;
|[[#CPX|CPX]]&lt;br /&gt;
|[[#CPY|CPY]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 분기 (Branch)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BCC|BCC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BCS|BCS]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BEQ|BEQ]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BNE|BNE]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BPL|BPL]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BMI|BMI]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BVC|BVC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#BVS|BVS]]&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 점프 (Jump)&lt;br /&gt;
|[[#JMP|JMP]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#JSR|JSR]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#RTS|RTS]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#BRK|BRK]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#RTI|RTI]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 스택 (Stack)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#PHA|PHA]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#PLA|PLA]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#PHP|PHP]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#PLP|PLP]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#TXS|TXS]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#TSX|TSX]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 플래그 (Flags)&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#CLC|CLC]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SEC|SEC]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#CLI|CLI]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SEI|SEI]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; | [[#CLD|CLD]]&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot;  | [[#SED|SED]]&lt;br /&gt;
|[[#CLV|CLV]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|style=&amp;quot;text-align: left&amp;quot; | 기타 (Other)&lt;br /&gt;
|[[#NOP|NOP]]&lt;br /&gt;
|style=&amp;quot;border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none; border-right: none;&amp;quot; |&lt;br /&gt;
|style=&amp;quot;border-left: none;&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 공식 명령어 ==&lt;br /&gt;
{{Anchor|ADC}}&lt;br /&gt;
=== ADC - 캐리와 함께 더하기 (Add with Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A + 메모리 + C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ADC는 캐리 플래그와 메모리 값을 어큐뮬레이터에 더합니다. 그 후 캐리 플래그는 비트 7에서 나오는 캐리 값으로 설정되어, 다음 바이트 덧셈으로 1을 넘겨줌으로써 1바이트보다 큰 값을 더할 수 있게 합니다. 이는 부호 없는 오버플로로 생각할 수도 있습니다. 첫 바이트를 더하기 전에 [[#CLC|CLC]]로 캐리를 클리어하여 알려진 상태로 만들어, 1만큼의 오차를 피하는 것이 일반적입니다. 오버플로 플래그는 부호 있는 오버플로나 언더플로가 발생했는지를 나타냅니다. 이는 두 입력이 모두 양수인데 결과가 음수이거나, 두 입력이 모두 음수인데 결과가 양수인 경우에 발생합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 결과 &amp;gt; $FF || 결과가 $FF를 초과하여 오버플로(랩어라운드)되면, 부호 없는 오버플로가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || (결과 ^ A) &amp;amp; (결과 ^ 메모리) &amp;amp; $80 || 결과의 부호가 A와 메모리의 부호와 모두 다르면, 부호 있는 오버플로(또는 언더플로)가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $69 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $65 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $75 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $6D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $7D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $79 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $61 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $71 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SBC|SBC]], [[#CLC|CLC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|AND}}&lt;br /&gt;
=== AND - 비트 단위 AND (Bitwise AND) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A &amp;amp; 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 명령어는 메모리 값과 어큐뮬레이터를 비트 단위로 AND 연산합니다. 두 입력 비트가 모두 1이면 결과 비트는 1이 되고, 그렇지 않으면 0이 됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;white-space:nowrap; border:1px solid; padding:3px; border-color:rgb(162, 169, 177); background-color:rgb(234, 236, 240);&amp;quot; | AND 진리표&lt;br /&gt;
|-&lt;br /&gt;
! A !! 메모리 !! 결과&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $29 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $25 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $35 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $2D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $3D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $39 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $21 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $31 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ORA|ORA]], [[#EOR|EOR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ASL}}&lt;br /&gt;
=== ASL - 산술 왼쪽 시프트 (Arithmetic Shift Left) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 값 &amp;lt;&amp;lt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; C &amp;lt;- [76543210] &amp;lt;- 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ASL은 메모리 값 또는 어큐뮬레이터의 모든 비트를 왼쪽으로 한 자리씩 시프트하여, 각 비트의 값을 다음 비트로 이동시킵니다. 비트 7은 캐리 플래그로 시프트되고, 0이 비트 0으로 시프트됩니다. 이는 부호 없는 값을 2로 곱하는 것과 같으며, 캐리는 오버플로를 나타냅니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 7&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $0A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $06 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $16 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $0E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $1E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LSR|LSR]], [[#ROL|ROL]], [[#ROR|ROR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BCC}}&lt;br /&gt;
=== BCC - 캐리가 클리어되면 분기 (Branch if Carry Clear) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
캐리 플래그가 클리어(0)이면, BCC는 상대 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 캐리가 설정되었을 때 [[#BCS|BCS]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
캐리 플래그는 문맥에 따라 다른 의미를 가집니다. BCC는 비교 후에 레지스터가 메모리 값보다 작을 경우 분기하는 데 사용될 수 있으므로, 때때로 BLT(Branch if Less Than)라고도 불립니다. 또한 [[#SBC|SBC]] 후에는 부호 없는 값이 언더플로되었을 경우, [[#ADC|ADC]] 후에는 오버플로되지 &#039;않았을&#039; 경우 분기하는 데 사용될 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $90 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BCS|BCS]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BCS}}&lt;br /&gt;
=== BCS - 캐리가 설정되면 분기 (Branch if Carry Set) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
캐리 플래그가 설정(1)되면, BCS는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 캐리가 클리어되었을 때 [[#BCC|BCC]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
캐리 플래그는 문맥에 따라 다른 의미를 가집니다. BCS는 비교 후에 레지스터가 메모리 값보다 크거나 같을 경우 분기하는 데 사용될 수 있으므로, 때때로 BGE(Branch if Greater Than or Equal)라고도 불립니다. 또한 [[#ADC|ADC]] 후에는 부호 없는 값이 오버플로되었을 경우, [[#SBC|SBC]] 후에는 언더플로되지 &#039;않았을&#039; 경우 분기하는 데 사용될 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $B0 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BCC|BCC]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BEQ}}&lt;br /&gt;
=== BEQ - 같으면 분기 (Branch if Equal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
제로 플래그가 설정(1)되면, BEQ는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 제로가 클리어되었을 때 [[#BNE|BNE]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
비교 연산은 이 플래그를 사용하여 비교된 값들이 같은지 여부를 나타냅니다. A, X, 또는 Y를 변경하는 모든 명령어는 레지스터가 0이 되는지 여부에 따라 암묵적으로 제로 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $F0 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BNE|BNE]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BIT}}&lt;br /&gt;
=== BIT - 비트 테스트 (Bit Test) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A &amp;amp; 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BIT는 플래그를 수정하지만, 메모리나 레지스터는 변경하지 않습니다. 제로 플래그는 어큐뮬레이터와 메모리 값의 AND 연산 결과에 따라 설정되며, 이는 효과적으로 비트마스크를 적용한 후 설정된 비트가 있는지 확인하는 것과 같습니다. 메모리 값의 비트 7과 6은 네거티브 및 오버플로 플래그로 직접 로드되어, 마스크를 A에 로드할 필요 없이 쉽게 확인할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
BIT는 CPU 플래그만 변경하기 때문에, 때때로 CPU 레지스터를 덮어쓰지 않고 하드웨어 레지스터의 읽기 부작용을 트리거하거나, 3 사이클 [[#NOP|NOP]]처럼 사이클을 낭비하는 데 사용됩니다. 고급 기술로, 피연산자에 1 또는 2바이트 명령어를 숨겨두고 직접 점프할 때만 실행되도록 하여 두 코드 경로를 인터리빙하는 데 가끔 사용됩니다. 그러나 피연산자의 명령어는 읽을 주소로 취급되므로, 하드웨어 레지스터를 읽을 경우 부작용을 일으킬 위험이 있습니다. 이 기술은 공간, 시간 또는 레지스터 사용에 대한 제약이 심할 때 유용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 메모리의 비트 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 메모리의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero page]] || $24 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $2C || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#AND|AND]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BMI}}&lt;br /&gt;
&lt;br /&gt;
=== BMI - 음수이면 분기 (Branch if Minus) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
네거티브 플래그가 설정(1)되면, BMI는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 네거티브가 클리어되었을 때 [[#BPL|BPL]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
A, X, 또는 Y를 변경하는 모든 명령어는 비트 7(부호 비트)에 따라 암묵적으로 네거티브 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $30 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BPL|BPL]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BNE}}&lt;br /&gt;
=== BNE - 같지 않으면 분기 (Branch if Not Equal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
제로 플래그가 클리어(0)이면, BNE는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 네거티브가 설정되었을 때 [[#BEQ|BEQ]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
비교 연산은 이 플래그를 사용하여 비교된 값들이 같은지 여부를 나타냅니다. A, X, 또는 Y를 변경하는 모든 명령어는 레지스터가 0이 되는지 여부에 따라 암묵적으로 제로 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $D0 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BEQ|BEQ]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BPL}}&lt;br /&gt;
=== BPL - 양수이면 분기 (Branch if Plus) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
네거티브 플래그가 클리어(0)이면, BPL는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 네거티브가 설정되었을 때 [[#BMI|BMI]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
A, X, 또는 Y를 변경하는 모든 명령어는 비트 7(부호 비트)에 따라 암묵적으로 네거티브 플래그를 설정하거나 클리어합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $10 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BMI|BMI]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BRK}}&lt;br /&gt;
=== BRK - 중단 (소프트웨어 IRQ) (Break) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에 PC + 2를 [[#PHA|푸시]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;스택에 NV11DIZC 플래그를 [[#PHA|푸시]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PC = ($FFFE)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
BRK는 인터럽트 요청(IRQ)을 트리거합니다. IRQ는 보통 외부 하드웨어에 의해 트리거되며, BRK는 소프트웨어에서 이를 수행하는 유일한 방법입니다. 일반적인 IRQ처럼, 현재 프로그램 카운터와 프로세서 플래그를 스택에 푸시하고, 인터럽트 비활성화 플래그를 설정한 후, IRQ 핸들러로 점프합니다. 일반적인 IRQ와 달리, 스택에 푸시되는 플래그 바이트에 브레이크 플래그를 설정하고([[#PHP|PHP]]처럼), 인터럽트 비활성화 플래그가 설정되어 있어도 인터럽트를 트리거합니다. 특히, 스택에 푸시되는 반환 주소는 BRK 옵코드 다음 바이트를 건너뜁니다. 이러한 이유로, BRK는 종종 사용되지 않는 즉시 피연산자를 가진 2바이트 명령어로 간주됩니다.&lt;br /&gt;
&lt;br /&gt;
불행히도, 6502 버그로 인해 BRK IRQ는 동시에 발생하는 NMI에 의해 무시될 수 있습니다. 이 경우, NMI 핸들러만 호출되고 IRQ 핸들러는 건너뜁니다. 그러나 스택에 푸시된 플래그 바이트에는 여전히 브레이크 플래그가 설정되어 있으므로, NMI 핸들러는 이 플래그를 확인하여 (느리지만) 이 상황이 발생했음을 감지할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
BRK는 값 $00을 사용하기 때문에, 프로그래밍 가능한 ROM의 모든 바이트는 BRK 명령어로 덮어써서 실행을 IRQ 핸들러로 보낼 수 있습니다. 이는 일회성 프로그래밍 가능 ROM을 패치하는 데 유용합니다. BRK는 또한 시스템 콜 메커니즘으로 사용될 수 있으며, 사용되지 않는 바이트는 소프트웨어에서 인수로 사용될 수 있습니다 (접근하기는 불편하지만). NES 게임의 맥락에서, BRK는 종종 크래시 핸들러로 가장 유용합니다. 사용되지 않는 프로그램 공간을 $00으로 채우고 IRQ 핸들러가 디버깅 정보를 표시하거나 다른 방식으로 크래시를 깔끔하게 처리합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 1 || 이전 플래그가 스택에 푸시된 후 1로 설정됩니다. 이 플래그 변경의 효과는 지연되지 &#039;않습니다&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#B|B - 브레이크]] || 1로 푸시됨 || 이 플래그는 CPU의 실제 상태가 아닌, 스택에 푸시된 플래그 바이트에만 존재합니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#BRK|Implied]] || $00 || 1 || 7 || BRK는 1바이트만 사용하지만, 반환 주소는 다음 바이트를 건너뜁니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#BRK|#Immediate]] || $00 || 2 || 7 || BRK가 다음 바이트를 건너뛰기 때문에, 종종 2바이트 명령어로 간주됩니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#RTI|RTI]], [[#PHP|PHP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BVC}}&lt;br /&gt;
=== BVC - 오버플로가 클리어되면 분기 (Branch if Overflow Clear) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
오버플로 플래그가 클리어(0)이면, BVC는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 오버플로가 설정되었을 때 [[#BVS|BVS]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
제로, 네거티브, 심지어 캐리와 달리, 오버플로는 매우 적은 수의 명령어에 의해서만 수정됩니다. 주로 [[#BIT|BIT]] 명령어와 함께 사용되며, 특히 하드웨어 레지스터를 폴링할 때 사용됩니다. 또한 [[#ADC|ADC]] 및 [[#SBC|SBC]]와 함께 부호 있는 오버플로에 사용되기도 합니다. 표준 6502 칩은 외부 장치가 핀을 사용하여 오버플로를 설정할 수 있게 하여 소프트웨어가 해당 이벤트를 폴링할 수 있도록 하지만, NES의 2A03에는 이 기능이 없습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $50 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BVS|BVS]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|BVS}}&lt;br /&gt;
=== BVS - 오버플로가 설정되면 분기 (Branch if Overflow Set) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 2 + 메모리 (부호 있음)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
오버플로 플래그가 설정(1)되면, BVS는 분기 오프셋을 프로그램 카운터에 더하여 가까운 위치로 분기합니다. 오프셋은 부호가 있으며, 분기 명령어 &#039;다음&#039;의 첫 바이트를 기준으로 [-128, 127]의 범위를 가집니다. 이보다 멀리 분기하려면 [[#JMP|JMP]] 명령어를 사용하고, 오버플로가 클리어되었을 때 [[#BVC|BVC]]로 해당 [[#JMP|JMP]]를 건너뛰어야 합니다.&lt;br /&gt;
&lt;br /&gt;
제로, 네거티브, 심지어 캐리와 달리, 오버플로는 매우 적은 수의 명령어에 의해서만 수정됩니다. 주로 [[#BIT|BIT]] 명령어와 함께 사용되며, 특히 하드웨어 레지스터를 폴링할 때 사용됩니다. 또한 [[#ADC|ADC]] 및 [[#SBC|SBC]]와 함께 부호 있는 오버플로에 사용되기도 합니다. 표준 6502 칩은 외부 장치가 핀을 사용하여 오버플로를 설정할 수 있게 하여 소프트웨어가 해당 이벤트를 폴링할 수 있도록 하지만, NES의 2A03 CPU에는 이 기능이 없습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Relative|Relative]] || $70 || 2 || 2 (분기 시 3, 페이지 교차 시 4)[[#footnote|*]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BVC|BVC]], [[#JMP|JMP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLC}}&lt;br /&gt;
=== CLC - 캐리 클리어 (Clear Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;C = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLC는 캐리 플래그를 클리어합니다. 특히, 이는 보통 [[#ADC|ADC]]로 값의 하위 바이트를 더하기 전에 추가적인 1이 더해지는 것을 방지하기 위해 수행됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $18 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SEC|SEC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLD}}&lt;br /&gt;
=== CLD - 데시멀 클리어 (Clear Decimal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;D = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLD는 데시멀 플래그를 클리어합니다. 데시멀 플래그는 보통 [[BCD]] 모드의 활성화 여부를 제어하지만, 이 모드는 [[NES]]의 [[2A03]] CPU에서는 사용할 수 없다. 그러나 플래그 자체는 여전히 작동하며 상태를 저장하는 데 사용될 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $D8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SED|SED]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLI}}&lt;br /&gt;
=== CLI - 인터럽트 비활성화 클리어 (Clear Interrupt Disable) ===&lt;br /&gt;
&amp;lt;code&amp;gt;I = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLI는 인터럽트 비활성화 플래그를 클리어하여, CPU가 하드웨어 IRQ를 처리할 수 있도록 합니다. 이 플래그 변경의 효과는 한 명령어 지연됩니다. 왜냐하면 플래그는 IRQ가 폴링된 후에 변경되어, 보류 중인 IRQ가 감지되고 서비스되기 전에 다음 명령어가 실행될 수 있도록 하기 때문입니다. 이 플래그는 NMI에는 영향을 미치지 않으며, NMI는 이름(&amp;quot;non-maskable&amp;quot;)에서 알 수 있듯이 CPU가 무시할 수 없습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 0 || 이 플래그 변경의 효과는 1 명령어 지연됩니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $58 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#SEI|SEI]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CLV}}&lt;br /&gt;
=== CLV - 오버플로 클리어 (Clear Overflow) ===&lt;br /&gt;
&amp;lt;code&amp;gt;V = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CLV는 오버플로 플래그를 클리어합니다. 이에 해당하는 SEV 명령어는 없습니다. 대신, 오버플로 설정은 6502 CPU에서 외부 하드웨어에 의해 제어되는 핀으로 노출되어 있으며, NES의 2A03 CPU에는 전혀 노출되어 있지 않습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $B8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CMP}}&lt;br /&gt;
=== CMP - A 비교 (Compare A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A - 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CMP는 A를 메모리 값과 비교하여, 플래그를 적절하게 설정하지만 어떤 레지스터도 수정하지 않습니다. 비교는 뺄셈으로 구현되며, 빌림(borrow)이 없으면 캐리를 설정하고, 결과가 0이면 제로를 설정하고, 결과가 음수이면 네거티브를 설정합니다. 그러나 캐리와 제로는 종종 부등식으로 기억하는 것이 가장 쉽습니다.&lt;br /&gt;
&lt;br /&gt;
비교는 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || A &amp;gt;= 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || A == 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $C9 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $C5 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $D5 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $CD || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $DD || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $D9 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $C1 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $D1 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CPX|CPX]], [[#CPY|CPY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CPX}}&lt;br /&gt;
=== CPX - X 비교 (Compare X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X - 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CPX는 X를 메모리 값과 비교하여, 플래그를 적절하게 설정하지만 어떤 레지스터도 수정하지 않습니다. 비교는 뺄셈으로 구현되며, 빌림(borrow)이 없으면 캐리를 설정하고, 결과가 0이면 제로를 설정하고, 결과가 음수이면 네거티브를 설정합니다. 그러나 캐리와 제로는 종종 부등식으로 기억하는 것이 가장 쉽습니다.&lt;br /&gt;
&lt;br /&gt;
비교는 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || X &amp;gt;= 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || X == 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $E0 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $E4 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $EC || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CMP|CMP]], [[#CPY|CPY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|CPY}}&lt;br /&gt;
=== CPY - Y 비교 (Compare Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y - 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CPY는 Y를 메모리 값과 비교하여, 플래그를 적절하게 설정하지만 어떤 레지스터도 수정하지 않습니다. 비교는 뺄셈으로 구현되며, 빌림(borrow)이 없으면 캐리를 설정하고, 결과가 0이면 제로를 설정하고, 결과가 음수이면 네거티브를 설정합니다. 그러나 캐리와 제로는 종종 부등식으로 기억하는 것이 가장 쉽습니다.&lt;br /&gt;
&lt;br /&gt;
비교는 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || Y &amp;gt;= 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || Y == 메모리&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $C0 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $C4 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $CC || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CMP|CMP]], [[#CPX|CPX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|DEC}}&lt;br /&gt;
=== DEC - 메모리 감소 (Decrement Memory) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = 메모리 - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DEC는 메모리 위치에서 1을 뺍니다. 특히, 이 명령어의 어큐뮬레이터 버전은 없으며, 대신 [[#ADC|ADC]] 또는 [[#SBC|SBC]]를 사용해야 합니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
감소는 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $C6 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $D6 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $CE || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $DE || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#INC|INC]], [[#ADC|ADC]], [[#SBC|SBC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|DEX}}&lt;br /&gt;
=== DEX - X 감소 (Decrement X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = X - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DEX는 X 레지스터에서 1을 뺍니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $CA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#INX|INX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|DEY}}&lt;br /&gt;
=== DEY - Y 감소 (Decrement Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = Y - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DEY는 Y 레지스터에서 1을 뺍니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $88 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#INY|INY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|EOR}}&lt;br /&gt;
=== EOR - 비트 단위 배타적 OR (Bitwise Exclusive OR) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A ^ 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
EOR은 메모리 값과 어큐뮬레이터를 비트 단위로 배타적 OR(exclusive-OR) 연산합니다. 입력 비트가 다르면 결과 비트는 1이 되고, 같으면 0이 됩니다. 이 연산은 XOR로도 알려져 있습니다.&lt;br /&gt;
&lt;br /&gt;
6502에는 비트 단위 NOT 명령어가 없지만, 값 $FF와 함께 EOR을 사용하면 동일한 동작을 하여 다른 값의 모든 비트를 반전시킵니다. 사실, EOR은 비트마스크를 사용한 NOT으로 생각할 수 있습니다. 한 값의 모든 1 비트는 다른 값의 해당 비트를 반전시키는 효과를 가지며, 0 비트는 아무것도 하지 않습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;white-space:nowrap; border:1px solid; padding:3px; border-color:rgb(162, 169, 177); background-color:rgb(234, 236, 240);&amp;quot; | EOR 진리표&lt;br /&gt;
|-&lt;br /&gt;
! A !! 메모리 !! 결과&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $49 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $45 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $55 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $4D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $5D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $59 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $41 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $51 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#AND|AND]], [[#ORA|ORA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|INC}}&lt;br /&gt;
&lt;br /&gt;
=== INC - 메모리 증가 (Increment Memory) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = 메모리 + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INC는 메모리 위치에 1을 더합니다. 특히, 이 명령어의 어큐뮬레이터 버전은 없으며, 대신 [[#ADC|ADC]] 또는 [[#SBC|SBC]]를 사용해야 합니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
증가는 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $E6 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $F6 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $EE || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $FE || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#DEC|DEC]], [[#ADC|ADC]], [[#SBC|SBC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|INX}}&lt;br /&gt;
=== INX - X 증가 (Increment X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = X + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INX는 X 레지스터에 1을 더합니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $E8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#DEX|DEX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|INY}}&lt;br /&gt;
=== INY - Y 증가 (Increment Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = Y + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
INY는 Y 레지스터에 1을 더합니다. 캐리나 오버플로에 영향을 미치지 &#039;않는다는&#039; 점에 유의하십시오.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $C8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#DEY|DEY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|JMP}}&lt;br /&gt;
=== JMP - 점프 (Jump) ===&lt;br /&gt;
&amp;lt;code&amp;gt;PC = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JMP는 프로그램 카운터를 새로운 값으로 설정하여, 코드가 새로운 위치에서 실행되도록 합니다. 해당 위치에서 반환하려면, 대신 [[#JSR|JSR]]을 사용해야 합니다.&lt;br /&gt;
&lt;br /&gt;
간접 주소 지정 모드는 피연산자를 포인터로 사용하여, 지정된 주소에서 새로운 2바이트 프로그램 카운터 값을 가져옵니다. 불행히도, CPU 버그로 인해 이 2바이트 변수의 주소가 $FF로 끝나 페이지를 교차하게 되면, CPU는 두 번째 바이트를 읽을 때 페이지를 증가시키지 못해 잘못된 주소를 읽게 됩니다. 예를 들어, JMP ($03FF)는 $03FF와 $0400 대신 &#039;&#039;$0300&#039;&#039;을 읽습니다. 이 변수가 페이지를 교차하지 않도록 주의해야 합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute|Absolute]] || $4C || 3 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect|(Indirect)]] || $6C || 3 || 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#JSR|JSR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|JSR}}&lt;br /&gt;
=== JSR - 서브루틴으로 점프 (Jump to Subroutine) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에 PC + 2를 [[#PHA|푸시]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PC = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JSR은 현재 프로그램 카운터를 스택에 푸시한 다음, 프로그램 카운터를 새로운 값으로 설정합니다. 이를 통해 코드는 함수를 호출하고 [[#RTS|RTS]]로 JSR 다음 명령어로 돌아올 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
특히, 스택의 반환 주소는 다음 명령어의 시작 지점이 아니라, 그보다 1바이트 앞을 가리킵니다. 이는 [[#RTS|RTS]]가 다음 명령어를 가져오기 전에 프로그램 카운터를 증가시키기 때문입니다. 이는 인터럽트에 의해 푸시되고 [[#RTI|RTI]]에 의해 사용되는 반환 주소와 다릅니다. 인터럽트의 반환 주소는 다음 명령어를 직접 가리킵니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute|Absolute]] || $20 || 3 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#RTS|RTS]], [[#JMP|JMP]], [[#RTI|RTI]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LDA}}&lt;br /&gt;
=== LDA - A 로드 (Load A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LDA는 메모리 값을 어큐뮬레이터로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $A9 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $A5 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $B5 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $AD || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $BD || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $B9 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $A1 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $B1 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#STA|STA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LDX}}&lt;br /&gt;
=== LDX - X 로드 (Load X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LDX는 메모리 값을 X 레지스터로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $A2 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $A6 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,Y]] || $B6 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $AE || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $BE || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#STX|STX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LDY}}&lt;br /&gt;
=== LDY - Y 로드 (Load Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LDY는 메모리 값을 Y 레지스터로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $A0 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $A4 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $B4 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $AC || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $BC || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#STY|STY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|LSR}}&lt;br /&gt;
=== LSR - 논리적 오른쪽 시프트 (Logical Shift Right) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 값 &amp;gt;&amp;gt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; 0 -&amp;gt; [76543210] -&amp;gt; C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
LSR은 메모리 값 또는 어큐뮬레이터의 모든 비트를 오른쪽으로 한 자리씩 시프트하여, 각 비트의 값을 다음 비트로 이동시킵니다. 0이 비트 7로 시프트되고, 비트 0은 캐리 플래그로 시프트됩니다. 이는 부호 없는 값을 2로 나누고 내림하는 것과 같으며, 나머지는 캐리에 저장됩니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 0&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $4A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $46 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $56 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $4E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $5E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ASL|ASL]], [[#ROL|ROL]], [[#ROR|ROR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|NOP}}&lt;br /&gt;
&lt;br /&gt;
=== NOP - 아무 작업 안 함 (No Operation) ===&lt;br /&gt;
&lt;br /&gt;
NOP는 아무 효과가 없습니다. 단지 공간과 CPU 사이클을 낭비할 뿐입니다. 이 명령어는 원하는 시간만큼 지연시키기 위한 시간 코드 작성, 페이지 교차 여부를 보장하기 위한 패딩, 또는 바이너리에서 코드를 비활성화할 때 유용할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $EA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ORA}}&lt;br /&gt;
=== ORA - 비트 단위 OR (Bitwise OR) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A | 메모리&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ORA는 메모리 값과 어큐뮬레이터를 비트 단위로 포괄적 OR(inclusive-OR) 연산합니다. 입력 비트 중 하나라도 1이면 결과 비트는 1이 되고, 그렇지 않으면 0이 됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;mw-collapsible mw-collapsed wikitable&amp;quot;&lt;br /&gt;
|+ style=&amp;quot;white-space:nowrap; border:1px solid; padding:3px; border-color:rgb(162, 169, 177); background-color:rgb(234, 236, 240);&amp;quot; | OR 진리표&lt;br /&gt;
|-&lt;br /&gt;
! A !! 메모리 !! 결과&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0 || 0&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 1 || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $09 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $05 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $15 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $0D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $1D || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $19 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $01 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $11 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#AND|AND]], [[#EOR|EOR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PHA}}&lt;br /&gt;
=== PHA - A 푸시 (Push A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;($0100 + SP) = A&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PHA는 A의 값을 현재 스택 위치에 저장한 다음 스택 포인터를 감소시킵니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $48 || 1 || 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PLA|PLA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PHP}}&lt;br /&gt;
=== PHP - 프로세서 상태 푸시 (Push Processor Status) ===&lt;br /&gt;
&amp;lt;code&amp;gt;($0100 + SP) = NV11DIZC&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP - 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PHP는 6개의 상태 플래그와 B 플래그를 포함하는 바이트를 스택에 저장한 다음 스택 포인터를 감소시킵니다. B 플래그와 추가 비트는 모두 1로 푸시됩니다. 비트 순서는 NV1BDIZC (높은 쪽에서 낮은 쪽으로)입니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#B|B - 브레이크]] || 1로 푸시됨 || 이 플래그는 CPU의 실제 상태가 아닌, 스택에 푸시된 플래그 바이트에만 존재합니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $08 || 1 || 3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PLP|PLP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PLA}}&lt;br /&gt;
=== PLA - A 풀 (Pull A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP + 1&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;A = ($0100 + SP)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLA는 스택 포인터를 증가시킨 다음 해당 스택 위치의 값을 A로 로드합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $68 || 1 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PHA|PHA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|PLP}}&lt;br /&gt;
=== PLP - 프로세서 상태 풀 (Pull Processor Status) ===&lt;br /&gt;
&amp;lt;code&amp;gt;SP = SP + 1&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NVxxDIZC = ($0100 + SP)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
PLP는 스택 포인터를 증가시킨 다음 해당 스택 위치의 값을 6개의 상태 플래그로 로드합니다. 비트 순서는 NVxxDIZC (높은 쪽에서 낮은 쪽으로)입니다. B 플래그와 추가 비트는 무시됩니다. I 변경의 효과는 한 명령어 지연됩니다. 왜냐하면 플래그는 IRQ가 폴링된 후에 변경되어, [[#CLI|CLI]] 및 [[#SEI|SEI]]와 같이 다음 명령어에서 IRQ가 폴링될 때까지 효과가 지연되기 때문입니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 결과의 비트 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과의 비트 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 결과의 비트 2 || 이 플래그 변경의 효과는 1 명령어 지연됩니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 결과의 비트 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 결과의 비트 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $28 || 1 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#PHP|PHP]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ROL}}&lt;br /&gt;
=== ROL - 왼쪽으로 회전 (Rotate Left) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 캐리를 통해 값 &amp;lt;&amp;lt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; C &amp;lt;- [76543210] &amp;lt;- C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROL은 메모리 값 또는 어큐뮬레이터를 왼쪽으로 시프트하여, 각 비트의 값을 다음 비트로 이동시키고 캐리 플래그를 비트 7 위와 비트 0 아래에 모두 있는 것처럼 취급합니다. 구체적으로, 캐리의 값은 비트 0으로 시프트되고, 비트 7은 캐리로 시프트됩니다. 왼쪽으로 9번 회전하면 값과 캐리가 원래 상태로 돌아옵니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 7&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $2A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $26 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $36 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $2E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $3E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ROR|ROR]], [[#ASL|ASL]], [[#LSR|LSR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|ROR}}&lt;br /&gt;
=== ROR - 오른쪽으로 회전 (Rotate Right) ===&lt;br /&gt;
&amp;lt;code&amp;gt;값 = 캐리를 통해 값 &amp;gt;&amp;gt; 1&amp;lt;/code&amp;gt;, 또는 시각적으로: &amp;lt;code&amp;gt; C -&amp;gt; [76543210] -&amp;gt; C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ROR은 메모리 값 또는 어큐뮬레이터를 오른쪽으로 시프트하여, 각 비트의 값을 다음 비트로 이동시키고 캐리 플래그를 비트 7 위와 비트 0 아래에 모두 있는 것처럼 취급합니다. 구체적으로, 캐리의 값은 비트 7로 시프트되고, 비트 0은 캐리로 시프트됩니다. 오른쪽으로 9번 회전하면 값과 캐리가 원래 상태로 돌아옵니다.&lt;br /&gt;
&lt;br /&gt;
이것은 읽기-수정-쓰기(read-modify-write) 명령어입니다. 즉, 메모리에서 작동하는 주소 지정 모드는 수정된 값을 쓰기 전에 원래 값을 먼저 메모리에 다시 씁니다. 이 추가적인 쓰기는 하드웨어 레지스터를 대상으로 할 때 중요할 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 값의 비트 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Accumulator|Accumulator]] || $6A || 1 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_rmw|Zero Page]] || $66 || 2 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_rmw|Zero Page,X]] || $76 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_rmw|Absolute]] || $6E || 3 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_rmw|Absolute,X]] || $7E || 3 || 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ROL|ROL]], [[#ASL|ASL]], [[#LSR|LSR]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|RTI}}&lt;br /&gt;
=== RTI - 인터럽트에서 복귀 (Return from Interrupt) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에서 NVxxDIZC 플래그를 [[#PLA|풀]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;스택에서 PC를 [[#PLA|풀]]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RTI는 인터럽트 핸들러에서 복귀하며, 먼저 스택에서 6개의 상태 플래그를 풀(pull)한 다음 새로운 프로그램 카운터를 풀합니다. 플래그 풀링은 [[#PLP|PLP]]처럼 동작하지만, 인터럽트 비활성화 플래그의 변경 사항이 1 명령어 지연되지 않고 즉시 적용된다는 점이 다릅니다. 이는 플래그가 명령어에 대한 IRQ가 폴링된 후가 아니라 전에 변경되기 때문입니다. PC 풀링은 [[#RTS|RTS]]처럼 동작하지만, 반환 주소가 1바이트 전이 아닌 다음 명령어의 정확한 주소라는 점이 다릅니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 풀링된 플래그의 비트 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 풀링된 플래그의 비트 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 풀링된 플래그의 비트 2 || 이 플래그 변경의 효과는 지연되지 &#039;않습니다&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 풀링된 플래그의 비트 3 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || 풀링된 플래그의 비트 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 풀링된 플래그의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $40 || 1 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#BRK|BRK]], [[#PLP|PLP]], [[#RTS|RTS]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|RTS}}&lt;br /&gt;
=== RTS - 서브루틴에서 복귀 (Return from Subroutine) ===&lt;br /&gt;
&amp;lt;code&amp;gt;스택에서 PC를 [[#PLA|풀]]&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;PC = PC + 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RTS는 스택에서 주소를 프로그램 카운터로 풀(pull)한 다음 프로그램 카운터를 증가시킵니다. 이는 보통 함수 끝에서 함수를 호출한 [[#JSR|JSR]] 다음 명령어로 돌아가기 위해 사용됩니다. 그러나 RTS는 점프 테이블을 구현하는 데 사용되기도 합니다([[Jump table]] 및 [[RTS Trick]] 참조).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $60 || 1 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#JSR|JSR]], [[#PLA|PLA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SBC}}&lt;br /&gt;
=== SBC - 캐리와 함께 빼기 (Subtract with Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = A - 메모리 - ~C&amp;lt;/code&amp;gt;, 또는 동등하게: &amp;lt;code&amp;gt;A = A + ~메모리 + C&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SBC는 메모리 값과 캐리의 비트 단위 NOT을 어큐뮬레이터에서 뺍니다. 이는 메모리 값의 비트 단위 NOT을 [[#ADC|ADC]]를 사용하여 &#039;&#039;더하는&#039;&#039; 방식으로 수행됩니다. 이 구현 세부 사항은 캐리의 역방향 특성을 설명합니다. SBC는 캐리가 설정되었을 때가 아니라 &#039;&#039;클리어&#039;&#039;되었을 때 1을 더 빼고, 언더플로가 발생하면 캐리가 클리어되고 그렇지 않으면 설정됩니다. [[#ADC|ADC]]와 마찬가지로, 캐리는 한 뺄셈의 빌림(borrow)을 다음 뺄셈으로 넘겨주어 1바이트보다 큰 값의 뺄셈을 가능하게 합니다. 첫 바이트를 빼기 전에 [[#SEC|SEC]]로 캐리를 설정하여 알려진 상태로 만들어, 1만큼의 오차를 피하는 것이 일반적입니다.&lt;br /&gt;
&lt;br /&gt;
오버플로는 [[#ADC|ADC]]와 동일하게 작동하지만, 메모리 값이 반전됩니다. 따라서 결과의 부호가 A의 부호와 다르고 메모리 값의 부호와 같으면 오버플로 또는 언더플로가 발생합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || ~(결과 &amp;lt; $00) || 결과가 $00 미만으로 언더플로(랩어라운드)되면, 부호 없는 언더플로가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#V|V - 오버플로]] || (결과 ^ A) &amp;amp; (결과 ^ ~메모리) &amp;amp; $80 || 결과의 부호가 A의 부호와 다르고 메모리의 부호와 같으면, 부호 있는 오버플로(또는 언더플로)가 발생한 것입니다.&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Immediate|#Immediate]] || $E9 || 2 || 2&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_read|Zero Page]] || $E5 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_read|Zero Page,X]] || $F5 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_read|Absolute]] || $ED || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,X]] || $FD || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_read|Absolute,Y]] || $F9 || 3 || 4 (페이지 교차 시 5)&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_read|(Indirect,X)]] || $E1 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_read|(Indirect),Y]] || $F1 || 2 || 5 (페이지 교차 시 6)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#ADC|ADC]], [[#SEC|SEC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SEC}}&lt;br /&gt;
=== SEC - 캐리 설정 (Set Carry) ===&lt;br /&gt;
&amp;lt;code&amp;gt;C = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SEC는 캐리 플래그를 설정합니다. 특히, 이는 보통 [[#SBC|SBC]]로 값의 하위 바이트를 빼기 전에 추가적인 1이 빼지는 것을 방지하기 위해 수행됩니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#C|C - 캐리]] || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $38 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CLC|CLC]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SED}}&lt;br /&gt;
=== SED - 데시멀 설정 (Set Decimal) ===&lt;br /&gt;
&amp;lt;code&amp;gt;D = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SED는 데시멀 플래그를 설정합니다. 데시멀 플래그는 보통 [[BCD]] 모드가 활성화되는지를 제어한다. BCD 모드는 [[NES]]의 [[2A03]] CPU에서는 사용할 수 없지만 플래그 자체는 여전히 작동하며 상태를 저장하는 데 사용될 수 있다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#D|D - 데시멀]] || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $F8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CLD|CLD]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|SEI}}&lt;br /&gt;
=== SEI - 인터럽트 비활성화 설정 (Set Interrupt Disable) ===&lt;br /&gt;
&amp;lt;code&amp;gt;I = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SEI는 인터럽트 비활성화 플래그를 설정하여, CPU가 하드웨어 IRQ를 처리하지 못하게 합니다. 이 플래그 변경의 효과는 한 명령어 지연됩니다. 왜냐하면 플래그는 IRQ가 폴링된 후에 변경되어, 이전에 플래그가 0이었다면 이 명령어와 다음 명령어 사이에 IRQ가 서비스될 수 있기 때문입니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값 !! 비고&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#I|I - 인터럽트 비활성화]] || 1 || 이 플래그 변경의 효과는 1 명령어 지연됩니다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $78 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#CLI|CLI]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|STA}}&lt;br /&gt;
=== STA - A 저장 (Store A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
STA는 어큐뮬레이터 값을 메모리에 저장합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_write|Zero Page]] || $85 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_write|Zero Page,X]] || $95 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_write|Absolute]] || $8D || 3 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_write|Absolute,X]] || $9D || 3 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_indexed_write|Absolute,Y]] || $99 || 3 || 5&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_x_write|(Indirect,X)]] || $81 || 2 || 6&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Indirect_y_write|(Indirect),Y]] || $91 || 2 || 6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LDA|LDA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|STX}}&lt;br /&gt;
=== STX - X 저장 (Store X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
STX는 X 레지스터 값을 메모리에 저장합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_write|Zero Page]] || $86 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_write|Zero Page,Y]] || $96 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_write|Absolute]] || $8E || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LDX|LDX]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|STY}}&lt;br /&gt;
=== STY - Y 저장 (Store Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;메모리 = Y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
STY는 Y 레지스터 값을 메모리에 저장합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_write|Zero Page]] || $84 || 2 || 3&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Zero_page_indexed_write|Zero Page,X]] || $94 || 2 || 4&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Absolute_write|Absolute]] || $8C || 3 || 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#LDY|LDY]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TAX}}&lt;br /&gt;
=== TAX - A를 X로 전송 (Transfer A to X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TAX는 어큐뮬레이터 값을 X 레지스터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $AA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TXA|TXA]], [[#TAY|TAY]], [[#TYA|TYA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TAY}}&lt;br /&gt;
=== TAY - A를 Y로 전송 (Transfer A to Y) ===&lt;br /&gt;
&amp;lt;code&amp;gt;Y = A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TAY는 어큐뮬레이터 값을 Y 레지스터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $A8 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TYA|TYA]], [[#TAX|TAX]], [[#TXA|TXA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TSX}}&lt;br /&gt;
=== TSX - 스택 포인터를 X로 전송 (Transfer Stack Pointer to X) ===&lt;br /&gt;
&amp;lt;code&amp;gt;X = SP&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TSX는 스택 포인터 값을 X 레지스터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $BA || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TXS|TXS]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TXA}}&lt;br /&gt;
=== TXA - X를 A로 전송 (Transfer X to A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TXA는 X 레지스터 값을 어큐뮬레이터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $8A || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TAX|TAX]], [[#TAY|TAY]], [[#TYA|TYA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TXS}}&lt;br /&gt;
=== TXS - X를 스택 포인터로 전송 (Transfer X to Stack Pointer) ===&lt;br /&gt;
&amp;lt;code&amp;gt;SP = X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TXS는 X 레지스터 값을 스택 포인터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $9A || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TXS|TXS]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|TYA}}&lt;br /&gt;
=== TYA - Y를 A로 전송 (Transfer Y to A) ===&lt;br /&gt;
&amp;lt;code&amp;gt;A = Y&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TYA는 Y 레지스터 값을 어큐뮬레이터로 복사합니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 플래그 !! 새로운 값&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#Z|Z - 제로]] || 결과 == 0&lt;br /&gt;
|-&lt;br /&gt;
| [[Status_flags#N|N - 네거티브]] || 결과의 비트 7&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 주소 지정 모드 !! 옵코드 !! 바이트 !! 사이클&lt;br /&gt;
|-&lt;br /&gt;
| [[Addressing_modes#Implied|Implied]] || $98 || 1 || 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
참조: [[#TAY|TAY]], [[#TAX|TAX]], [[#TXA|TXA]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
{{Anchor|footnote}}&lt;br /&gt;
=== 비고 ===&lt;br /&gt;
상대 주소 지정 모드(Relative addressing)에 대해, https://www.nesdev.org/6502_cpu.txt 문서는 분기 명령어가 5개의 가능한 사이클을 갖는 것으로 나타내지만, 이 페이지에 언급된 2-4 사이클이 정확합니다.&lt;br /&gt;
&lt;br /&gt;
        1     PC      R  옵코드 가져오기, PC 증가&lt;br /&gt;
        2     PC      R  피연산자 가져오기, PC 증가&lt;br /&gt;
        3     PC      R  다음 명령어의 옵코드 가져오기,&lt;br /&gt;
                         분기가 발생하면, 피연산자를 PCL에 더함.&lt;br /&gt;
                         그렇지 않으면 PC 증가.&lt;br /&gt;
        4+    PC*     R  다음 명령어의 옵코드 가져오기.&lt;br /&gt;
                         PCH 수정. 변경되지 않았다면 PC 증가.&lt;br /&gt;
        5!    PC      R  다음 명령어의 옵코드 가져오기,&lt;br /&gt;
                         PC 증가.&lt;br /&gt;
&lt;br /&gt;
이 노트들은 문서에서 사이클이 표현되는 방식을 명확히 하는 데 도움이 됩니다:&lt;br /&gt;
* 분기가 발생하지 않으면, 여기에 표시된 사이클 3은 실제로는 다음 명령어의 사이클 1입니다 (분기 명령어는 2 사이클 후에 종료됨).&lt;br /&gt;
* 분기가 발생하고 페이지 경계를 넘지 않으면, 여기에 표시된 사이클 4는 다음 명령어의 사이클 1입니다 (분기 명령어는 3 사이클 후에 종료됨).&lt;br /&gt;
* 페이지 경계가 교차되면, 여기에 표시된 사이클 5는 다음 명령어의 사이클 1입니다 (분기 명령어는 4 사이클 후에 종료됨).&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%EB%AF%B8%EB%9F%AC%EB%A7%81&amp;diff=160</id>
		<title>미러링</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%EB%AF%B8%EB%9F%AC%EB%A7%81&amp;diff=160"/>
		<updated>2025-10-01T04:31:24Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NES }}&lt;br /&gt;
{{ NesDev발췌 | 원글링크 = https://www.nesdev.org/wiki/Mirroring }}&lt;br /&gt;
NES에는 두 가지 유형의 &#039;&#039;&#039;미러링&#039;&#039;&#039;이 있다:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[#메모리 미러링|메모리 미러링]]&#039;&#039;&#039;은 동일한 메모리가 여러 주소에서 접근될 수 있을 때 발생하며, 명백한 중복을 야기한다.&lt;br /&gt;
* &#039;&#039;&#039;[[#네임테이블 미러링|네임테이블 미러링]]&#039;&#039;&#039;은 NES의 2x2 [[#네임테이블 미러링|배경 네임테이블]] 그래픽의 레이아웃을 설명하며, 일반적으로 미러링된 메모리에 의해 달성된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 메모리 미러링 ==&lt;br /&gt;
&lt;br /&gt;
메모리 미러링은 메모리 또는 I/O 레지스터가 둘 이상의 주소 범위에 나타나는 것을 말하며, 동일한 바이트가 둘 이상의 주소에서 접근 가능하다.&lt;br /&gt;
이것은 전체 주소가 완전히 &#039;&#039;디코딩&#039;&#039;되지 않았을 때, 즉 칩이 하나 이상의 주소 라인을 무시할 때 발생한다.&lt;br /&gt;
주소를 완전히 디코딩하는 것은 일반적으로 칩에 훨씬 더 많은 핀을 필요로 하기 때문에, 불완전한 디코딩은 필요한 하드웨어를 줄이기 위해 사용된다. 미러가 그렇지 않으면 사용되지 않는 주소 공간을 차지하는 경우, 아무런 문제가 되지 않는다.&lt;br /&gt;
&lt;br /&gt;
NES 내에서는 많은 것들이 미러링된다:&lt;br /&gt;
* $0000-$07FF의 시스템 메모리는 $0800-$0FFF, $1000-$17FF, $1800-$1FFF에서 미러링된다 - 예를 들어 $0173에서 메모리에 접근하려고 시도하는 것은 $0973, $1173, 또는 $1973에서 메모리에 접근하는 것과 같다.&lt;br /&gt;
* $2000-$2007의 PPU I/O 레지스터는 $2008-$200F, $2010-$2017, $2018-$201F 등 $3FF8-$3FFF까지 미러링된다.&lt;br /&gt;
* 대부분의 [[:Category:Discrete logic mappers|단순한 매퍼]]에 있는 단일 레지스터는 $8000-$FFFF 전체에 걸쳐 미러링된다.&lt;br /&gt;
* 많은 일반적인 ASIC 매퍼(예: MMC1 및 MMC3)의 레지스터도 $8000-$FFFF 전체에 걸쳐 그룹으로 미러링된다.&lt;br /&gt;
* 아래에 설명된 네임테이블 미러링은 PPU $2000-$2FFF 내의 메모리 미러링으로 인해 발생한다(따라서 그 이름이 붙여졌다). 그러나 이 경우 메모리 미러링은 의도적이고 필요하다.&lt;br /&gt;
* [[NROM]]-128에서는 16k PRG ROM이 $8000-$BFFF와 $C000-$FFFF 모두에 미러링된다.&lt;br /&gt;
* 대부분의 [[mapper]]에서 PRG 또는 CHR ROM의 끝을 지난 뱅크는 이전 뱅크의 미러로 나타난다. 예를 들어, [[UNROM]] PRG 뱅크 8-15는 각각 뱅크 0-7의 복사본이다. [[Non-power-of-two ROM size]]는 더 복잡한 미러링을 의미할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 네임테이블 미러링 ==&lt;br /&gt;
&lt;br /&gt;
네임테이블 미러링은 현재 네임테이블의 오른쪽 및 아래쪽 가장자리를 지나 표시되는 내용에 영향을 미친다. 특정 축(수평 및/또는 수직)에 대해 미러링이 활성화되면 좌표는 현재 네임테이블에서 단순히 래핑된다. 이런 식으로 &amp;quot;미러링된&amp;quot; 배경은 뒤집히지 않고 &#039;&#039;반복&#039;&#039;된다. 미러링이 비활성화되면 두 번째 네임테이블이 사용된다. 미러링에는 네 가지 일반적인 조합이 있다:&lt;br /&gt;
&lt;br /&gt;
=== 수평 ===&lt;br /&gt;
[[File:Horizontal mirroring diagram.png|right]]&lt;br /&gt;
&lt;br /&gt;
네임테이블의 &#039;&#039;&#039;수직 배열&#039;&#039;&#039;은 &#039;&#039;&#039;수평 미러링&#039;&#039;&#039;을 초래하며, 이는 &#039;&#039;&#039;32x60 타일맵&#039;&#039;&#039;을 만든다.&lt;br /&gt;
&lt;br /&gt;
이것은 수직으로만 또는 모든 방향으로 스크롤하는 게임에 가장 일반적으로 사용된다.&lt;br /&gt;
&lt;br /&gt;
수평 미러링을 사용하여 수평 스크롤을 하는 것은 부드럽게 하기가 어렵다. 왜냐하면 화면 오른쪽의 데이터가 미러링으로 인해 즉시 왼쪽에 표시되기 때문이다. 하드웨어 왼쪽 화면 클리핑을 영리하게 사용하면 모든 네임테이블 결함을 숨길 수 있지만, 속성 테이블의 해상도가 2x2 타일이기 때문에 화면의 왼쪽 및/또는 오른쪽에 항상 속성 결함이 있을 것이다. 그것을 숨기는 가장 좋은 방법은 양쪽에 잠재적으로 잘못된 속성을 가진 4개의 픽셀을 두는 것이지만, 대부분의 상용 게임은 보통 8개 또는 그 이상의 결함 픽셀을 가지고 있어 그보다 더 나빴다. 그래서 많은 NES 게임이 화면 경계에 색상 결함을 가지고 있는 것이다.&lt;br /&gt;
&lt;br /&gt;
일부 텔레비전은 왼쪽과 오른쪽 경계 모두에서 최대 8픽셀까지 [[overscan]]하지만 대부분은 그렇지 않다. 완벽주의 프로그래머는 &#039;&#039;Alfred Chicken&#039;&#039; 게임에서처럼 속성 결함을 숨기고 화면을 대칭적으로 보이게 하고 모든 속성 결함을 절대적으로 숨기기 위해 오른쪽 경계에 단색 검은색 스프라이트를 사용할 수 있었지만, 스캔라인당 스프라이트 수를 7개로 줄이고 많은 [[PPU OAM|OAM]] 공간(8x16 픽셀 스프라이트 모드에서 약 1/4)을 낭비하기 때문에 이렇게 하는 게임은 거의 없다.&lt;br /&gt;
&lt;br /&gt;
카트리지 보드를 수평 미러링으로 구성하려면 PPU A11을 CIRAM A10에 연결하라.&lt;br /&gt;
닌텐도에서 만든 카트리지 보드에서는 &amp;quot;V&amp;quot; 솔더 패드(&amp;quot;수직 배열&amp;quot;용)를 단락시켜 선택한다.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 수직 ===&lt;br /&gt;
[[File:Vertical mirroring diagram.png|right]]&lt;br /&gt;
네임테이블의 &#039;&#039;&#039;수평 배열&#039;&#039;&#039;은 &#039;&#039;&#039;수직 미러링&#039;&#039;&#039;을 초래하며, 이는 &#039;&#039;&#039;64x30 타일맵&#039;&#039;&#039;을 만든다.&lt;br /&gt;
&lt;br /&gt;
이것은 수평으로만 스크롤하는 게임에 가장 일반적으로 사용된다. 수직으로 스크롤하고(어떤 양으로든 상태 표시줄 없이) 한 화면 이상 수평으로 스크롤하지 않는 게임은 이 미러링을 사용한다(예: Lode Runner, Bomberman, Fire Emblem, Crystal Mines). 그러면 수평으로 스크롤할 때 아무것도 로드할 필요가 없다.&lt;br /&gt;
&lt;br /&gt;
물론 상태 표시줄 없이 양방향으로 스크롤하는 게임에도 사용된다. 화면 상단/하단에 있는 데이터가 즉시 다른 쪽에 나타나기 때문에, NTSC [[overscan]]을 영리하게 사용하면 결함 없는 다방향 스크롤을 만들 수 있지만, PAL 텔레비전(그리고 오버스캔 범위가 약간 벗어난 NTSC 텔레비전)에서는 결함이 나타날 것이다. 결함을 숨기는 가장 좋은 방법은 양쪽에 잘못된 타일을 가진 4개의 픽셀과 잘못된 색상을 가진 4개의 추가 픽셀을 만드는 것이지만, 대부분의 상용 게임은 이보다 훨씬 더 나빴다. 그래서 오버스캔이 비활성화되면 그렇게 나쁘게 보이는 것이다.&lt;br /&gt;
&lt;br /&gt;
완벽주의 프로그래머는 &#039;&#039;Jurassic Park&#039;&#039; 및 &#039;&#039;M.C. Kids&#039;&#039; 게임에서처럼 결함을 숨기기 위해(그리고 아마도 VRAM을 업데이트하기 위해 더 많은 블랭킹 시간을 제공하기 위해) 래스터 분할을 사용할 수 있었지만, 작은 이점을 위해 코드를 많이 복잡하게 만들기 때문에 거의 수행되지 않았다.&lt;br /&gt;
&lt;br /&gt;
카트리지 보드를 수직 미러링으로 구성하려면 PPU A10을 CIRAM A10에 연결하라.&lt;br /&gt;
닌텐도에서 만든 카트리지 보드에서는 &amp;quot;H&amp;quot; 솔더 패드(&amp;quot;수평 배열&amp;quot;용)를 단락시켜 선택한다.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 단일 화면 ===&lt;br /&gt;
[[File:Single screen mirroring diagram overlaid.png|right]]&lt;br /&gt;
&lt;br /&gt;
단일 화면 미러링은 [[AxROM]], [[SxROM]], [[TLSROM]] 보드와 같은 특정 매퍼에서만 사용할 수 있으며, &#039;&#039;&#039;두 개의 32x30 타일맵&#039;&#039;&#039;을 생성한다.&lt;br /&gt;
&lt;br /&gt;
주요 장점은 화면 상단이나 하단에 상태 표시줄을 사용하면서 플레이 필드를 모든 방향으로 동일하게 확장할 수 있다는 것이다. 이는 상태 표시줄을 하나의 네임테이블에 저장하고, 다른 네임테이블에서 플레이 필드를 렌더링하고, 렌더링 중 적절한 화면 위치에서 미러링(및 스크롤 매개변수)을 전환하여 수행할 수 있다.&lt;br /&gt;
&lt;br /&gt;
1화면 미러링을 사용할 때 대폭 단순화될 수 있는 다른 많은 것들도 있다. 화면에 업데이트할 데이터의 PPU 주소를 계산하는 데 사용되는 공식도 훨씬 간단하며, 상태 표시줄의 크기가 가변적이거나 스크롤되는 경우 1화면 미러링 없이는 이 모든 것이 골칫거리가 될 것이다.&lt;br /&gt;
&lt;br /&gt;
이 미러링을 수평으로 스크롤하는 데 사용하면 수평 미러링과 유사한 결함 및 스크롤 문제가 발생한다. 그러나 상태 표시줄이 있는 한, 화면 하단(또는 상단)에서 떨어지는 데이터가 오버스캔 요인에 관계없이 상태 표시줄에 의해 &amp;quot;숨겨진&amp;quot; 영역으로 들어오기 때문에 수직으로는 결함이 발생하지 않는다.&lt;br /&gt;
&lt;br /&gt;
카트리지 보드를 단일 화면 미러링으로 구성하는 방법에는 여러 가지가 있다. 일부 보드에는 MMC1 및 AxROM과 같이 매퍼 제어되는 단일 화면 미러링이 있다. AxROM의 경우 레지스터(예: [[74HC161]])의 출력을 CIRAM A10에 연결한다(AxROM은 PRG D4를 래치함). 소프트웨어로 변경할 수 없는 고정된 단일 화면 미러링을 만드는 더 간단한 방법은 CIRAM A10을 Gnd 또는 Vcc에 간단히 연결하는 것이다.&lt;br /&gt;
[[iNES Mapper 218]]을 구현하는 보드는 CIRAM A10을 PPU A10, A11, A12 또는 A13에 연결하여 게임이 카트리지에 CHR ROM이나 CHR RAM 없이 CIRAM에 타일을 저장할 수 있도록 한다.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4화면 ===&lt;br /&gt;
[[File:Four nametables diagram.png|right]]&lt;br /&gt;
카트리지에 추가 RAM 및/또는 PPU 주소 매핑이 있으면 PPU 버스를 통해 4개의 고유한 네임테이블을 주소 지정할 수 있으며, &#039;&#039;&#039;64x60 타일맵&#039;&#039;&#039;을 생성하여 보다 유연한 화면 레이아웃을 허용한다. 이 미러링 부족을 활용한 게임은 거의 없다.&lt;br /&gt;
&lt;br /&gt;
4화면 RAM 네임테이블을 사용하는 것으로 알려진 게임:&lt;br /&gt;
* &#039;&#039;Rad Racer II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Gauntlet&#039;&#039;&lt;br /&gt;
* &#039;&#039;Napoleon Senki&#039;&#039;&lt;br /&gt;
* &#039;&#039;Rocman X (Sachen)&#039;&#039;&lt;br /&gt;
* 모든 [[Vs. System]] 게임&lt;br /&gt;
&lt;br /&gt;
[[:Category:Mappers with ROM nametables|ROM 네임테이블]]과 함께 4화면을 사용하는 예제 게임:&lt;br /&gt;
* &#039;&#039;Final Lap&#039;&#039;&lt;br /&gt;
* &#039;&#039;King of Kings&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4화면 네임테이블과 함께 사용되는 것으로 알려진 매퍼:&lt;br /&gt;
* [[MMC3]] (&#039;&#039;Rad Racer II&#039;&#039;).&lt;br /&gt;
* [[iNES Mapper 206|iNES 206]]은 MMC3 기능의 하위 집합을 구현하며 4화면 RAM을 사용할 수 있다(&#039;&#039;Gauntlet&#039;&#039;).&lt;br /&gt;
* [[iNES Mapper 077|iNES 77]]은 PPU 메모리 공간 전체에 RAM을 매핑하여 내부 VRAM과 결합하여 4개의 RAM 네임테이블과 패턴 테이블용 CHR-RAM 및 ROM 조합을 제공한다(&#039;&#039;Napoleon Senki&#039;&#039;).&lt;br /&gt;
* [[Vs. System]]은 NES보다 두 배 많은 VRAM을 가지고 있어 영구적인 4화면 설정을 제공한다. 이것은 [[iNES Mapper 099|iNES 99]]로 가장 잘 보이지만, [[Vs. System#See also|여러 다른 매퍼]]도 이 하드웨어에서 사용되었다.&lt;br /&gt;
* [[Namco 163]]은 1k CHR-ROM 페이지를 4개의 네임테이블 화면에 임의로 매핑할 수 있다(&#039;&#039;Final Lap&#039;&#039;, &#039;&#039;King of Kings&#039;&#039;).&lt;br /&gt;
* [[JY Company]] 매퍼는 1k CHR-ROM 페이지를 4개의 네임테이블 화면에 임의로 매핑할 수 있다.&lt;br /&gt;
* [[UNROM 512]] 및 [[GTROM]]은 4화면 구성의 홈브루 매퍼이다.&lt;br /&gt;
&lt;br /&gt;
일반적이지 않은 4화면 레이아웃이 가능한 다른 매퍼:&lt;br /&gt;
* [[VRC6]]은 1k CHR-ROM 페이지를 4개의 네임테이블 화면에 임의로 매핑할 수 있다.&lt;br /&gt;
* [[MMC5]]는 내부 RAM을 사용하여 세 번째 네임테이블을 만들고, 네 번째 네임테이블에 대한 빈 데이터 페이지를 절차적으로 생성하여 (간신히) 4개의 다른 화면을 한 번에 매핑할 수 있다.&lt;br /&gt;
&lt;br /&gt;
[[iNES]] 형식은 헤더에 4개의 네임테이블을 지정할 수 있어, 이와 구조적으로 충돌하지 않는 모든 매퍼에 4화면 RAM 네임테이블을 적용할 수 있다(에뮬레이터에서 지원하는 경우).&lt;br /&gt;
&lt;br /&gt;
카트리지 보드에 추가 네임테이블 RAM을 구현하는 방법에는 여러 가지가 있다:&lt;br /&gt;
* 보드에 2KiB의 RAM을 추가하고 콘솔에 이미 있는 CIRAM과 디코더 칩으로 결합하여 $2000-$2FFF에서 선형으로 접근 가능한 4k 블록의 RAM을 만든다.&lt;br /&gt;
* 보드에 [[6264 static RAM|6264]] 8KiB RAM을 추가하여 콘솔에 있는 CIRAM을 교체한다. 이것은 CIRAM 칩 전체, 즉 $3000-$3EFF에 있는 (일반적으로 사용되지 않는) 4KB의 추가 메모리를 효과적으로 &amp;quot;낭비&amp;quot;한다. 그러나 이것은 더 간단한 단일 칩 솔루션으로 이어진다(또한 오늘날 8KiB RAM 칩은 2KiB 칩보다 더 일반적이고 저렴하다).&lt;br /&gt;
* 보드에 더 큰 RAM을 추가하고 전체 PPU 주소 공간에 매핑한다. 이를 통해 동일한 RAM 칩을 공유하는 $0000-$1FFF의 8KiB 패턴 테이블과 $2000-$2FFF의 4KiB 네임테이블을 사용할 수 있다.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 기타 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Diagonal mirroring diagram.png|대각선&lt;br /&gt;
File:L-shaped mirroring diagram.png|L자형&lt;br /&gt;
File:ACBC mirroring diagram.png|3화면 수직&lt;br /&gt;
File:ABCC mirroring diagram.png|3화면 수평&lt;br /&gt;
File:ABBC mirroring diagram.png|3화면 대각선&lt;br /&gt;
File:Single screen 2000 mirroring diagram.png|1화면 고정&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[iNES Mapper 119|TxSROM]] 변형의 MMC3, [[MMC5]]에서 사용할 수 있는 확장 기술, [[Namco 163]]에 의한 임의의 VRAM 미러링 배열, 또는 [[:Category:Mappers with ROM nametables|ROM 네임테이블]]을 허용하는 매퍼를 사용하는 ROM 미러링 배열과 같은 다른 보드에서는 다른 일반적이지 않은 유형의 미러링을 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;대각선 미러링&#039;&#039;&#039; (CIRAM A10 = PA11 XOR PA10)은 수평 및 수직 미러링 사이를 전환할 필요 없이 스크롤 방향 변경을 용이하게 한다.&lt;br /&gt;
&lt;br /&gt;
Sachen의 [[INES Mapper 243|374N]] 및 [[Sachen 8259|8259 제품군]]에서 볼 수 있는 &#039;&#039;&#039;L자형 미러링&#039;&#039;&#039; (CIRAM A10 = PA11 OR PA10)은 스크롤이 화면 경계에서만 방향을 변경하는 한 네 방향으로 스크롤할 수 있다.&lt;br /&gt;
&lt;br /&gt;
특이한 경우:&lt;br /&gt;
* &#039;&#039;Castlevania 3&#039;&#039;는 [[MMC5]]에서 사용할 수 있는 세 번째 네임테이블 RAM을 사용한다 ([[:Image:Castlevania III 3-Screen Mirroring.png|그림]])&lt;br /&gt;
* &#039;&#039;Laser Invasion&#039;&#039;은 [[MMC5]]에서 사용할 수 있는 세 번째 네임테이블 RAM을 사용한다&lt;br /&gt;
* &#039;&#039;After Burner&#039;&#039;는 [[iNES Mapper 068|Sunsoft-4]] (iNES 68)에서 사용할 수 있는 ROM 네임테이블을 사용하지만 1/H/V 배열만 지원한다.&lt;br /&gt;
* &#039;&#039;Mighty Morphin Power Rangers III, IV (JY Company)&#039;&#039;는 3화면 수평 구성으로 ROM 네임테이블을 사용하지만 하단 화면은 표시되지 않는다 (그러나 하단 화면은 상태 표시줄에서 사용되었다).&lt;br /&gt;
&lt;br /&gt;
=== 미러링 차트 ===&lt;br /&gt;
이 표는 더 간단하고 이해하기 쉬운 미러링 및 스크롤링 기술을 나열한다. 더 복잡한 기술은 매우 다양하다. 보다 포괄적인 조사를 보려면 [[List of games by mirroring technique]]를 참조하라.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 스크롤링 유형 || 미러링 || 예제 게임 || 코멘트&lt;br /&gt;
|-&lt;br /&gt;
| 없음&lt;br /&gt;
| 모두&lt;br /&gt;
| &#039;&#039;Donkey Kong&#039;&#039;, &#039;&#039;Tennis&#039;&#039;&lt;br /&gt;
| 단일 고정 화면만 있으면 모든 미러링 유형을 사용할 수 있다.&lt;br /&gt;
|-&lt;br /&gt;
| 수평만&lt;br /&gt;
| 수직&lt;br /&gt;
| &#039;&#039;Super Mario Bros.&#039;&#039;, &#039;&#039;Gimmick!&#039;&#039;&lt;br /&gt;
| 상단의 [[status bar]]는 [[sprite-0 hit]]로 쉽게 구현할 수 있다(&#039;&#039;Super Mario Bros.&#039;&#039; 참조).&lt;br /&gt;
|-&lt;br /&gt;
| 수직만&lt;br /&gt;
| 수평&lt;br /&gt;
| &#039;&#039;Ice Climber&#039;&#039;, &#039;&#039;Gun.Smoke&#039;&#039;&lt;br /&gt;
| 상태 표시줄이 없으면 수평 미러링이 수직 전용 스크롤링에 가장 적합한 선택이다. 상태 표시줄이 있으면 수직 또는 단일 화면 미러링은 네임테이블에 상태 표시줄을 렌더링할 위치를 제공하며 스크롤 이음새는 막대 아래에 숨겨져야 한다.&lt;br /&gt;
|-&lt;br /&gt;
| 교대 수평/수직&lt;br /&gt;
| 매퍼가 H/V 전환&lt;br /&gt;
| &#039;&#039;Metroid&#039;&#039;, &#039;&#039;Air Fortress&#039;&#039;&lt;br /&gt;
| 움직임은 주어진 시간에 단일 축으로 제한되며, 방향은 새 화면에 도달했을 때만 변경할 수 있다.&lt;br /&gt;
|-&lt;br /&gt;
| 제한된 양방향&lt;br /&gt;
| 수평/수직&lt;br /&gt;
| &#039;&#039;Super Mario Bros. 3&#039;&#039;, &#039;&#039;Fire Emblem&#039;&#039;&lt;br /&gt;
| 스크롤링 축 중 하나를 2화면 너비로만 제한함으로써 다른 축에서 무제한 스크롤링을 간단하게 만든다. 무제한 수평 스크롤링을 사용하면 화면 한쪽에 피할 수 없는 속성 결함이 있을 것이다(&#039;&#039;Super Mario Bros. 3&#039;&#039; 참조). 그러나 무제한 수직 스크롤링을 사용하면 NTSC 지역에서 [[overscan]]으로 숨길 수 있다(&#039;&#039;Fire Emblem&#039;&#039; 참조).&lt;br /&gt;
|-&lt;br /&gt;
| 무제한 양방향&lt;br /&gt;
| 다양함&lt;br /&gt;
| &#039;&#039;Castlevania II&#039;&#039;, &#039;&#039;Battletoads&#039;&#039;, &#039;&#039;Crystalis&#039;&#039;, &#039;&#039;Final Fantasy&#039;&#039;&lt;br /&gt;
| 한 번에 양 축에서 무제한 스크롤링은 게임별 솔루션이 필요한 고급 기술이다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
게임에서 사용되는 미러링 기술을 이해하는 가장 좋은 방법은 디버깅 에뮬레이터를 사용하여 네임테이블을 보는 것이다. [[Status bar|상태 표시줄]]은 일반적으로 화면의 시간 지정된 위치에서 스크롤 분할이 필요하다. 이것은 매퍼 기반 [[IRQ]]로 가장 쉽게 수행할 수 있지만 [[sprite-0 hit]] 또는 다른 기술로도 수행할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
&lt;br /&gt;
* [[PPU scrolling]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=PPU_%ED%8C%A8%ED%84%B4_%ED%85%8C%EC%9D%B4%EB%B8%94&amp;diff=159</id>
		<title>PPU 패턴 테이블</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=PPU_%ED%8C%A8%ED%84%B4_%ED%85%8C%EC%9D%B4%EB%B8%94&amp;diff=159"/>
		<updated>2025-10-01T04:31:04Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NES }}&lt;br /&gt;
{{틀:NesDev발췌 | 원글링크=https://www.nesdev.org/wiki/PPU_pattern_tables }}&lt;br /&gt;
&lt;br /&gt;
PPU에 연결된 메모리 영역인 &#039;&#039;&#039;패턴 테이블&#039;&#039;&#039;은 배경과 스프라이트를 구성하는 타일의 모양을 정의한다. 이 데이터는 &#039;&#039;&#039;CHR&#039;&#039;&#039;로도 알려져 있으며, 이를 포함하고 PPU에 연결된 메모리는 [[CHR ROM vs. CHR RAM|CHR-ROM 또는 CHR-RAM]]일 수 있다. &#039;&#039;CHR&#039;&#039;은 &amp;quot;character&amp;quot;에서 유래했으며, 각 타일이 단일 문자 문자를 나타낼 수 있는 컴퓨터 텍스트 디스플레이와 관련이 있다.&lt;br /&gt;
&lt;br /&gt;
[[File:One half fraction CHR.png|frame|right|½ 타일 인코딩]]&lt;br /&gt;
&lt;br /&gt;
패턴 테이블의 각 타일은 16바이트이며 두 개의 평면으로 구성된다.&lt;br /&gt;
첫 번째 평면의 각 비트는 픽셀 색상 인덱스의 비트 0을 제어하고, 두 번째 평면의 해당 비트는 비트 1을 제어한다.&lt;br /&gt;
&lt;br /&gt;
* 두 비트 모두 1로 설정되지 않은 경우: 픽셀은 배경/투명이다.&lt;br /&gt;
* 첫 번째 평면의 비트만 1로 설정된 경우: 픽셀의 색상 인덱스는 1이다.&lt;br /&gt;
* 두 번째 평면의 비트만 1로 설정된 경우: 픽셀의 색상 인덱스는 2이다.&lt;br /&gt;
* 두 비트가 모두 1로 설정된 경우: 픽셀의 색상 인덱스는 3이다.&lt;br /&gt;
&lt;br /&gt;
이 다이어그램은 ½(분수 2분의 1) 타일이 어떻게 인코딩되는지 보여주며, `.`은 투명 픽셀을 나타낸다.&lt;br /&gt;
&lt;br /&gt;
 비트 평면            픽셀 패턴&lt;br /&gt;
 $0xx0=$41  01000001&lt;br /&gt;
 $0xx1=$C2  11000010&lt;br /&gt;
 $0xx2=$44  01000100&lt;br /&gt;
 $0xx3=$48  01001000&lt;br /&gt;
 $0xx4=$10  00010000&lt;br /&gt;
 $0xx5=$20  00100000         .1.....3&lt;br /&gt;
 $0xx6=$40  01000000         11....3.&lt;br /&gt;
 $0xx7=$80  10000000  =====  .1...3..&lt;br /&gt;
                             .1..3...&lt;br /&gt;
 $0xx8=$01  00000001  =====  ...3.22.&lt;br /&gt;
 $0xx9=$02  00000010         ..3....2&lt;br /&gt;
 $0xxA=$04  00000100         .3....2.&lt;br /&gt;
 $0xxB=$08  00001000         3....222&lt;br /&gt;
 $0xxC=$16  00010110&lt;br /&gt;
 $0xxD=$21  00100001&lt;br /&gt;
 $0xxE=$42  01000010&lt;br /&gt;
 $0xxF=$87  10000111&lt;br /&gt;
&lt;br /&gt;
패턴 테이블은 두 개의 256타일 섹션으로 나뉜다: 첫 번째 패턴 테이블은 $0000-$0FFF에 있고 두 번째 패턴 테이블은 $1000-$1FFF에 있다.&lt;br /&gt;
때때로 디버거가 있는 에뮬레이터가 표시하는 방식에 따라 &amp;quot;왼쪽&amp;quot; 및 &amp;quot;오른쪽&amp;quot; 패턴 테이블이라는 별명이 붙기도 한다.&lt;br /&gt;
(아래 [[#Display convention|표시 규칙]] 참조)&lt;br /&gt;
&lt;br /&gt;
[[mapper]] 기능의 중요한 측면은 패턴 테이블의 일부를 얼마나 세밀하게 뱅크 스위칭할 수 있는지이다.&lt;br /&gt;
&lt;br /&gt;
== 주소 지정 ==&lt;br /&gt;
&lt;br /&gt;
패턴 테이블 내의 PPU 주소는 다음과 같이 디코딩할 수 있다:&lt;br /&gt;
&lt;br /&gt;
 DCBA98 76543210&lt;br /&gt;
 ---------------&lt;br /&gt;
 0HNNNN NNNNPyyy&lt;br /&gt;
 |||||| |||||+++- T: 미세 Y 오프셋, 타일 내의 행 번호&lt;br /&gt;
 |||||| ||||+---- P: 비트 평면 (0: 하위 비트; 1: 상위 비트)&lt;br /&gt;
 ||++++-++++----- N: 네임 테이블의 타일 번호&lt;br /&gt;
 |+-------------- H: 패턴 테이블의 절반 (0: &amp;quot;왼쪽&amp;quot;; 1: &amp;quot;오른쪽&amp;quot;)&lt;br /&gt;
 +--------------- 0: 패턴 테이블은 $0000-$1FFF에 있다&lt;br /&gt;
&lt;br /&gt;
[[PPUCTRL]] ($2000)에 기록된 값은 배경과 스프라이트가 첫 번째 패턴 테이블($0000-$0FFF)을 사용할지 두 번째 패턴 테이블($1000-$1FFF)을 사용할지 제어한다.&lt;br /&gt;
PPUCTRL 비트 4는 배경에 적용되고, 비트 3은 8x8 스프라이트에 적용되며, 각 OAM 항목의 타일 번호의 비트 0은 8x16 스프라이트에 적용된다.&lt;br /&gt;
&lt;br /&gt;
예를 들어, 타일의 행 번호가 0부터 7까지인 경우, 왼쪽 패턴 테이블의 타일 $69의 1행은 평면 0이 $0691에, 평면 1이 $0699에 저장된다.&lt;br /&gt;
&lt;br /&gt;
== 표시 규칙 ==&lt;br /&gt;
&lt;br /&gt;
[[File:Thwaite pattern tables.png|frame|center|&#039;&#039;Thwaite&#039;&#039; CHR ROM을 패턴 테이블 뷰어에서 본 모습]]&lt;br /&gt;
디버깅 에뮬레이터의 비디오 메모리 뷰어는 패턴 테이블을 나란히 있는 두 개의 16x16 타일 그리드로 표시하는 것이 일반적이다.&lt;br /&gt;
왼쪽에는 $0000-$0FFF의 패턴 테이블을, 오른쪽에는 $1000-$1FFF의 패턴 테이블을 그린다.&lt;br /&gt;
각 패턴 테이블은 일반적으로 16행 16타일로 구성된 128x128 픽셀 정사각형으로 표시된다.&lt;br /&gt;
일반적으로 타일은 서양식 읽기 순서에 따라 왼쪽에서 오른쪽으로, 위에서 아래로 표시된다: 왼쪽 상단에 $00, 그 오른쪽에 $01, 오른쪽 상단에 $0F, 그 다음 두 번째 줄에 $10부터 $1F까지, 오른쪽 하단에 $FF까지 이어진다.&lt;br /&gt;
일부 에뮬레이터에는 8x16 스프라이트용으로 뷰를 재정렬하는 옵션이 있다. 여기서 처음 두 행은 $00, $02, $04, ..., $1E와 $01, $03, $05, ..., $1F이고, 그 아래의 각 행 쌍은 또 다른 16개의 타일 쌍을 보여준다.&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=PPU_%EB%84%A4%EC%9E%84%ED%85%8C%EC%9D%B4%EB%B8%94&amp;diff=158</id>
		<title>PPU 네임테이블</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=PPU_%EB%84%A4%EC%9E%84%ED%85%8C%EC%9D%B4%EB%B8%94&amp;diff=158"/>
		<updated>2025-10-01T04:30:49Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NES }}&lt;br /&gt;
{{ NesDev발췌 | 원글링크=https://www.nesdev.org/wiki/PPU_nametables }}&lt;br /&gt;
PPU가 배경을 배치하는 데 사용하는 1024바이트 메모리 영역을 &#039;&#039;&#039;네임테이블&#039;&#039;&#039;이라고 한다.&lt;br /&gt;
각 네임테이블의 바이트는 하나의 8x8 픽셀 문자 셀을 제어하며, 각 네임테이블에는 30개의 행에 각각 32개의 타일이 있어 960($3C0)바이트가 된다. 나머지 64($40)바이트는 각 네임테이블의 [[PPU attribute tables|속성 테이블]]에서 사용된다.&lt;br /&gt;
각 타일이 8x8 픽셀이므로, 이는 하나의 맵에서 총 256x240 픽셀이 되며, 이는 전체 화면 크기와 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; margin-left: 1em&amp;quot;&amp;gt;&lt;br /&gt;
      (0,0)     (256,0)     (511,0)&lt;br /&gt;
        +-----------+-----------+&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |   $2000   |   $2400   |&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |           |           |&lt;br /&gt;
 (0,240)+-----------+-----------+(511,240)&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |   $2800   |   $2C00   |&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |           |           |&lt;br /&gt;
        +-----------+-----------+&lt;br /&gt;
      (0,479)   (256,479)   (511,479)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
:&#039;&#039;참조: [[PPU memory map]]&#039;&#039;&lt;br /&gt;
==미러링==&lt;br /&gt;
[[Mirroring]]&lt;br /&gt;
NES에는 2x2 패턴으로 배열된 4개의 논리적 네임테이블이 있다. 각 네임테이블은 PPU 주소 공간의 1KiB 청크를 차지하며, 왼쪽 상단부터 $2000, 오른쪽 상단 $2400, 왼쪽 하단 $2800, 오른쪽 하단 $2C00 순서이다.&lt;br /&gt;
&lt;br /&gt;
하지만 NES 시스템 보드 자체에는 2KiB의 VRAM(별도의 SRAM 칩에 저장된 CIRAM이라고 함)만 있어 두 개의 물리적 네임테이블만 저장할 수 있다. 카트리지의 하드웨어는 CIRAM의 주소 비트 10을 제어하여 하나의 네임테이블을 다른 네임테이블 위에 매핑한다.&lt;br /&gt;
* 수평 배열: $2000과 $2800은 첫 번째 네임테이블을, $2400과 $2C00은 두 번째 네임테이블을 포함한다(예: &#039;&#039;슈퍼 마리오 브라더스&#039;&#039;). 이는 CIRAM A10을 PPU A10에 연결하여 수행된다.&lt;br /&gt;
* 수직 배열: $2000과 $2400은 첫 번째 네임테이블을, $2800과 $2C00은 두 번째 네임테이블을 포함한다(예: &#039;&#039;키드 이카루스&#039;&#039;). 이는 CIRAM A10을 PPU A11에 연결하여 수행된다.&lt;br /&gt;
* 단일 화면: 모든 네임테이블은 주어진 시간에 동일한 메모리를 참조하며, 매퍼는 CIRAM A10을 직접 조작한다(예: [[AxROM]]을 사용하는 많은 [[Rare]] 게임).&lt;br /&gt;
* 4화면 네임테이블: 카트리지에는 모든 네임테이블에 사용되는 추가 VRAM이 포함되어 있다(예: &#039;&#039;건틀릿&#039;&#039;, &#039;&#039;래드 레이서 2&#039;&#039;).&lt;br /&gt;
* 기타: 일부 고급 매퍼는 네임테이블 영역에 CIRAM, VRAM 또는 CHR ROM의 임의 조합을 제공할 수 있다. 이러한 특이한 설정은 거의 사용되지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 배경 평가 ==&lt;br /&gt;
[[PPU rendering]]&lt;br /&gt;
개념적으로 PPU는 각 스캔라인에 대해 이 작업을 33번 수행한다:&lt;br /&gt;
&lt;br /&gt;
# $2000-$2FFF에서 네임테이블 항목을 가져온다.&lt;br /&gt;
# $23C0-$2FFF에서 해당 속성 테이블 항목을 가져오고 동일한 행 내에서 현재 VRAM 주소를 증가시킨다.&lt;br /&gt;
# $0000-$0FF7 또는 $1000-$1FF7에서 8x1 픽셀 패턴 테이블 조각의 하위 바이트를 가져온다.&lt;br /&gt;
# 8바이트 더 높은 주소에서 이 조각의 상위 바이트를 가져온다.&lt;br /&gt;
# 속성 데이터와 패턴 테이블 데이터를 팔레트 인덱스로 변환하고, [[PPU sprite priority|우선 순위]]를 사용하여 [[PPU sprite evaluation|스프라이트 데이터]]의 데이터와 결합한다.&lt;br /&gt;
&lt;br /&gt;
또한 사용되지 않는 34번째 (네임테이블, 속성, 패턴) 튜플을 가져오지만, 일부 [[mapper]]는 타이밍 목적으로 이 가져오기에 의존한다.&lt;br /&gt;
&lt;br /&gt;
== 함께 보기 ==&lt;br /&gt;
&lt;br /&gt;
* [[PPU attribute tables]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=157</id>
		<title>틀:알림 상자</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=157"/>
		<updated>2025-10-01T04:28:55Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{| style=&amp;quot;clear: both; padding-bottom:4px; width: {{{폭|100%}}}; margin: 0 auto; border-collapse: collapse; background: {{{배경색|#fbfbfb}}}; border: {{{경계선|1px solid #aaa}}};  {{#if:{{{오른쪽색|}}}|border-right: 10px solid {{{오른쪽색|#1e90ff}}}; }}border-top: 5px solid {{{색|#1e90ff}}};&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
{{#ifeq:{{{왼쪽 그림}}}|없음| |{{!}}style=&amp;quot;width: 52px; padding: 2px 0px 2px 0.5em;&amp;quot;{{!}}{{{왼쪽 그림 예외|[[그림:{{{왼쪽 그림|information icon4.svg}}}|링크=|{{{왼쪽 그림 크기|45px}}}|{{{왼쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|style=&amp;quot;padding: {{{간격|8px}}}; font-size:130%;&amp;quot;|{{#if:{{{제목|}}}|&amp;lt;span style=&amp;quot;color:{{{제목색|#000000}}};&amp;quot;&amp;gt;&#039;&#039;&#039;{{{제목}}}&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;}}&amp;lt;span style=&amp;quot;color:{{{본문색|#000000}}};font-size:70%;line-height:0.8;&amp;quot;&amp;gt;{{{본문|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
{{#if:{{{오른쪽 그림|}}}|{{!}}style=&amp;quot;width: 52px; padding: 2px 4px 2px 0px;&amp;quot;{{!}}{{{오른쪽 그림 예외|[[그림:{{{오른쪽 그림| - }}}|링크=|{{{오른쪽 그림 크기|45px}}}|{{{오른쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|}{{#if: {{{분류|}}}|[[분류:{{{분류}}}]]}}{{#ifeq: {{NAMESPACE}}|틀|[[분류:알림 상자 틀]]}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 설명 || 사용&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* 폭 = 100% (기본 설정)&lt;br /&gt;
* 색 = #1e90ff (기본 설정)&lt;br /&gt;
* 배경색 = #fbfbfb (기본 설정)&lt;br /&gt;
* 경계선 = 1px solid #aaaaaa (기본 설정)&lt;br /&gt;
* 왼쪽 그림 = Info non-talk.png (기본 설정, ‘없음’으로 설정할 수도 있습니다.)&lt;br /&gt;
* 왼쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 왼쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 왼쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 오른쪽 그림 = 없어도 됨&lt;br /&gt;
* 오른쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 오른쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 오른쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 제목색 = #000000 (기본 설정)&lt;br /&gt;
* 본문색 = #000000 (기본 설정)&lt;br /&gt;
* 제목 = &lt;br /&gt;
* 본문 = &lt;br /&gt;
||&amp;lt;pre&amp;gt;{{알림 상자&lt;br /&gt;
| 폭 = &lt;br /&gt;
| 색 = &lt;br /&gt;
| 배경색 = &lt;br /&gt;
| 경계선 = &lt;br /&gt;
| 왼쪽 그림 =&lt;br /&gt;
| 왼쪽 그림 크기 =&lt;br /&gt;
| 왼쪽 그림 설명 =&lt;br /&gt;
| 왼쪽 그림 예외 =&lt;br /&gt;
| 오른쪽 그림 = &lt;br /&gt;
| 오른쪽 그림 크기 =&lt;br /&gt;
| 오른쪽 그림 설명 =&lt;br /&gt;
| 오른쪽 그림 예외 =&lt;br /&gt;
| 간격 = &lt;br /&gt;
| 제목 = &lt;br /&gt;
| 본문 = &lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=PPU_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%A7%B5&amp;diff=156</id>
		<title>PPU 메모리 맵</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=PPU_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%A7%B5&amp;diff=156"/>
		<updated>2025-10-01T04:26:32Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NES }}&lt;br /&gt;
{{ NesDev발췌 | 원글링크=https://www.nesdev.org/w/index.php?title=PPU_memory_map }}&lt;br /&gt;
[[PPU]]는 CPU의 주소 버스와 완전히 분리된 14비트(16kB) 주소 공간, $0000-$3FFF를 주소 지정한다. PPU 자체에서 직접 접근하거나, $2006과 $2007에 있는 [[PPU 레지스터|메모리 매핑된 레지스터]]를 통해 CPU로 접근할 수 있다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;tabular&amp;quot;&lt;br /&gt;
! 주소 범위 || 크기 || 설명 || 매핑 주체&lt;br /&gt;
|-&lt;br /&gt;
| $0000-$0FFF || $1000 || [[PPU pattern tables|패턴 테이블]] 0 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $1000-$1FFF || $1000 || 패턴 테이블 1 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2000-$23BF  || $03c0 || [[PPU 네임테이블]] 0 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $23C0-$23FF  || $0040 || [[PPU attribute tables|속성 테이블]] 0 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2400-$27BF  || $03c0 || 네임테이블 1 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $27C0-$27FF  || $0040 || 속성 테이블 1 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2800-$2BBF  || $03c0 || 네임테이블 2 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2BC0-$2BFF  || $0040 || 속성 테이블 2 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2C00-$2FBF  || $03c0 || 네임테이블 3 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2FC0-$2FFF  || $0040 || 속성 테이블 3 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $3000-$3EFF  || $0F00 || 사용되지 않음 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $3F00-$3F1F  || $0020 || [[PPU palettes|팔레트 RAM]] 인덱스 || PPU 내부&lt;br /&gt;
|-&lt;br /&gt;
| $3F20-$3FFF  || $00E0 || $3F00-$3F1F의 미러 || PPU 내부&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 하드웨어 매핑 ==&lt;br /&gt;
&lt;br /&gt;
NES에는 PPU 전용 2kB의 RAM이 있으며, 일반적으로 $2000-$2FFF의 네임테이블 주소 공간에 매핑되지만, 사용자 지정 카트리지 배선을 통해 재라우팅될 수 있다. 위의 매핑은 렌더링 중에 PPU가 데이터를 가져오는 데 사용하는 주소이다. PPU가 패턴, 네임테이블 및 속성 테이블 데이터를 가져오는 실제 장치는 카트리지에 의해 구성된다.&lt;br /&gt;
&lt;br /&gt;
* $0000-1FFF는 일반적으로 카트리지에 의해 [[CHR ROM vs. CHR RAM|CHR-ROM 또는 CHR-RAM]]에 매핑되며, 종종 뱅크 스위칭 메커니즘이 있다.&lt;br /&gt;
&lt;br /&gt;
* $2000-2FFF는 일반적으로 2kB NES 내부 VRAM에 매핑되어 카트리지에 의해 제어되는 [[Mirroring#Nametable_Mirroring|미러링]] 구성으로 2개의 네임테이블을 제공하지만, 카트리지의 ROM 또는 RAM에 부분적으로 또는 완전히 다시 매핑될 수 있어 최대 4개의 동시 네임테이블을 허용한다.&lt;br /&gt;
&lt;br /&gt;
* $3000-3EFF는 일반적으로 $2000-2EFF의 2kB 영역의 미러이다. PPU는 이 주소 범위에서 렌더링하지 않으므로 이 공간은 거의 사용되지 않는다.&lt;br /&gt;
&lt;br /&gt;
* $3F00-3FFF는 구성할 수 없으며 항상 내부 팔레트 제어에 매핑된다.&lt;br /&gt;
&lt;br /&gt;
== OAM ==&lt;br /&gt;
또한 PPU는 내부에 [[PPU OAM|객체 속성 메모리]]로 알려진 256바이트의 메모리를 포함하고 있으며, 이는 스프라이트가 렌더링되는 방식을 결정한다. CPU는 [[OAMADDR]] ($2003), [[OAMDATA]] ($2004), [[OAMDMA]] ($4014)의 [[PPU registers|메모리 매핑된 레지스터]]를 통해 이 메모리를 조작할 수 있다. OAM은 64개의 항목이 있는 배열로 볼 수 있다. 각 항목에는 스프라이트 Y 좌표, 스프라이트 타일 번호, 스프라이트 속성, 스프라이트 X 좌표의 4바이트가 있다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;tabular&amp;quot;&lt;br /&gt;
! 주소 하위 니블 || 설명&lt;br /&gt;
|-&lt;br /&gt;
| $0, $4, $8, $C || 스프라이트 Y 좌표&lt;br /&gt;
|-&lt;br /&gt;
| $1, $5, $9, $D || 스프라이트 타일 #&lt;br /&gt;
|-&lt;br /&gt;
| $2, $6, $A, $E || 스프라이트 속성&lt;br /&gt;
|-&lt;br /&gt;
| $3, $7, $B, $F || 스프라이트 X 좌표&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:NES&amp;diff=155</id>
		<title>틀:NES</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:NES&amp;diff=155"/>
		<updated>2025-10-01T04:25:58Z</updated>

		<summary type="html">&lt;p&gt;Root: 새 문서: {{ 알림 상자 | 제목 = 해당 내용은 NES에 국한된 내용입니다. | 본문 = 해당 문서의 내용의 일부는 NES(패미컴) 외에서는 해당 내용이 적용되지 않을 수 있습니다. | 색 = #808080 | 왼쪽 그림 = 없음 }}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ 알림 상자 | 제목 = 해당 내용은 NES에 국한된 내용입니다. | 본문 = 해당 문서의 내용의 일부는 NES(패미컴) 외에서는 해당 내용이 적용되지 않을 수 있습니다. | 색 = #808080 | 왼쪽 그림 = 없음 }}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=PPU_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%A7%B5&amp;diff=154</id>
		<title>PPU 메모리 맵</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=PPU_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EB%A7%B5&amp;diff=154"/>
		<updated>2025-10-01T04:16:19Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NesDev발췌 | 원글링크=https://www.nesdev.org/w/index.php?title=PPU_memory_map }}&lt;br /&gt;
[[PPU]]는 CPU의 주소 버스와 완전히 분리된 14비트(16kB) 주소 공간, $0000-$3FFF를 주소 지정한다. PPU 자체에서 직접 접근하거나, $2006과 $2007에 있는 [[PPU 레지스터|메모리 매핑된 레지스터]]를 통해 CPU로 접근할 수 있다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;tabular&amp;quot;&lt;br /&gt;
! 주소 범위 || 크기 || 설명 || 매핑 주체&lt;br /&gt;
|-&lt;br /&gt;
| $0000-$0FFF || $1000 || [[PPU pattern tables|패턴 테이블]] 0 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $1000-$1FFF || $1000 || 패턴 테이블 1 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2000-$23BF  || $03c0 || [[PPU 네임테이블]] 0 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $23C0-$23FF  || $0040 || [[PPU attribute tables|속성 테이블]] 0 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2400-$27BF  || $03c0 || 네임테이블 1 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $27C0-$27FF  || $0040 || 속성 테이블 1 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2800-$2BBF  || $03c0 || 네임테이블 2 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2BC0-$2BFF  || $0040 || 속성 테이블 2 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2C00-$2FBF  || $03c0 || 네임테이블 3 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $2FC0-$2FFF  || $0040 || 속성 테이블 3 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $3000-$3EFF  || $0F00 || 사용되지 않음 || 카트리지&lt;br /&gt;
|-&lt;br /&gt;
| $3F00-$3F1F  || $0020 || [[PPU palettes|팔레트 RAM]] 인덱스 || PPU 내부&lt;br /&gt;
|-&lt;br /&gt;
| $3F20-$3FFF  || $00E0 || $3F00-$3F1F의 미러 || PPU 내부&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 하드웨어 매핑 ==&lt;br /&gt;
&lt;br /&gt;
NES에는 PPU 전용 2kB의 RAM이 있으며, 일반적으로 $2000-$2FFF의 네임테이블 주소 공간에 매핑되지만, 사용자 지정 카트리지 배선을 통해 재라우팅될 수 있다. 위의 매핑은 렌더링 중에 PPU가 데이터를 가져오는 데 사용하는 주소이다. PPU가 패턴, 네임테이블 및 속성 테이블 데이터를 가져오는 실제 장치는 카트리지에 의해 구성된다.&lt;br /&gt;
&lt;br /&gt;
* $0000-1FFF는 일반적으로 카트리지에 의해 [[CHR ROM vs. CHR RAM|CHR-ROM 또는 CHR-RAM]]에 매핑되며, 종종 뱅크 스위칭 메커니즘이 있다.&lt;br /&gt;
&lt;br /&gt;
* $2000-2FFF는 일반적으로 2kB NES 내부 VRAM에 매핑되어 카트리지에 의해 제어되는 [[Mirroring#Nametable_Mirroring|미러링]] 구성으로 2개의 네임테이블을 제공하지만, 카트리지의 ROM 또는 RAM에 부분적으로 또는 완전히 다시 매핑될 수 있어 최대 4개의 동시 네임테이블을 허용한다.&lt;br /&gt;
&lt;br /&gt;
* $3000-3EFF는 일반적으로 $2000-2EFF의 2kB 영역의 미러이다. PPU는 이 주소 범위에서 렌더링하지 않으므로 이 공간은 거의 사용되지 않는다.&lt;br /&gt;
&lt;br /&gt;
* $3F00-3FFF는 구성할 수 없으며 항상 내부 팔레트 제어에 매핑된다.&lt;br /&gt;
&lt;br /&gt;
== OAM ==&lt;br /&gt;
또한 PPU는 내부에 [[PPU OAM|객체 속성 메모리]]로 알려진 256바이트의 메모리를 포함하고 있으며, 이는 스프라이트가 렌더링되는 방식을 결정한다. CPU는 [[OAMADDR]] ($2003), [[OAMDATA]] ($2004), [[OAMDMA]] ($4014)의 [[PPU registers|메모리 매핑된 레지스터]]를 통해 이 메모리를 조작할 수 있다. OAM은 64개의 항목이 있는 배열로 볼 수 있다. 각 항목에는 스프라이트 Y 좌표, 스프라이트 타일 번호, 스프라이트 속성, 스프라이트 X 좌표의 4바이트가 있다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;tabular&amp;quot;&lt;br /&gt;
! 주소 하위 니블 || 설명&lt;br /&gt;
|-&lt;br /&gt;
| $0, $4, $8, $C || 스프라이트 Y 좌표&lt;br /&gt;
|-&lt;br /&gt;
| $1, $5, $9, $D || 스프라이트 타일 #&lt;br /&gt;
|-&lt;br /&gt;
| $2, $6, $A, $E || 스프라이트 속성&lt;br /&gt;
|-&lt;br /&gt;
| $3, $7, $B, $F || 스프라이트 X 좌표&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=PPU_%EB%84%A4%EC%9E%84%ED%85%8C%EC%9D%B4%EB%B8%94&amp;diff=153</id>
		<title>PPU 네임테이블</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=PPU_%EB%84%A4%EC%9E%84%ED%85%8C%EC%9D%B4%EB%B8%94&amp;diff=153"/>
		<updated>2025-10-01T04:10:57Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NesDev발췌 | 원글링크=https://www.nesdev.org/wiki/PPU_nametables }}&lt;br /&gt;
PPU가 배경을 배치하는 데 사용하는 1024바이트 메모리 영역을 &#039;&#039;&#039;네임테이블&#039;&#039;&#039;이라고 한다.&lt;br /&gt;
각 네임테이블의 바이트는 하나의 8x8 픽셀 문자 셀을 제어하며, 각 네임테이블에는 30개의 행에 각각 32개의 타일이 있어 960($3C0)바이트가 된다. 나머지 64($40)바이트는 각 네임테이블의 [[PPU attribute tables|속성 테이블]]에서 사용된다.&lt;br /&gt;
각 타일이 8x8 픽셀이므로, 이는 하나의 맵에서 총 256x240 픽셀이 되며, 이는 전체 화면 크기와 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float:right; margin-left: 1em&amp;quot;&amp;gt;&lt;br /&gt;
      (0,0)     (256,0)     (511,0)&lt;br /&gt;
        +-----------+-----------+&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |   $2000   |   $2400   |&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |           |           |&lt;br /&gt;
 (0,240)+-----------+-----------+(511,240)&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |   $2800   |   $2C00   |&lt;br /&gt;
        |           |           |&lt;br /&gt;
        |           |           |&lt;br /&gt;
        +-----------+-----------+&lt;br /&gt;
      (0,479)   (256,479)   (511,479)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
:&#039;&#039;참조: [[PPU memory map]]&#039;&#039;&lt;br /&gt;
==미러링==&lt;br /&gt;
[[Mirroring]]&lt;br /&gt;
NES에는 2x2 패턴으로 배열된 4개의 논리적 네임테이블이 있다. 각 네임테이블은 PPU 주소 공간의 1KiB 청크를 차지하며, 왼쪽 상단부터 $2000, 오른쪽 상단 $2400, 왼쪽 하단 $2800, 오른쪽 하단 $2C00 순서이다.&lt;br /&gt;
&lt;br /&gt;
하지만 NES 시스템 보드 자체에는 2KiB의 VRAM(별도의 SRAM 칩에 저장된 CIRAM이라고 함)만 있어 두 개의 물리적 네임테이블만 저장할 수 있다. 카트리지의 하드웨어는 CIRAM의 주소 비트 10을 제어하여 하나의 네임테이블을 다른 네임테이블 위에 매핑한다.&lt;br /&gt;
* 수평 배열: $2000과 $2800은 첫 번째 네임테이블을, $2400과 $2C00은 두 번째 네임테이블을 포함한다(예: &#039;&#039;슈퍼 마리오 브라더스&#039;&#039;). 이는 CIRAM A10을 PPU A10에 연결하여 수행된다.&lt;br /&gt;
* 수직 배열: $2000과 $2400은 첫 번째 네임테이블을, $2800과 $2C00은 두 번째 네임테이블을 포함한다(예: &#039;&#039;키드 이카루스&#039;&#039;). 이는 CIRAM A10을 PPU A11에 연결하여 수행된다.&lt;br /&gt;
* 단일 화면: 모든 네임테이블은 주어진 시간에 동일한 메모리를 참조하며, 매퍼는 CIRAM A10을 직접 조작한다(예: [[AxROM]]을 사용하는 많은 [[Rare]] 게임).&lt;br /&gt;
* 4화면 네임테이블: 카트리지에는 모든 네임테이블에 사용되는 추가 VRAM이 포함되어 있다(예: &#039;&#039;건틀릿&#039;&#039;, &#039;&#039;래드 레이서 2&#039;&#039;).&lt;br /&gt;
* 기타: 일부 고급 매퍼는 네임테이블 영역에 CIRAM, VRAM 또는 CHR ROM의 임의 조합을 제공할 수 있다. 이러한 특이한 설정은 거의 사용되지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 배경 평가 ==&lt;br /&gt;
[[PPU rendering]]&lt;br /&gt;
개념적으로 PPU는 각 스캔라인에 대해 이 작업을 33번 수행한다:&lt;br /&gt;
&lt;br /&gt;
# $2000-$2FFF에서 네임테이블 항목을 가져온다.&lt;br /&gt;
# $23C0-$2FFF에서 해당 속성 테이블 항목을 가져오고 동일한 행 내에서 현재 VRAM 주소를 증가시킨다.&lt;br /&gt;
# $0000-$0FF7 또는 $1000-$1FF7에서 8x1 픽셀 패턴 테이블 조각의 하위 바이트를 가져온다.&lt;br /&gt;
# 8바이트 더 높은 주소에서 이 조각의 상위 바이트를 가져온다.&lt;br /&gt;
# 속성 데이터와 패턴 테이블 데이터를 팔레트 인덱스로 변환하고, [[PPU sprite priority|우선 순위]]를 사용하여 [[PPU sprite evaluation|스프라이트 데이터]]의 데이터와 결합한다.&lt;br /&gt;
&lt;br /&gt;
또한 사용되지 않는 34번째 (네임테이블, 속성, 패턴) 튜플을 가져오지만, 일부 [[mapper]]는 타이밍 목적으로 이 가져오기에 의존한다.&lt;br /&gt;
&lt;br /&gt;
== 함께 보기 ==&lt;br /&gt;
&lt;br /&gt;
* [[PPU attribute tables]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=PPU_%ED%8C%A8%ED%84%B4_%ED%85%8C%EC%9D%B4%EB%B8%94&amp;diff=152</id>
		<title>PPU 패턴 테이블</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=PPU_%ED%8C%A8%ED%84%B4_%ED%85%8C%EC%9D%B4%EB%B8%94&amp;diff=152"/>
		<updated>2025-10-01T04:09:18Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{틀:NesDev발췌 | 원글링크=https://www.nesdev.org/wiki/PPU_pattern_tables }}&lt;br /&gt;
&lt;br /&gt;
PPU에 연결된 메모리 영역인 &#039;&#039;&#039;패턴 테이블&#039;&#039;&#039;은 배경과 스프라이트를 구성하는 타일의 모양을 정의한다. 이 데이터는 &#039;&#039;&#039;CHR&#039;&#039;&#039;로도 알려져 있으며, 이를 포함하고 PPU에 연결된 메모리는 [[CHR ROM vs. CHR RAM|CHR-ROM 또는 CHR-RAM]]일 수 있다. &#039;&#039;CHR&#039;&#039;은 &amp;quot;character&amp;quot;에서 유래했으며, 각 타일이 단일 문자 문자를 나타낼 수 있는 컴퓨터 텍스트 디스플레이와 관련이 있다.&lt;br /&gt;
&lt;br /&gt;
[[File:One half fraction CHR.png|frame|right|½ 타일 인코딩]]&lt;br /&gt;
&lt;br /&gt;
패턴 테이블의 각 타일은 16바이트이며 두 개의 평면으로 구성된다.&lt;br /&gt;
첫 번째 평면의 각 비트는 픽셀 색상 인덱스의 비트 0을 제어하고, 두 번째 평면의 해당 비트는 비트 1을 제어한다.&lt;br /&gt;
&lt;br /&gt;
* 두 비트 모두 1로 설정되지 않은 경우: 픽셀은 배경/투명이다.&lt;br /&gt;
* 첫 번째 평면의 비트만 1로 설정된 경우: 픽셀의 색상 인덱스는 1이다.&lt;br /&gt;
* 두 번째 평면의 비트만 1로 설정된 경우: 픽셀의 색상 인덱스는 2이다.&lt;br /&gt;
* 두 비트가 모두 1로 설정된 경우: 픽셀의 색상 인덱스는 3이다.&lt;br /&gt;
&lt;br /&gt;
이 다이어그램은 ½(분수 2분의 1) 타일이 어떻게 인코딩되는지 보여주며, `.`은 투명 픽셀을 나타낸다.&lt;br /&gt;
&lt;br /&gt;
 비트 평면            픽셀 패턴&lt;br /&gt;
 $0xx0=$41  01000001&lt;br /&gt;
 $0xx1=$C2  11000010&lt;br /&gt;
 $0xx2=$44  01000100&lt;br /&gt;
 $0xx3=$48  01001000&lt;br /&gt;
 $0xx4=$10  00010000&lt;br /&gt;
 $0xx5=$20  00100000         .1.....3&lt;br /&gt;
 $0xx6=$40  01000000         11....3.&lt;br /&gt;
 $0xx7=$80  10000000  =====  .1...3..&lt;br /&gt;
                             .1..3...&lt;br /&gt;
 $0xx8=$01  00000001  =====  ...3.22.&lt;br /&gt;
 $0xx9=$02  00000010         ..3....2&lt;br /&gt;
 $0xxA=$04  00000100         .3....2.&lt;br /&gt;
 $0xxB=$08  00001000         3....222&lt;br /&gt;
 $0xxC=$16  00010110&lt;br /&gt;
 $0xxD=$21  00100001&lt;br /&gt;
 $0xxE=$42  01000010&lt;br /&gt;
 $0xxF=$87  10000111&lt;br /&gt;
&lt;br /&gt;
패턴 테이블은 두 개의 256타일 섹션으로 나뉜다: 첫 번째 패턴 테이블은 $0000-$0FFF에 있고 두 번째 패턴 테이블은 $1000-$1FFF에 있다.&lt;br /&gt;
때때로 디버거가 있는 에뮬레이터가 표시하는 방식에 따라 &amp;quot;왼쪽&amp;quot; 및 &amp;quot;오른쪽&amp;quot; 패턴 테이블이라는 별명이 붙기도 한다.&lt;br /&gt;
(아래 [[#Display convention|표시 규칙]] 참조)&lt;br /&gt;
&lt;br /&gt;
[[mapper]] 기능의 중요한 측면은 패턴 테이블의 일부를 얼마나 세밀하게 뱅크 스위칭할 수 있는지이다.&lt;br /&gt;
&lt;br /&gt;
== 주소 지정 ==&lt;br /&gt;
&lt;br /&gt;
패턴 테이블 내의 PPU 주소는 다음과 같이 디코딩할 수 있다:&lt;br /&gt;
&lt;br /&gt;
 DCBA98 76543210&lt;br /&gt;
 ---------------&lt;br /&gt;
 0HNNNN NNNNPyyy&lt;br /&gt;
 |||||| |||||+++- T: 미세 Y 오프셋, 타일 내의 행 번호&lt;br /&gt;
 |||||| ||||+---- P: 비트 평면 (0: 하위 비트; 1: 상위 비트)&lt;br /&gt;
 ||++++-++++----- N: 네임 테이블의 타일 번호&lt;br /&gt;
 |+-------------- H: 패턴 테이블의 절반 (0: &amp;quot;왼쪽&amp;quot;; 1: &amp;quot;오른쪽&amp;quot;)&lt;br /&gt;
 +--------------- 0: 패턴 테이블은 $0000-$1FFF에 있다&lt;br /&gt;
&lt;br /&gt;
[[PPUCTRL]] ($2000)에 기록된 값은 배경과 스프라이트가 첫 번째 패턴 테이블($0000-$0FFF)을 사용할지 두 번째 패턴 테이블($1000-$1FFF)을 사용할지 제어한다.&lt;br /&gt;
PPUCTRL 비트 4는 배경에 적용되고, 비트 3은 8x8 스프라이트에 적용되며, 각 OAM 항목의 타일 번호의 비트 0은 8x16 스프라이트에 적용된다.&lt;br /&gt;
&lt;br /&gt;
예를 들어, 타일의 행 번호가 0부터 7까지인 경우, 왼쪽 패턴 테이블의 타일 $69의 1행은 평면 0이 $0691에, 평면 1이 $0699에 저장된다.&lt;br /&gt;
&lt;br /&gt;
== 표시 규칙 ==&lt;br /&gt;
&lt;br /&gt;
[[File:Thwaite pattern tables.png|frame|center|&#039;&#039;Thwaite&#039;&#039; CHR ROM을 패턴 테이블 뷰어에서 본 모습]]&lt;br /&gt;
디버깅 에뮬레이터의 비디오 메모리 뷰어는 패턴 테이블을 나란히 있는 두 개의 16x16 타일 그리드로 표시하는 것이 일반적이다.&lt;br /&gt;
왼쪽에는 $0000-$0FFF의 패턴 테이블을, 오른쪽에는 $1000-$1FFF의 패턴 테이블을 그린다.&lt;br /&gt;
각 패턴 테이블은 일반적으로 16행 16타일로 구성된 128x128 픽셀 정사각형으로 표시된다.&lt;br /&gt;
일반적으로 타일은 서양식 읽기 순서에 따라 왼쪽에서 오른쪽으로, 위에서 아래로 표시된다: 왼쪽 상단에 $00, 그 오른쪽에 $01, 오른쪽 상단에 $0F, 그 다음 두 번째 줄에 $10부터 $1F까지, 오른쪽 하단에 $FF까지 이어진다.&lt;br /&gt;
일부 에뮬레이터에는 8x16 스프라이트용으로 뷰를 재정렬하는 옵션이 있다. 여기서 처음 두 행은 $00, $02, $04, ..., $1E와 $01, $03, $05, ..., $1F이고, 그 아래의 각 행 쌍은 또 다른 16개의 타일 쌍을 보여준다.&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%EB%AF%B8%EB%9F%AC%EB%A7%81&amp;diff=151</id>
		<title>미러링</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%EB%AF%B8%EB%9F%AC%EB%A7%81&amp;diff=151"/>
		<updated>2025-10-01T04:08:11Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NesDev발췌 | 원글링크 = https://www.nesdev.org/wiki/Mirroring }}&lt;br /&gt;
NES에는 두 가지 유형의 &#039;&#039;&#039;미러링&#039;&#039;&#039;이 있다:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[[#메모리 미러링|메모리 미러링]]&#039;&#039;&#039;은 동일한 메모리가 여러 주소에서 접근될 수 있을 때 발생하며, 명백한 중복을 야기한다.&lt;br /&gt;
* &#039;&#039;&#039;[[#네임테이블 미러링|네임테이블 미러링]]&#039;&#039;&#039;은 NES의 2x2 [[#네임테이블 미러링|배경 네임테이블]] 그래픽의 레이아웃을 설명하며, 일반적으로 미러링된 메모리에 의해 달성된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== 메모리 미러링 ==&lt;br /&gt;
&lt;br /&gt;
메모리 미러링은 메모리 또는 I/O 레지스터가 둘 이상의 주소 범위에 나타나는 것을 말하며, 동일한 바이트가 둘 이상의 주소에서 접근 가능하다.&lt;br /&gt;
이것은 전체 주소가 완전히 &#039;&#039;디코딩&#039;&#039;되지 않았을 때, 즉 칩이 하나 이상의 주소 라인을 무시할 때 발생한다.&lt;br /&gt;
주소를 완전히 디코딩하는 것은 일반적으로 칩에 훨씬 더 많은 핀을 필요로 하기 때문에, 불완전한 디코딩은 필요한 하드웨어를 줄이기 위해 사용된다. 미러가 그렇지 않으면 사용되지 않는 주소 공간을 차지하는 경우, 아무런 문제가 되지 않는다.&lt;br /&gt;
&lt;br /&gt;
NES 내에서는 많은 것들이 미러링된다:&lt;br /&gt;
* $0000-$07FF의 시스템 메모리는 $0800-$0FFF, $1000-$17FF, $1800-$1FFF에서 미러링된다 - 예를 들어 $0173에서 메모리에 접근하려고 시도하는 것은 $0973, $1173, 또는 $1973에서 메모리에 접근하는 것과 같다.&lt;br /&gt;
* $2000-$2007의 PPU I/O 레지스터는 $2008-$200F, $2010-$2017, $2018-$201F 등 $3FF8-$3FFF까지 미러링된다.&lt;br /&gt;
* 대부분의 [[:Category:Discrete logic mappers|단순한 매퍼]]에 있는 단일 레지스터는 $8000-$FFFF 전체에 걸쳐 미러링된다.&lt;br /&gt;
* 많은 일반적인 ASIC 매퍼(예: MMC1 및 MMC3)의 레지스터도 $8000-$FFFF 전체에 걸쳐 그룹으로 미러링된다.&lt;br /&gt;
* 아래에 설명된 네임테이블 미러링은 PPU $2000-$2FFF 내의 메모리 미러링으로 인해 발생한다(따라서 그 이름이 붙여졌다). 그러나 이 경우 메모리 미러링은 의도적이고 필요하다.&lt;br /&gt;
* [[NROM]]-128에서는 16k PRG ROM이 $8000-$BFFF와 $C000-$FFFF 모두에 미러링된다.&lt;br /&gt;
* 대부분의 [[mapper]]에서 PRG 또는 CHR ROM의 끝을 지난 뱅크는 이전 뱅크의 미러로 나타난다. 예를 들어, [[UNROM]] PRG 뱅크 8-15는 각각 뱅크 0-7의 복사본이다. [[Non-power-of-two ROM size]]는 더 복잡한 미러링을 의미할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 네임테이블 미러링 ==&lt;br /&gt;
&lt;br /&gt;
네임테이블 미러링은 현재 네임테이블의 오른쪽 및 아래쪽 가장자리를 지나 표시되는 내용에 영향을 미친다. 특정 축(수평 및/또는 수직)에 대해 미러링이 활성화되면 좌표는 현재 네임테이블에서 단순히 래핑된다. 이런 식으로 &amp;quot;미러링된&amp;quot; 배경은 뒤집히지 않고 &#039;&#039;반복&#039;&#039;된다. 미러링이 비활성화되면 두 번째 네임테이블이 사용된다. 미러링에는 네 가지 일반적인 조합이 있다:&lt;br /&gt;
&lt;br /&gt;
=== 수평 ===&lt;br /&gt;
[[File:Horizontal mirroring diagram.png|right]]&lt;br /&gt;
&lt;br /&gt;
네임테이블의 &#039;&#039;&#039;수직 배열&#039;&#039;&#039;은 &#039;&#039;&#039;수평 미러링&#039;&#039;&#039;을 초래하며, 이는 &#039;&#039;&#039;32x60 타일맵&#039;&#039;&#039;을 만든다.&lt;br /&gt;
&lt;br /&gt;
이것은 수직으로만 또는 모든 방향으로 스크롤하는 게임에 가장 일반적으로 사용된다.&lt;br /&gt;
&lt;br /&gt;
수평 미러링을 사용하여 수평 스크롤을 하는 것은 부드럽게 하기가 어렵다. 왜냐하면 화면 오른쪽의 데이터가 미러링으로 인해 즉시 왼쪽에 표시되기 때문이다. 하드웨어 왼쪽 화면 클리핑을 영리하게 사용하면 모든 네임테이블 결함을 숨길 수 있지만, 속성 테이블의 해상도가 2x2 타일이기 때문에 화면의 왼쪽 및/또는 오른쪽에 항상 속성 결함이 있을 것이다. 그것을 숨기는 가장 좋은 방법은 양쪽에 잠재적으로 잘못된 속성을 가진 4개의 픽셀을 두는 것이지만, 대부분의 상용 게임은 보통 8개 또는 그 이상의 결함 픽셀을 가지고 있어 그보다 더 나빴다. 그래서 많은 NES 게임이 화면 경계에 색상 결함을 가지고 있는 것이다.&lt;br /&gt;
&lt;br /&gt;
일부 텔레비전은 왼쪽과 오른쪽 경계 모두에서 최대 8픽셀까지 [[overscan]]하지만 대부분은 그렇지 않다. 완벽주의 프로그래머는 &#039;&#039;Alfred Chicken&#039;&#039; 게임에서처럼 속성 결함을 숨기고 화면을 대칭적으로 보이게 하고 모든 속성 결함을 절대적으로 숨기기 위해 오른쪽 경계에 단색 검은색 스프라이트를 사용할 수 있었지만, 스캔라인당 스프라이트 수를 7개로 줄이고 많은 [[PPU OAM|OAM]] 공간(8x16 픽셀 스프라이트 모드에서 약 1/4)을 낭비하기 때문에 이렇게 하는 게임은 거의 없다.&lt;br /&gt;
&lt;br /&gt;
카트리지 보드를 수평 미러링으로 구성하려면 PPU A11을 CIRAM A10에 연결하라.&lt;br /&gt;
닌텐도에서 만든 카트리지 보드에서는 &amp;quot;V&amp;quot; 솔더 패드(&amp;quot;수직 배열&amp;quot;용)를 단락시켜 선택한다.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 수직 ===&lt;br /&gt;
[[File:Vertical mirroring diagram.png|right]]&lt;br /&gt;
네임테이블의 &#039;&#039;&#039;수평 배열&#039;&#039;&#039;은 &#039;&#039;&#039;수직 미러링&#039;&#039;&#039;을 초래하며, 이는 &#039;&#039;&#039;64x30 타일맵&#039;&#039;&#039;을 만든다.&lt;br /&gt;
&lt;br /&gt;
이것은 수평으로만 스크롤하는 게임에 가장 일반적으로 사용된다. 수직으로 스크롤하고(어떤 양으로든 상태 표시줄 없이) 한 화면 이상 수평으로 스크롤하지 않는 게임은 이 미러링을 사용한다(예: Lode Runner, Bomberman, Fire Emblem, Crystal Mines). 그러면 수평으로 스크롤할 때 아무것도 로드할 필요가 없다.&lt;br /&gt;
&lt;br /&gt;
물론 상태 표시줄 없이 양방향으로 스크롤하는 게임에도 사용된다. 화면 상단/하단에 있는 데이터가 즉시 다른 쪽에 나타나기 때문에, NTSC [[overscan]]을 영리하게 사용하면 결함 없는 다방향 스크롤을 만들 수 있지만, PAL 텔레비전(그리고 오버스캔 범위가 약간 벗어난 NTSC 텔레비전)에서는 결함이 나타날 것이다. 결함을 숨기는 가장 좋은 방법은 양쪽에 잘못된 타일을 가진 4개의 픽셀과 잘못된 색상을 가진 4개의 추가 픽셀을 만드는 것이지만, 대부분의 상용 게임은 이보다 훨씬 더 나빴다. 그래서 오버스캔이 비활성화되면 그렇게 나쁘게 보이는 것이다.&lt;br /&gt;
&lt;br /&gt;
완벽주의 프로그래머는 &#039;&#039;Jurassic Park&#039;&#039; 및 &#039;&#039;M.C. Kids&#039;&#039; 게임에서처럼 결함을 숨기기 위해(그리고 아마도 VRAM을 업데이트하기 위해 더 많은 블랭킹 시간을 제공하기 위해) 래스터 분할을 사용할 수 있었지만, 작은 이점을 위해 코드를 많이 복잡하게 만들기 때문에 거의 수행되지 않았다.&lt;br /&gt;
&lt;br /&gt;
카트리지 보드를 수직 미러링으로 구성하려면 PPU A10을 CIRAM A10에 연결하라.&lt;br /&gt;
닌텐도에서 만든 카트리지 보드에서는 &amp;quot;H&amp;quot; 솔더 패드(&amp;quot;수평 배열&amp;quot;용)를 단락시켜 선택한다.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 단일 화면 ===&lt;br /&gt;
[[File:Single screen mirroring diagram overlaid.png|right]]&lt;br /&gt;
&lt;br /&gt;
단일 화면 미러링은 [[AxROM]], [[SxROM]], [[TLSROM]] 보드와 같은 특정 매퍼에서만 사용할 수 있으며, &#039;&#039;&#039;두 개의 32x30 타일맵&#039;&#039;&#039;을 생성한다.&lt;br /&gt;
&lt;br /&gt;
주요 장점은 화면 상단이나 하단에 상태 표시줄을 사용하면서 플레이 필드를 모든 방향으로 동일하게 확장할 수 있다는 것이다. 이는 상태 표시줄을 하나의 네임테이블에 저장하고, 다른 네임테이블에서 플레이 필드를 렌더링하고, 렌더링 중 적절한 화면 위치에서 미러링(및 스크롤 매개변수)을 전환하여 수행할 수 있다.&lt;br /&gt;
&lt;br /&gt;
1화면 미러링을 사용할 때 대폭 단순화될 수 있는 다른 많은 것들도 있다. 화면에 업데이트할 데이터의 PPU 주소를 계산하는 데 사용되는 공식도 훨씬 간단하며, 상태 표시줄의 크기가 가변적이거나 스크롤되는 경우 1화면 미러링 없이는 이 모든 것이 골칫거리가 될 것이다.&lt;br /&gt;
&lt;br /&gt;
이 미러링을 수평으로 스크롤하는 데 사용하면 수평 미러링과 유사한 결함 및 스크롤 문제가 발생한다. 그러나 상태 표시줄이 있는 한, 화면 하단(또는 상단)에서 떨어지는 데이터가 오버스캔 요인에 관계없이 상태 표시줄에 의해 &amp;quot;숨겨진&amp;quot; 영역으로 들어오기 때문에 수직으로는 결함이 발생하지 않는다.&lt;br /&gt;
&lt;br /&gt;
카트리지 보드를 단일 화면 미러링으로 구성하는 방법에는 여러 가지가 있다. 일부 보드에는 MMC1 및 AxROM과 같이 매퍼 제어되는 단일 화면 미러링이 있다. AxROM의 경우 레지스터(예: [[74HC161]])의 출력을 CIRAM A10에 연결한다(AxROM은 PRG D4를 래치함). 소프트웨어로 변경할 수 없는 고정된 단일 화면 미러링을 만드는 더 간단한 방법은 CIRAM A10을 Gnd 또는 Vcc에 간단히 연결하는 것이다.&lt;br /&gt;
[[iNES Mapper 218]]을 구현하는 보드는 CIRAM A10을 PPU A10, A11, A12 또는 A13에 연결하여 게임이 카트리지에 CHR ROM이나 CHR RAM 없이 CIRAM에 타일을 저장할 수 있도록 한다.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4화면 ===&lt;br /&gt;
[[File:Four nametables diagram.png|right]]&lt;br /&gt;
카트리지에 추가 RAM 및/또는 PPU 주소 매핑이 있으면 PPU 버스를 통해 4개의 고유한 네임테이블을 주소 지정할 수 있으며, &#039;&#039;&#039;64x60 타일맵&#039;&#039;&#039;을 생성하여 보다 유연한 화면 레이아웃을 허용한다. 이 미러링 부족을 활용한 게임은 거의 없다.&lt;br /&gt;
&lt;br /&gt;
4화면 RAM 네임테이블을 사용하는 것으로 알려진 게임:&lt;br /&gt;
* &#039;&#039;Rad Racer II&#039;&#039;&lt;br /&gt;
* &#039;&#039;Gauntlet&#039;&#039;&lt;br /&gt;
* &#039;&#039;Napoleon Senki&#039;&#039;&lt;br /&gt;
* &#039;&#039;Rocman X (Sachen)&#039;&#039;&lt;br /&gt;
* 모든 [[Vs. System]] 게임&lt;br /&gt;
&lt;br /&gt;
[[:Category:Mappers with ROM nametables|ROM 네임테이블]]과 함께 4화면을 사용하는 예제 게임:&lt;br /&gt;
* &#039;&#039;Final Lap&#039;&#039;&lt;br /&gt;
* &#039;&#039;King of Kings&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4화면 네임테이블과 함께 사용되는 것으로 알려진 매퍼:&lt;br /&gt;
* [[MMC3]] (&#039;&#039;Rad Racer II&#039;&#039;).&lt;br /&gt;
* [[iNES Mapper 206|iNES 206]]은 MMC3 기능의 하위 집합을 구현하며 4화면 RAM을 사용할 수 있다(&#039;&#039;Gauntlet&#039;&#039;).&lt;br /&gt;
* [[iNES Mapper 077|iNES 77]]은 PPU 메모리 공간 전체에 RAM을 매핑하여 내부 VRAM과 결합하여 4개의 RAM 네임테이블과 패턴 테이블용 CHR-RAM 및 ROM 조합을 제공한다(&#039;&#039;Napoleon Senki&#039;&#039;).&lt;br /&gt;
* [[Vs. System]]은 NES보다 두 배 많은 VRAM을 가지고 있어 영구적인 4화면 설정을 제공한다. 이것은 [[iNES Mapper 099|iNES 99]]로 가장 잘 보이지만, [[Vs. System#See also|여러 다른 매퍼]]도 이 하드웨어에서 사용되었다.&lt;br /&gt;
* [[Namco 163]]은 1k CHR-ROM 페이지를 4개의 네임테이블 화면에 임의로 매핑할 수 있다(&#039;&#039;Final Lap&#039;&#039;, &#039;&#039;King of Kings&#039;&#039;).&lt;br /&gt;
* [[JY Company]] 매퍼는 1k CHR-ROM 페이지를 4개의 네임테이블 화면에 임의로 매핑할 수 있다.&lt;br /&gt;
* [[UNROM 512]] 및 [[GTROM]]은 4화면 구성의 홈브루 매퍼이다.&lt;br /&gt;
&lt;br /&gt;
일반적이지 않은 4화면 레이아웃이 가능한 다른 매퍼:&lt;br /&gt;
* [[VRC6]]은 1k CHR-ROM 페이지를 4개의 네임테이블 화면에 임의로 매핑할 수 있다.&lt;br /&gt;
* [[MMC5]]는 내부 RAM을 사용하여 세 번째 네임테이블을 만들고, 네 번째 네임테이블에 대한 빈 데이터 페이지를 절차적으로 생성하여 (간신히) 4개의 다른 화면을 한 번에 매핑할 수 있다.&lt;br /&gt;
&lt;br /&gt;
[[iNES]] 형식은 헤더에 4개의 네임테이블을 지정할 수 있어, 이와 구조적으로 충돌하지 않는 모든 매퍼에 4화면 RAM 네임테이블을 적용할 수 있다(에뮬레이터에서 지원하는 경우).&lt;br /&gt;
&lt;br /&gt;
카트리지 보드에 추가 네임테이블 RAM을 구현하는 방법에는 여러 가지가 있다:&lt;br /&gt;
* 보드에 2KiB의 RAM을 추가하고 콘솔에 이미 있는 CIRAM과 디코더 칩으로 결합하여 $2000-$2FFF에서 선형으로 접근 가능한 4k 블록의 RAM을 만든다.&lt;br /&gt;
* 보드에 [[6264 static RAM|6264]] 8KiB RAM을 추가하여 콘솔에 있는 CIRAM을 교체한다. 이것은 CIRAM 칩 전체, 즉 $3000-$3EFF에 있는 (일반적으로 사용되지 않는) 4KB의 추가 메모리를 효과적으로 &amp;quot;낭비&amp;quot;한다. 그러나 이것은 더 간단한 단일 칩 솔루션으로 이어진다(또한 오늘날 8KiB RAM 칩은 2KiB 칩보다 더 일반적이고 저렴하다).&lt;br /&gt;
* 보드에 더 큰 RAM을 추가하고 전체 PPU 주소 공간에 매핑한다. 이를 통해 동일한 RAM 칩을 공유하는 $0000-$1FFF의 8KiB 패턴 테이블과 $2000-$2FFF의 4KiB 네임테이블을 사용할 수 있다.&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 기타 ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:Diagonal mirroring diagram.png|대각선&lt;br /&gt;
File:L-shaped mirroring diagram.png|L자형&lt;br /&gt;
File:ACBC mirroring diagram.png|3화면 수직&lt;br /&gt;
File:ABCC mirroring diagram.png|3화면 수평&lt;br /&gt;
File:ABBC mirroring diagram.png|3화면 대각선&lt;br /&gt;
File:Single screen 2000 mirroring diagram.png|1화면 고정&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[iNES Mapper 119|TxSROM]] 변형의 MMC3, [[MMC5]]에서 사용할 수 있는 확장 기술, [[Namco 163]]에 의한 임의의 VRAM 미러링 배열, 또는 [[:Category:Mappers with ROM nametables|ROM 네임테이블]]을 허용하는 매퍼를 사용하는 ROM 미러링 배열과 같은 다른 보드에서는 다른 일반적이지 않은 유형의 미러링을 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;대각선 미러링&#039;&#039;&#039; (CIRAM A10 = PA11 XOR PA10)은 수평 및 수직 미러링 사이를 전환할 필요 없이 스크롤 방향 변경을 용이하게 한다.&lt;br /&gt;
&lt;br /&gt;
Sachen의 [[INES Mapper 243|374N]] 및 [[Sachen 8259|8259 제품군]]에서 볼 수 있는 &#039;&#039;&#039;L자형 미러링&#039;&#039;&#039; (CIRAM A10 = PA11 OR PA10)은 스크롤이 화면 경계에서만 방향을 변경하는 한 네 방향으로 스크롤할 수 있다.&lt;br /&gt;
&lt;br /&gt;
특이한 경우:&lt;br /&gt;
* &#039;&#039;Castlevania 3&#039;&#039;는 [[MMC5]]에서 사용할 수 있는 세 번째 네임테이블 RAM을 사용한다 ([[:Image:Castlevania III 3-Screen Mirroring.png|그림]])&lt;br /&gt;
* &#039;&#039;Laser Invasion&#039;&#039;은 [[MMC5]]에서 사용할 수 있는 세 번째 네임테이블 RAM을 사용한다&lt;br /&gt;
* &#039;&#039;After Burner&#039;&#039;는 [[iNES Mapper 068|Sunsoft-4]] (iNES 68)에서 사용할 수 있는 ROM 네임테이블을 사용하지만 1/H/V 배열만 지원한다.&lt;br /&gt;
* &#039;&#039;Mighty Morphin Power Rangers III, IV (JY Company)&#039;&#039;는 3화면 수평 구성으로 ROM 네임테이블을 사용하지만 하단 화면은 표시되지 않는다 (그러나 하단 화면은 상태 표시줄에서 사용되었다).&lt;br /&gt;
&lt;br /&gt;
=== 미러링 차트 ===&lt;br /&gt;
이 표는 더 간단하고 이해하기 쉬운 미러링 및 스크롤링 기술을 나열한다. 더 복잡한 기술은 매우 다양하다. 보다 포괄적인 조사를 보려면 [[List of games by mirroring technique]]를 참조하라.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 스크롤링 유형 || 미러링 || 예제 게임 || 코멘트&lt;br /&gt;
|-&lt;br /&gt;
| 없음&lt;br /&gt;
| 모두&lt;br /&gt;
| &#039;&#039;Donkey Kong&#039;&#039;, &#039;&#039;Tennis&#039;&#039;&lt;br /&gt;
| 단일 고정 화면만 있으면 모든 미러링 유형을 사용할 수 있다.&lt;br /&gt;
|-&lt;br /&gt;
| 수평만&lt;br /&gt;
| 수직&lt;br /&gt;
| &#039;&#039;Super Mario Bros.&#039;&#039;, &#039;&#039;Gimmick!&#039;&#039;&lt;br /&gt;
| 상단의 [[status bar]]는 [[sprite-0 hit]]로 쉽게 구현할 수 있다(&#039;&#039;Super Mario Bros.&#039;&#039; 참조).&lt;br /&gt;
|-&lt;br /&gt;
| 수직만&lt;br /&gt;
| 수평&lt;br /&gt;
| &#039;&#039;Ice Climber&#039;&#039;, &#039;&#039;Gun.Smoke&#039;&#039;&lt;br /&gt;
| 상태 표시줄이 없으면 수평 미러링이 수직 전용 스크롤링에 가장 적합한 선택이다. 상태 표시줄이 있으면 수직 또는 단일 화면 미러링은 네임테이블에 상태 표시줄을 렌더링할 위치를 제공하며 스크롤 이음새는 막대 아래에 숨겨져야 한다.&lt;br /&gt;
|-&lt;br /&gt;
| 교대 수평/수직&lt;br /&gt;
| 매퍼가 H/V 전환&lt;br /&gt;
| &#039;&#039;Metroid&#039;&#039;, &#039;&#039;Air Fortress&#039;&#039;&lt;br /&gt;
| 움직임은 주어진 시간에 단일 축으로 제한되며, 방향은 새 화면에 도달했을 때만 변경할 수 있다.&lt;br /&gt;
|-&lt;br /&gt;
| 제한된 양방향&lt;br /&gt;
| 수평/수직&lt;br /&gt;
| &#039;&#039;Super Mario Bros. 3&#039;&#039;, &#039;&#039;Fire Emblem&#039;&#039;&lt;br /&gt;
| 스크롤링 축 중 하나를 2화면 너비로만 제한함으로써 다른 축에서 무제한 스크롤링을 간단하게 만든다. 무제한 수평 스크롤링을 사용하면 화면 한쪽에 피할 수 없는 속성 결함이 있을 것이다(&#039;&#039;Super Mario Bros. 3&#039;&#039; 참조). 그러나 무제한 수직 스크롤링을 사용하면 NTSC 지역에서 [[overscan]]으로 숨길 수 있다(&#039;&#039;Fire Emblem&#039;&#039; 참조).&lt;br /&gt;
|-&lt;br /&gt;
| 무제한 양방향&lt;br /&gt;
| 다양함&lt;br /&gt;
| &#039;&#039;Castlevania II&#039;&#039;, &#039;&#039;Battletoads&#039;&#039;, &#039;&#039;Crystalis&#039;&#039;, &#039;&#039;Final Fantasy&#039;&#039;&lt;br /&gt;
| 한 번에 양 축에서 무제한 스크롤링은 게임별 솔루션이 필요한 고급 기술이다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
게임에서 사용되는 미러링 기술을 이해하는 가장 좋은 방법은 디버깅 에뮬레이터를 사용하여 네임테이블을 보는 것이다. [[Status bar|상태 표시줄]]은 일반적으로 화면의 시간 지정된 위치에서 스크롤 분할이 필요하다. 이것은 매퍼 기반 [[IRQ]]로 가장 쉽게 수행할 수 있지만 [[sprite-0 hit]] 또는 다른 기술로도 수행할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
&lt;br /&gt;
* [[PPU scrolling]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:NesDev%EB%B0%9C%EC%B7%8C&amp;diff=150</id>
		<title>틀:NesDev발췌</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:NesDev%EB%B0%9C%EC%B7%8C&amp;diff=150"/>
		<updated>2025-10-01T04:06:22Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{알림 상자 | 제목 = 해당 문서는 NesDev의 문서를 번역했습니다. | 색 = #99EA61 | 왼쪽 그림 = 없음 | 본문 = 해당 문서의 전체 또는 일부는 NesDev의 문서를 번역했으며, 일부 오래된 내용이 포함되어 있을수도 있습니다.&amp;lt;br&amp;gt; 원글링크: [{{{원글링크|링크를 삽입해 주세요}}}] }}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=PPU_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0&amp;diff=149</id>
		<title>PPU 레지스터</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=PPU_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0&amp;diff=149"/>
		<updated>2025-10-01T04:05:59Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NesDev발췌 | 원글링크 = https://www.nesdev.org/wiki/PPU_registers }}&lt;br /&gt;
[[PPU]]는 CPU에 8개의 메모리 매핑된 레지스터를 노출한다. 이것들은 명목상 CPU의 주소 공간에서 $2000부터 $2007까지 위치하지만, 주소가 불완전하게 디코딩되기 때문에 $2008부터 $3FFF까지 8바이트마다 [[Mirroring#Memory Mirroring|미러링]]된다. 예를 들어, $3456에 쓰는 것은 $2006에 쓰는 것과 같다.&lt;br /&gt;
&lt;br /&gt;
PPU는 전원 인가 또는 리셋 직후 렌더링을 시작하지만, 다음 프레임의 프리 렌더 스캔라인에 도달할 때까지 대부분의 레지스터($2000, $2001, $2005, $2006)에 대한 쓰기를 무시한다. 더 구체적으로, CPU와 PPU가 동시에 리셋된다고 가정할 때 약 29658 NTSC CPU 사이클 또는 33132 PAL CPU 사이클 동안이다. 자세한 내용은 [[PPU power up state]] 및 [[Init code]]를 참조하라.&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== 요약 ==&lt;br /&gt;
{| class=&amp;quot;tabular&amp;quot;&lt;br /&gt;
! 일반 이름&lt;br /&gt;
! 주소&lt;br /&gt;
! 비트&lt;br /&gt;
! 타입&lt;br /&gt;
! 노트&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUCTRL|PPUCTRL]]&lt;br /&gt;
! $2000&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;VPHB SINN&amp;lt;/tt&amp;gt; || W || [[NMI]] 활성화 (V), PPU 마스터/슬레이브 (P), 스프라이트 높이 (H), 배경 타일 선택 (B), 스프라이트 타일 선택 (S), 증가 모드 (I), 네임테이블 선택 / X 및 Y 스크롤 비트 8 (NN)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUMASK|PPUMASK]]&lt;br /&gt;
! $2001&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;BGRs bMmG&amp;lt;/tt&amp;gt; || W || 색상 강조 (BGR), 스프라이트 활성화 (s), 배경 활성화 (b), 스프라이트 왼쪽 열 활성화 (M), 배경 왼쪽 열 활성화 (m), 그레이스케일 (G)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUSTATUS|PPUSTATUS]]&lt;br /&gt;
! $2002&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;VSO- ----&amp;lt;/tt&amp;gt; || R || vblank (V), 스프라이트 0 히트 (S), 스프라이트 오버플로 (O); 읽기는 $2005/$2006의 쓰기 쌍을 리셋한다&lt;br /&gt;
|-&lt;br /&gt;
! [[#OAMADDR|OAMADDR]]&lt;br /&gt;
! $2003&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;AAAA AAAA&amp;lt;/tt&amp;gt; || W || [[PPU OAM|OAM]] 읽기/쓰기 주소&lt;br /&gt;
|-&lt;br /&gt;
! [[#OAMDATA|OAMDATA]]&lt;br /&gt;
! $2004&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;DDDD DDDD&amp;lt;/tt&amp;gt; || RW || OAM 데이터 읽기/쓰기&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUSCROLL|PPUSCROLL]]&lt;br /&gt;
! $2005&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;XXXX XXXX YYYY YYYY&amp;lt;/tt&amp;gt; || Wx2 || X 및 Y 스크롤 비트 7-0 (두 번 쓰기: X 스크롤, 그 다음 Y 스크롤)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUADDR|PPUADDR]]&lt;br /&gt;
! $2006&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;..AA AAAA AAAA AAAA&amp;lt;/tt&amp;gt; || Wx2 || VRAM 주소 (두 번 쓰기: 최상위 바이트, 그 다음 최하위 바이트)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUDATA|PPUDATA]]&lt;br /&gt;
! $2007&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;DDDD DDDD&amp;lt;/tt&amp;gt; || RW || VRAM 데이터 읽기/쓰기&lt;br /&gt;
|-&lt;br /&gt;
! [[#OAMDMA|OAMDMA]]&lt;br /&gt;
! $4014&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;AAAA AAAA&amp;lt;/tt&amp;gt; || W || OAM DMA 상위 주소&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
레지스터 타입:&lt;br /&gt;
* &#039;&#039;&#039;R&#039;&#039;&#039; - 읽기 가능&lt;br /&gt;
* &#039;&#039;&#039;W&#039;&#039;&#039; - 쓰기 가능&lt;br /&gt;
* &#039;&#039;&#039;x2&#039;&#039;&#039; - 두 번의 1바이트 접근으로 접근하는 내부 2바이트 상태&lt;br /&gt;
&lt;br /&gt;
{{Anchor|Ports}}&lt;br /&gt;
== MMIO 레지스터 ==&lt;br /&gt;
&lt;br /&gt;
PPU는 CPU와의 통신에 사용하는 내부 데이터 버스를 가지고 있다.&lt;br /&gt;
이 버스는 [[Visual 2C02]]에서 `_io_db`로, FCEUX에서는 `PPUGenLatch`로 불리며&amp;lt;ref&amp;gt;[http://sourceforge.net/p/fceultra/code/HEAD/tree/fceu/trunk/src/ppu.cpp#l183 ppu.cpp] by Bero and Xodnizel&amp;lt;/ref&amp;gt;, PPU의 여러 부분으로 이어지는 매우 긴 트레이스의 커패시턴스로 인해 8비트 동적 래치처럼 동작한다.&lt;br /&gt;
명목상 읽기 전용인 PPUSTATUS를 포함한 모든 PPU 포트에 값을 쓰면 이 래치가 채워진다.&lt;br /&gt;
읽기 가능한 포트(PPUSTATUS, OAMDATA, 또는 PPUDATA)를 읽는 것도 읽은 비트로 래치를 채운다.&lt;br /&gt;
명목상 &amp;quot;쓰기 전용&amp;quot; 레지스터를 읽으면 래치의 현재 값이 반환되며, PPUSTATUS의 사용되지 않는 비트도 마찬가지다.&lt;br /&gt;
이 값의 적어도 하나의 비트는 3ms에서 30ms 후에 붕괴되며, PPU가 따뜻할 때 더 빠르다. &amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=24639 lidnariq의 PPU 붕괴 테스트 ROM에 대한 답글]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUCTRL}}{{Anchor|Reg2000}}{{Anchor|Controller_($2000)_&amp;gt;_write}}&lt;br /&gt;
=== PPUCTRL - 기타 설정 ($2000 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 VPHB SINN&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 |||| ||++- 기본 네임테이블 주소&lt;br /&gt;
 |||| ||    (0 = $2000; 1 = $2400; 2 = $2800; 3 = $2C00)&lt;br /&gt;
 |||| |+--- PPUDATA의 CPU 읽기/쓰기 당 VRAM 주소 증가&lt;br /&gt;
 |||| |     (0: 1씩 증가, 가로로 진행; 1: 32씩 증가, 세로로 진행)&lt;br /&gt;
 |||| +---- 8x8 스프라이트의 스프라이트 패턴 테이블 주소&lt;br /&gt;
 ||||       (0: $0000; 1: $1000; 8x16 모드에서는 무시됨)&lt;br /&gt;
 |||+------ 배경 패턴 테이블 주소 (0: $0000; 1: $1000)&lt;br /&gt;
 ||+------- [[Sprite size]] (0: 8x8 픽셀; 1: 8x16 픽셀 – [[PPU OAM#Byte 1]] 참조)&lt;br /&gt;
 |+-------- PPU 마스터/슬레이브 선택&lt;br /&gt;
 |          (0: EXT 핀에서 배경 읽기; 1: EXT 핀에 색상 출력)&lt;br /&gt;
 +--------- [[wikipedia:Vertical blanking interval|Vblank]] [[NMI]] 활성화 (0: 꺼짐, 1: 켜짐)&lt;br /&gt;
&lt;br /&gt;
PPUCTRL (&amp;quot;컨트롤&amp;quot; 또는 &amp;quot;컨트롤러&amp;quot; 레지스터)은 렌더링, 스크롤 위치, vblank NMI, 그리고 듀얼 PPU 구성과 관련된 설정의 조합을 포함한다. [[PPU power up state|전원/리셋 후]], 이 레지스터에 대한 쓰기는 첫 번째 프리 렌더 스캔라인까지 무시된다.&lt;br /&gt;
&lt;br /&gt;
==== Vblank NMI ====&lt;br /&gt;
&lt;br /&gt;
PPUCTRL에서 NMI를 활성화하면 vblank 시작 시(스캔라인 241, 도트 1) NMI 핸들러가 호출된다. 이것은 소프트웨어가 디스플레이의 프레임 속도로 실행될 수 있도록 신뢰할 수 있는 시간 소스를 제공하고, 소프트웨어에 vblank를 알린다. Vblank는 렌더링이 활성화된 상태에서 소프트웨어가 VRAM 및 OAM에 데이터를 보낼 수 있는 유일한 시간이며, 이 NMI는 vblank를 감지하는 &#039;&#039;유일한&#039;&#039; 신뢰할 수 있는 방법이다. [[#PPUSTATUS|PPUSTATUS]]에서 vblank 플래그를 폴링하는 것은 vblank를 완전히 놓칠 수 있다.&lt;br /&gt;
&lt;br /&gt;
[[#PPUSTATUS|PPUSTATUS]]의 vblank 플래그가 1인 동안 NMI 활성화를 0에서 1로 변경하면 즉시 NMI가 트리거된다. 이것은 PPUSTATUS 레지스터가 아직 읽히지 않은 경우 vblank 중에 발생한다. NMI 루틴이 vblank에서 너무 늦게 실행되어 제시간에 끝나지 못하게 하여 그래픽 결함을 일으키거나, 게임이 실제로 발생한 것보다 더 많은 프레임을 처리하게 할 수 있다. 이 문제를 피하려면, PPUCTRL에서 NMI를 활성화하기 전에 먼저 PPUSTATUS를 읽어 vblank 플래그를 지우는 것이 신중하다.&lt;br /&gt;
&lt;br /&gt;
==== 스크롤링 ====&lt;br /&gt;
PPUCTRL 비트 0과 1의 현재 네임테이블 비트는 스크롤 좌표의 최상위 비트로 간주될 수 있으며, 이는 9비트 너비이다([[PPU_nametables|네임테이블]] 및 [[#PPUSCROLL|PPUSCROLL]] 참조):&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 .... ..YX&lt;br /&gt;
        ||&lt;br /&gt;
        |+- X 스크롤 위치 비트 8 (즉, X에 256을 더함)&lt;br /&gt;
        +-- Y 스크롤 위치 비트 8 (즉, Y에 240을 더함)&lt;br /&gt;
&lt;br /&gt;
이 두 비트는 [[PPUSCROLL]]에 기록된 값과 동일한 [[#Internal registers|내부 t 레지스터]]로 이동하며, 스크롤 위치를 완전히 지정하려면 [[#PPUSCROLL|PPUSCROLL]]과 함께 기록되어야 한다.&lt;br /&gt;
&lt;br /&gt;
==== 마스터/슬레이브 모드와 EXT 핀 ====&lt;br /&gt;
PPUCTRL의 비트 6은 PPU를 손상시킬 수 있으므로 순정 콘솔에서는 절대 설정해서는 안 된다.&lt;br /&gt;
&lt;br /&gt;
이 비트가 클리어되면(일반적인 경우), PPU는 EXT 핀에서 배경색에 대한 [[PPU_palettes|팔레트 인덱스]]를 가져온다. 순정 NES는 이 핀들을 접지하여 예상대로 팔레트 인덱스 0을 배경색으로 만든다. EXT 핀에 연결된 보조 그림 생성기는 배경 팔레트의 색상을 사용하여 배경을 다른 이미지로 교체할 수 있으며, 이는 시차 스크롤링과 같은 기능에 사용될 수 있다.&lt;br /&gt;
&lt;br /&gt;
비트 6을 설정하면 PPU는 각 픽셀에 대해 EXT 핀에 팔레트 메모리 인덱스의 하위 4비트를 출력한다. 4비트만 출력되므로 일반적으로 배경과 스프라이트 픽셀을 이 방법으로 구별할 수 없다. 이 비트를 설정해도 PPU의 컴포지트 비디오 출력의 이미지는 영향을 받지 않는다. 수정되지 않은 NES에서는 EXT 핀이 접지되어 있으므로, 비트 6을 설정하는 것은 0이 아닌 픽셀 값을 출력할 때마다 칩을 손상시킬 수 있으므로 권장되지 않는다(실질적으로 Vcc와 GND를 함께 단락시키기 때문). 투명 픽셀에 대한 EXT 출력은 일반적인 배경색이 아니라 해당 배경 슬라이버 팔레트의 항목 0이라는 점에 유의하라. 렌더링이 비활성화되면 [[PPU palettes|배경 재정의]]에 관계없이 EXT 출력은 항상 인덱스 0이다.&lt;br /&gt;
&lt;br /&gt;
==== 비트 0 경쟁 조건 ====&lt;br /&gt;
수평 네임테이블 배열(일명 수직 미러링) 또는 4화면 VRAM을 사용하는 경우 vblank 외부에서 이 레지스터에 쓸 때 주의하라.&lt;br /&gt;
특정 CPU-PPU 정렬의 경우, [[PPU scrolling#At dot 257 of each scanline|도트 257]]에서 시작하는 쓰기는 다음 스캔라인만 왼쪽 네임테이블에서 잘못 그려지게 한다.&lt;br /&gt;
이것은 눈에 보이는 결함을 유발할 수 있으며, 해당 스캔라인에 대한 스프라이트 0 히트를 방해할 수도 있다(잘못된 배경으로 그려지기 때문).&lt;br /&gt;
이 결함은 수평 또는 단일 화면 미러링에서는 왼쪽과 오른쪽 네임테이블이 동일하기 때문에 효과가 없다.&lt;br /&gt;
도트 257에서 시작하여 도트 258까지 계속되는 쓰기만 이 결함을 유발할 수 있다. 다른 모든 수평 타이밍은 안전하다.&lt;br /&gt;
이 결함은 구체적으로 열린 버스의 값을 레지스터에 쓰는데, 이는 거의 항상 주소의 상위 바이트가 될 것이다. 원하는 네임테이블에 따라 이 레지스터 또는 $2100에 있는 이 레지스터의 미러에 쓰는 것이 [//forums.nesdev.org/viewtopic.php?p=230434#p230434 기능적인 해결 방법]으로 보인다.&lt;br /&gt;
&lt;br /&gt;
이것은 &#039;&#039;슈퍼 마리오 브라더스&#039;&#039;에서 프로그램이 게임 로직 끝에 PPUCTRL에 쓸 때 가끔 [[Game bugs|보이는 결함]]을 생성한다.&lt;br /&gt;
게임 로직 중에 NMI를 껐다가 게임 로직이 끝나면 NMI를 다시 켜서 게임 로직이 끝나기 전에 NMI 핸들러가 다시 호출되는 것을 방지하는 것으로 보인다.&lt;br /&gt;
또 다른 해결 방법은 PPU의 NMI 활성화를 사용하는 대신 소프트웨어 플래그를 사용하여 NMI 재진입을 방지하는 것이다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUMASK}}{{Anchor|Reg2001}}{{Anchor|Mask_($2001)_&amp;gt;_write}}&lt;br /&gt;
=== PPUMASK - 렌더링 설정 ($2001 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 BGRs bMmG&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 |||| |||+- 그레이스케일 (0: 일반 색상, 1: 그레이스케일)&lt;br /&gt;
 |||| ||+-- 1: 화면 왼쪽 8픽셀에 배경 표시, 0: 숨기기&lt;br /&gt;
 |||| |+--- 1: 화면 왼쪽 8픽셀에 스프라이트 표시, 0: 숨기기&lt;br /&gt;
 |||| +---- 1: 배경 렌더링 활성화&lt;br /&gt;
 |||+------ 1: 스프라이트 렌더링 활성화&lt;br /&gt;
 ||+------- 빨간색 강조 (PAL/Dendy에서는 녹색)&lt;br /&gt;
 |+-------- 녹색 강조 (PAL/Dendy에서는 빨간색)&lt;br /&gt;
 +--------- 파란색 강조&lt;br /&gt;
&lt;br /&gt;
PPUMASK (&amp;quot;마스크&amp;quot; 레지스터)는 스프라이트와 배경의 렌더링 및 색상 효과를 제어한다. [[PPU power up state|전원/리셋 후]], 이 레지스터에 대한 쓰기는 첫 번째 프리 렌더 스캔라인까지 무시된다.&lt;br /&gt;
&lt;br /&gt;
가장 일반적으로, PPUMASK는 게임 플레이 외부에서 VRAM으로 대량의 데이터를 전송할 수 있도록 $00으로 설정되고, 게임 플레이 중에는 색상 효과 없이 모든 렌더링을 활성화하기 위해 $1E로 설정된다.&lt;br /&gt;
&lt;br /&gt;
==== 렌더링 제어 ====&lt;br /&gt;
&lt;br /&gt;
렌더링은 PPU가 메모리를 적극적으로 가져와 화면에 이미지를 그리는 과정이다. PPUMASK에서 스프라이트 및 배경 렌더링 중 하나 또는 둘 다 활성화되어 있는 한 렌더링 전체가 활성화된다. 한 구성 요소가 활성화되고 다른 구성 요소가 활성화되지 않은 경우, 비활성화된 구성 요소는 단순히 투명하게 처리된다. 렌더링 프로세스는 그 외에는 영향을 받지 않는다. 비트 3과 4를 통해 두 구성 요소가 모두 비활성화되면 렌더링 프로세스가 중지되고 PPU는 배경색을 표시한다.&lt;br /&gt;
&lt;br /&gt;
렌더링 중에는 PPU가 VRAM과 OAM을 적극적으로 사용한다. 이로 인해 CPU는 [[#PPUDATA|PPUDATA]]를 통해 VRAM에 접근하거나 [[#OAMDATA|OAMDATA]]를 통해 OAM에 접근할 수 없으므로, 이러한 접근은 렌더링 외부에서 수행되어야 한다. 즉, vblank 중(게임 플레이 중 데이터 전송) 또는 렌더링이 꺼진 상태(레벨 로드와 같은 대규모 데이터 전송)에서 수행해야 한다. 수많은 하드웨어 버그와 제한을 피하기 위해, 일반적으로 렌더링은 vblank 중에만 켜거나 끄는 것이 좋다. 이는 원하는 PPUMASK 값을 레지스터 자체가 아닌 변수에 쓰고 NMI 핸들러의 vblank 중에만 해당 변수를 PPUMASK에 복사하여 수행할 수 있다.&lt;br /&gt;
&lt;br /&gt;
PPU는 화면의 가장 왼쪽 8픽셀에서만 스프라이트와 배경을 선택적으로 숨길 수 있으며, 이를 투명하게 만들어 배경색을 그린다. 스프라이트의 경우, 이는 스프라이트가 오른쪽 가장자리에서처럼 화면 왼쪽 가장자리에서 부분적으로 걸칠 수 없는 제한인 스프라이트 팝인을 피하는 데 유용할 수 있다. 배경의 경우, 이는 수직 또는 단일 화면 네임테이블 배열로 수평으로 스크롤할 때 타일 아티팩트를 제거하고 속성 아티팩트를 줄일 수 있다. 이러한 배열은 스크롤 이음새를 화면 밖으로 숨길 수 없기 때문이다. 배경색은 배경 아트에 사용된 색상과 일치하지 않을 수 있으므로 왼쪽 열을 비활성화하는 것이 사소한 아티팩트보다 더 산만할 수 있다.&lt;br /&gt;
&lt;br /&gt;
참고:&lt;br /&gt;
* 렌더링 중에 PPUDATA에 쓰면 VRAM이 손상될 수 있으므로, 쓰기는 vblank 중이거나 PPUMASK 비트 3과 4에서 렌더링이 비활성화된 상태에서 수행해야 한다.&lt;br /&gt;
* 배경이나 스프라이트가 비활성화된 영역에서는 스프라이트 0 히트가 트리거되지 않는다.&lt;br /&gt;
* 렌더링 토글은 쓰기 후 약 3-4 도트 후에 적용된다. 이 지연은 Battletoads가 충돌을 피하기 위해 필요하다.&lt;br /&gt;
* 화면 중간에 렌더링을 토글하면 종종 OAM의 1개 행이 손상되고 현재 및 다음 스캔라인에 대해 잘못된 스프라이트가 그려진다. (참조: [[Errata#OAM and Sprites|정오표]])&lt;br /&gt;
* 화면 중간에 렌더링을 끄면 [[#Internal registers|내부 v 레지스터]]의 하위 14비트 값이 $3C00-$3FFF 사이인 경우 팔레트 RAM이 손상될 수 있다.&lt;br /&gt;
* 렌더링을 늦게 켜면 프리 렌더 끝의 도트가 절대 건너뛰지 않게 되어 정지된 화면에서 도트 크롤이 발생할 수 있다.&lt;br /&gt;
* 렌더링을 늦게 켜면 [[PPU_scrolling#Split_X/Y_scroll|복잡한 쓰기 시리즈로 수동으로 설정]]하지 않는 한 PPU의 스크롤 값이 잘못된다.&lt;br /&gt;
&lt;br /&gt;
==== 색상 제어 ====&lt;br /&gt;
&lt;br /&gt;
그레이스케일 모드는 모든 색상을 회색 또는 흰색 음영으로 강제한다. 이것은 색상을 $30과 비트 AND 연산하여 수행되며, 모든 색상이 회색 열($00, $10, $20, $30)에서 나오게 한다. 이 열에는 검은색이 없다는 점에 유의하라. 이 AND 동작은 색상이 뒤섞인 RGB PPU(2C04 시리즈)가 실제로 회색 음영을 얻는 것이 아니라 $x0 열에 있는 색상을 얻는다는 것을 의미한다. 팔레트 RAM에서 읽을 때 반환된 값은 이 AND 동작을 반영하지만 기본 데이터는 보존된다. 팔레트 쓰기는 그레이스케일 모드에 관계없이 정상적으로 작동한다.&lt;br /&gt;
&lt;br /&gt;
[[Color emphasis]]는 다른 두 색상 구성 요소를 어둡게 하여 선택한 구성 요소를 비교적 밝게 만들어 강조하는 색조 효과를 유발한다. 3가지 구성 요소를 모두 강조하면 모든 색상이 단순히 어두워진다. 이것은 그레이스케일과 독립적으로 작동하여 회색을 착색할 수 있다. PAL 및 Dendy PPU는 강조 비트 순서가 다르므로 포트 및 이중 지역 게임은 비트를 재정렬해야 한다. 또한 RGB PPU의 강조는 완전히 다르며, 대신 강조된 구성 요소의 밝기를 최대화하고 모든 구성 요소가 강조될 때 완전히 흰색 화면을 생성한다. RGB 강조는 훨씬 덜 유용하며 일반적으로 피하는 것이 가장 좋다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUSTATUS}}{{Anchor|Reg2002}}{{Anchor|Status_($2002)_&amp;lt;_read}}&lt;br /&gt;
=== PPUSTATUS - 렌더링 이벤트 ($2002 읽기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 VSOx xxxx&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 |||+-++++- ([[Open_bus_behavior#PPU_open_bus|PPU 열린 버스]] 또는 2C05 PPU 식별자)&lt;br /&gt;
 ||+------- [[PPU_sprite_evaluation#Sprite_overflow_bug|스프라이트 오버플로]] 플래그&lt;br /&gt;
 |+-------- [[PPU_OAM#Sprite_zero_hits|스프라이트 0 히트]] 플래그&lt;br /&gt;
 +--------- Vblank 플래그, 읽을 때 지워짐. &amp;lt;u&amp;gt;&#039;&#039;&#039;신뢰할 수 없음&#039;&#039;&#039;&amp;lt;/u&amp;gt;; 아래 참조.&lt;br /&gt;
&lt;br /&gt;
PPUSTATUS (&amp;quot;상태&amp;quot; 레지스터)는 렌더링 관련 이벤트의 상태를 반영하며 주로 타이밍에 사용된다. 이 레지스터의 세 플래그는 프리렌더 스캔라인의 도트 1에서 자동으로 지워진다. 설정 및 해제 타이밍에 대한 자세한 내용은 [[PPU 렌더링]]을 참조하라.&lt;br /&gt;
&lt;br /&gt;
이 레지스터를 읽으면 PPU의 [[#Internal registers|내부 w 레지스터]]가 지워지는 부작용이 있다. 쓰기가 올바른 순서로 이루어지도록 [[#PPUSCROLL|PPUSCROLL]] 및 [[#PPUADDR|PPUADDR]]에 쓰기 전에 일반적으로 읽는다.&lt;br /&gt;
&lt;br /&gt;
==== Vblank 플래그 ====&lt;br /&gt;
&lt;br /&gt;
vblank 플래그는 vblank 시작 시(스캔라인 241, 도트 1) 설정된다. PPUSTATUS를 읽으면 이 플래그의 현재 상태가 반환된 다음 지워진다. 읽어서 vblank 플래그가 지워지지 않으면 프리렌더 스캔라인의 도트 1에서 자동으로 지워진다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;vblank 플래그를 읽는 것은 vblank를 감지하는 신뢰할 수 있는 방법이 아니다. 대신 [[NMI thread|NMI]]를 사용해야 한다.&#039;&#039;&#039;&amp;lt;/u&amp;gt; 플래그가 설정되기 전 도트(스캔라인 241, 도트 0)에서 플래그를 읽으면 0으로 읽히고 지워지므로, vblank 플래그에 대해 PPUSTATUS를 폴링하면 vblank를 놓치고 게임이 버벅거릴 수 있다. 이 경우 NMI도 억제되며, 다음 도트 또는 두 도트에 걸친 읽기에 의해서도 억제될 수 있다. NTSC 및 PAL에서는 플래그가 두 프레임 연속으로 떨어지지 않는 것이 보장되지만, Dendy에서는 [[PPU_power_up_state#Dendy|매 프레임마다 발생]]하여 게임이 충돌할 수 있다. NMI를 사용하면 소프트웨어가 매 프레임마다 vblank를 올바르게 감지할 수 있다. 또한 PlayChoice-10에서도 필요하며, NMI가 너무 오랫동안 비활성화되면 게임을 거부한다. 콘솔을 부팅하는 동안에는 vblank 플래그를 폴링해야 하지만, 이 시점의 타이밍은 중요하지 않다(안전한 부팅에 대한 자세한 내용은 [[Init code]] 참조).&lt;br /&gt;
&lt;br /&gt;
vblank 플래그는 NMI 생성에 사용되며, 이 플래그가 1인 동안 NMI를 활성화하면 즉시 NMI가 발생한다([[PPU_registers#Vblank_NMI|PPUCTRL]] 참조).&lt;br /&gt;
&lt;br /&gt;
==== 스프라이트 0 히트 플래그 ====&lt;br /&gt;
&lt;br /&gt;
[[PPU_OAM#Sprite_zero_hits|스프라이트 0 히트]]는 OAM의 첫 번째 스프라이트(스프라이트 0)와 배경 간의 픽셀 단위 충돌을 감지하는 하드웨어 충돌 감지 기능이다. 스프라이트 0 히트 플래그는 스프라이트 0의 불투명한 픽셀이 배경의 불투명한 픽셀과 겹칠 때 즉시 설정되며, 스프라이트 우선 순위와는 무관하다. &#039;불투명&#039;은 픽셀이 &#039;투명&#039;하지 않다는 것을 의미한다. 즉, [[PPU_pattern_tables|두 패턴 비트]]가 %00이 아니다. 플래그는 프리렌더 스캔라인의 도트 1까지 설정된 상태를 유지하므로 프레임당 하나의 충돌만 감지할 수 있다.&lt;br /&gt;
&lt;br /&gt;
이 플래그는 충돌을 감지하지만 주로 타이밍에 사용된다. 많은 게임에서 스프라이트 0을 화면의 고정된 위치에 배치하고 이 플래그가 설정될 때까지 폴링한다. 이를 통해 CPU는 화면에서 대략적인 위치를 파악하여 하드웨어 레지스터에 대한 화면 중간 쓰기 시간을 맞출 수 있다. 일반적으로 이것은 &#039;&#039;슈퍼 마리오 브라더스&#039;&#039;와 같이 배경 기반 HUD를 허용하기 위해 화면 중간에 스크롤 위치를 변경하는 데 사용된다. 그러나 일부 최신 홈브루 게임은 [https://forums.nesdev.org/viewtopic.php?t=15850 &#039;&#039;Lunar Limit&#039;&#039;] 및 [https://fiskbit.itch.io/irritating-ship &#039;&#039;Irritating Ship&#039;&#039;]과 같이 실제 충돌에 이를 사용한다.&lt;br /&gt;
&lt;br /&gt;
스프라이트 0 히트는 X=255에서 또는 [[#PPUMASK|PPUMASK]]를 통해 스프라이트나 배경이 비활성화된 곳에서는 충돌을 감지할 수 없다. 여기에는 가장 왼쪽 8픽셀이 숨겨져 있을 때 X=0..7이 포함된다. 그러나 PAL의 왼쪽 및 오른쪽 가장자리 자르기에는 영향을 받지 않는다.&lt;br /&gt;
&lt;br /&gt;
타이밍에 이 플래그를 사용할 때 몇 가지 중요한 고려 사항이 있다.&lt;br /&gt;
* 스프라이트 0 히트는 프리렌더 스캔라인까지 지워지지 않으므로 소프트웨어는 이전 프레임의 히트를 현재 프레임의 히트로 착각할 수 있다. 따라서 플래그가 다시 설정되기를 기다리기 전에 플래그가 지워질 때까지 폴링해야 할 수 있다.&lt;br /&gt;
* 게임이 스프라이트 0 히트가 발생할 것으로 예상하고 발생하지 않으면 종종 충돌이 발생한다. 히트가 발생하지 않을 위험이 있는 경우(아마도 스크롤할 때 겹침이 발생하지 않거나 전원 주기, 콘솔 또는 에뮬레이터에 따라 달라질 수 있는 정확한 화면 중간 타이밍에 의존하기 때문에) 폴링 루프를 빠져나갈 다른 방법이 있는 것이 중요하다. 예를 들어, vblank 플래그를 폴링하거나 NMI 핸들러가 게임이 여전히 스프라이트 0 히트를 폴링하고 있는지 확인하여 이를 수행할 수 있다.&lt;br /&gt;
* 게임은 종종 랙 프레임에서 스프라이트 0 히트를 처리하지 않아 화면 중간 이벤트가 발생하지 않는다. 이로 인한 일반적인 결과는 랙 중에 HUD가 깜박이는 것이다. 적어도 랙 프레임에서 NMI 핸들러에서 스프라이트 0 히트를 처리하면 이 문제를 해결할 수 있다.&lt;br /&gt;
&lt;br /&gt;
==== 스프라이트 오버플로 플래그 ====&lt;br /&gt;
&lt;br /&gt;
스프라이트 오버플로 플래그는 스캔라인에 8개 이상의 스프라이트가 있을 때마다 설정되도록 의도되었다. 불행히도 이를 감지하는 논리가 제대로 작동하지 않아 PPU가 9번째 스프라이트를 검색할 때 OAM에서 잘못된 인덱스를 확인하게 된다. 이로 인해 거짓 양성과 거짓 음성이 모두 발생한다. 잘못된 동작에 대한 자세한 내용은 [[PPU sprite evaluation#Sprite_overflow_bug|PPU 스프라이트 평가]]를 참조하라. 실제로 스프라이트 오버플로는 스프라이트 0 히트와 같이 타이밍에 사용되지만, 버그가 있는 동작과 9개의 스프라이트 타일 비용 때문에 일반적으로 두 개 이상의 타이밍 소스가 필요할 때만 사용된다. 스프라이트 0 히트와 마찬가지로 이 플래그는 프리렌더 스캔라인 시작 시 지워지며 프레임당 한 번만 설정할 수 있다.&lt;br /&gt;
&lt;br /&gt;
스프라이트 오버플로를 사용하는 것은 종종 최후의 수단이다. 매퍼 IRQ를 사용할 수 없는 경우 [[APU_DMC#Usage_of_DMC_for_syncing_to_video|DMC IRQ]]는 타이밍에 효과적인 대안이 될 수 있지만 사용하기 복잡하다.&lt;br /&gt;
&lt;br /&gt;
==== 2C05 식별자 ====&lt;br /&gt;
&lt;br /&gt;
2C05 시리즈 아케이드 PPU는 PPU 열린 버스 대신 비트 4-0에 식별자를 반환한다. 이 값은 일종의 복사 방지 형태로 게임에서 확인한다. 이는 소비자용 2C05-99에는 적용되지 않으며, 평소와 같이 열린 버스를 반환한다. PPU에서 직접 데이터를 수집하지는 않았지만 2C05 게임은 다음 값을 예상한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;tabular&amp;quot;&lt;br /&gt;
! PPU&lt;br /&gt;
! 마스크&lt;br /&gt;
! 값&lt;br /&gt;
|-&lt;br /&gt;
| 2C05-02&lt;br /&gt;
| $3F&lt;br /&gt;
| $3D&lt;br /&gt;
|-&lt;br /&gt;
| 2C05-03&lt;br /&gt;
| $1F&lt;br /&gt;
| $1C&lt;br /&gt;
|-&lt;br /&gt;
| 2C05-04&lt;br /&gt;
| $1F&lt;br /&gt;
| $1B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Anchor|OAMADDR}}{{Anchor|Reg2003}}{{Anchor|OAM_address_($2003)_&amp;gt;_write}}&lt;br /&gt;
=== OAMADDR - 스프라이트 RAM 주소 ($2003 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 AAAA AAAA&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- OAM 주소&lt;br /&gt;
&lt;br /&gt;
여기에 접근하려는 [[PPU OAM|OAM]]의 주소를 쓴다. 대부분의 게임은 여기에 $00을 쓰고 [[#OAMDMA|OAMDMA]]를 사용한다. (DMA는 2A03/7 칩에 구현되어 있으며 [[#OAMDATA|OAMDATA]]에 반복적으로 쓰는 방식으로 작동한다)&lt;br /&gt;
&lt;br /&gt;
==== 렌더링 중 값 ====&lt;br /&gt;
&lt;br /&gt;
OAMADDR은 프리렌더 및 가시 스캔라인의 257-320 틱(스프라이트 타일 로딩 간격) 각각 동안 0으로 설정된다. 이는 또한 정상적으로 완료된 렌더링 프레임의 끝에서 OAMADDR이 항상 0으로 돌아온다는 것을 의미한다.&lt;br /&gt;
&lt;br /&gt;
렌더링이 스캔라인 중간에 활성화되면&amp;lt;ref name=&amp;quot;OAMADDR Clarification&amp;quot;/&amp;gt;, 가시 스캔라인의 틱 65에서 OAM 스프라이트 평가가 시작되기 전에 OAMADDR이 0으로 설정되지 않은 경우 추가적인 결과가 발생한다. 이 틱에서의 OAMADDR 값은 이 스캔라인에 대한 스프라이트 평가의 시작 주소를 결정하며, 이로 인해 OAMADDR의 스프라이트가 [[sprite-0 hit]] 및 우선 순위 모두에 대해 스프라이트 0인 것처럼 처리될 수 있다. OAMADDR이 정렬되지 않고 OAM 항목의 Y 위치(첫 번째 바이트)를 가리키지 않으면, 가리키는 모든 것(타일 인덱스, 속성 또는 X 좌표)이 Y 위치로 재해석되고 다음 바이트도 유사하게 재해석된다. OAM의 끝에 도달하면 더 이상 스프라이트가 발견되지 않으며, 시작 OAMADDR 이전의 모든 스프라이트를 효과적으로 숨긴다.&lt;br /&gt;
&lt;br /&gt;
==== OAMADDR 주의사항 ====&lt;br /&gt;
&lt;br /&gt;
2C02G에서는 OAMADDR에 쓰면 OAM이 손상된다. 정확한 손상은 완전히 설명되지 않았지만, 이는 일반적으로 대상 주소의 8바이트 행 위에 스프라이트 8과 9(주소 $20)를 복사하는 것으로 보인다. 이 복사의 소스 주소는 CPU 버스의 이전 값(가장 자주 $2003 피연산자에서 $20)에서 오는 것으로 보인다.&amp;lt;ref name=&amp;quot;OAMADDR Clarification&amp;quot;&amp;gt;[//forums.nesdev.org/viewtopic.php?p=285674#p285674 OAMDATA $2003 손상 명확화?] - 포럼 스레드&amp;lt;/ref&amp;gt;&amp;lt;ref name = &amp;quot;OAMglitch&amp;quot;&amp;gt;[//forums.nesdev.org/viewtopic.php?t=10189 수동 OAM 쓰기 결함] blargg의 스레드&amp;lt;/ref&amp;gt; 다른 가능한 동작도 있을 수 있다. 그런 다음 OAM의 256바이트를 모두 써서 이 문제를 해결할 수 있지만, [[PPU OAM#Dynamic RAM decay|OAM 붕괴]]가 시작되기 전의 제한된 시간으로 인해 일반적으로 OAMDMA를 통해 수행해야 한다.&lt;br /&gt;
&lt;br /&gt;
또한 렌더링이 시작될 때 OAMADDR이 8보다 작지 않으면 &amp;lt;tt&amp;gt;OAMADDR &amp;amp; 0xF8&amp;lt;/tt&amp;gt;에서 시작하는 8바이트가 OAM의 첫 8바이트에 복사되는 경우도 있다. 이것이 관련이 있을 가능성이 높다. Dendy에서는 후자의 버그가 2C02 호환성을 위해 필요하다.&lt;br /&gt;
&lt;br /&gt;
2C03, 2C04, 2C05&amp;lt;ref name=&amp;quot;noOAMglitch&amp;quot;&amp;gt;[//forums.nesdev.org/viewtopic.php?p=179676#p179676 $2003에 대한 쓰기는 OAM 손상을 일으키지 않는 것으로 보임] lidnariq의 게시물&amp;lt;/ref&amp;gt; 및 2C07에서는 OAMADDR이 의도한 대로 작동하는 것으로 알려져 있다. 이 버그가 2C02의 모든 리비전에 존재하는지는 알려져 있지 않다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|OAMDATA}}{{Anchor|Reg2004}}{{Anchor|OAM_data_($2004)_&amp;lt;&amp;gt;_read/write}}&lt;br /&gt;
=== OAMDATA - 스프라이트 RAM 데이터 ($2004 읽기/쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 DDDD DDDD&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- OAM 데이터&lt;br /&gt;
&lt;br /&gt;
여기에 OAM 데이터를 쓴다. 쓰기는 쓰기 후 [[#OAMADDR|OAMADDR]]을 증가시킨다. 읽기는 그렇지 않다. 수직 또는 강제 블랭킹 중 읽기는 해당 주소의 OAM에서 값을 반환한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;대부분의 경우 이 레지스터에 직접 쓰지 마라.&#039;&#039;&#039; OAM에 대한 변경은 일반적으로 vblank 중에만 이루어져야 하므로, OAMDATA를 통한 쓰기는 부분 업데이트에만 효과적이다. 한 vblank 간격 내에 모든 OAM을 업데이트하기에는 너무 느리고, 위에서 설명한 것처럼 부분 쓰기는 손상을 유발하기 때문이다. 대부분의 게임은 대신 [[#OAMDMA|OAMDMA]]를 통해 DMA 기능을 사용한다.&lt;br /&gt;
&lt;br /&gt;
* PPU가 렌더링하는 동안 OAMDATA를 읽으면 스프라이트 평가 및 로딩 중 내부 OAM 접근이 노출된다. &#039;&#039;Micro Machines&#039;&#039;가 이를 수행한다.&lt;br /&gt;
* 렌더링 중(프리 렌더 라인 및 가시 라인 0-239에서, 스프라이트 또는 배경 렌더링이 활성화된 경우) OAMDATA에 대한 쓰기는 OAM의 값을 수정하지 않지만, [[#OAMADDR|OAMADDR]]의 결함 있는 증가를 수행하여 상위 6비트만 증가시킨다(즉, [[PPU sprite evaluation]]에서 &#039;&#039;[n]&#039;&#039; 값을 증가시킨다. 스프라이트 평가의 현재 상태에 따라 하위 비트를 대신 증가시킬 수도 있다). 이는 $2004에 대한 쓰기를 사용하므로 [[#OAMDMA|OAMDMA]]를 통한 DMA 전송에도 적용된다. 에뮬레이션 목적으로는 렌더링 중 쓰기를 완전히 무시하는 것이 가장 좋다.&lt;br /&gt;
* 이전에는 이 레지스터에서 읽는 것이 신뢰할 수 없다고 생각되었다&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=6424 $2004 읽기 신뢰성?] blargg의 스레드&amp;lt;/ref&amp;gt;. 그러나 최근 증거에 따르면 이는 전적으로 [[#OAMADDR|OAMADDR]] 쓰기에 의한 손상 때문인 것으로 보인다.&lt;br /&gt;
* 초기 Famicom 및 NES에서 발견된 가장 오래된 PPU 구현에서는 이 레지스터를 읽을 수 없다&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?p=62137#p62137 초기 리비전에서는 $2004를 읽을 수 없음] jsr의 답글&amp;lt;/ref&amp;gt;. 읽기 기능은 대부분의 NES 및 이후 Famicom에서 발견된 RP2C02G에 추가되었다.&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?p=150926#p150926 하드웨어 리비전 및 $2004 읽기] Great Hierophant의 답글&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 2C07에서는 스프라이트 평가를 &#039;&#039;절대&#039;&#039; 완전히 비활성화할 수 없으며, vblank 시작 후 24 스캔라인 후에 항상 시작된다&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=11041 2C07 PPU 스프라이트 평가 노트] thefox의 스레드&amp;lt;/ref&amp;gt;(2C02에서 프리렌더 스캔라인이 있었을 때와 동일). 따라서 OAM에 대한 모든 업데이트는 2C07이 수직 블랭킹을 신호한 후 처음 24 스캔라인 내에 수행되어야 한다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUSCROLL}}{{Anchor|Reg2005}}{{Anchor|Scroll_($2005)_&amp;gt;&amp;gt;_write_x2}}&lt;br /&gt;
=== PPUSCROLL - X 및 Y 스크롤 ($2005 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 1번째 쓰기&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 XXXX XXXX&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- X 스크롤 비트 7-0 (PPUCTRL 비트 0의 비트 8)&lt;br /&gt;
 &lt;br /&gt;
 2번째 쓰기&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 YYYY YYYY&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- Y 스크롤 비트 7-0 (PPUCTRL 비트 1의 비트 8)&lt;br /&gt;
&lt;br /&gt;
이 레지스터는 [[PPU scrolling|스크롤 위치]]를 변경하는 데 사용되며, [[#PPUCTRL|PPUCTRL]]을 통해 선택된 네임테이블의 어떤 픽셀이 렌더링된 화면의 왼쪽 상단 모서리에 있어야 하는지 PPU에 알려준다. PPUSCROLL은 두 번의 쓰기를 필요로 한다. 첫 번째는 X 스크롤이고 두 번째는 Y 스크롤이다. 이것이 첫 번째 쓰기인지 두 번째 쓰기인지는 [[#PPUADDR|PPUADDR]]과 공유되는 [[#Internal_registers|w 레지스터]]에 의해 내부적으로 추적된다. 일반적으로 이 레지스터는 다음 프레임이 원하는 위치에서 렌더링을 시작하도록 수직 블랭킹 중에 쓰여지지만, 화면을 분할하기 위해 렌더링 중에 수정될 수도 있다. 렌더링 중에 수직 스크롤을 변경하면 다음 프레임에만 적용된다. PPUCTRL의 네임테이블 비트와 함께 스크롤은 구성 요소당 9비트로 생각할 수 있으며, 스크롤 위치를 완전히 지정하려면 PPUSCROLL과 함께 PPUCTRL을 업데이트해야 한다.&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = warning&lt;br /&gt;
| text = &amp;lt;font size=+1&amp;gt;PPU 스크롤 레지스터는 PPU 주소 레지스터와 [[PPU_scrolling#PPU_internal_registers|내부 상태를 공유]]한다. 이 때문에 PPUSCROLL 및 PPUCTRL의 네임테이블 비트는 PPUADDR에 대한 모든 쓰기 &#039;&#039;후에&#039;&#039; 쓰여져야 한다.&amp;lt;/font&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
[[#Internal_registers|w (쓰기 래치)]]를 지우기 위해 [[#PPUSTATUS|PPUSTATUS]]를 읽은 후, 화면을 켜기 직전에 PPUSCROLL에 수평 및 수직 스크롤 오프셋을 쓴다.&lt;br /&gt;
&lt;br /&gt;
  ; X 및 Y 스크롤의 상위 비트를 설정한다.&lt;br /&gt;
  lda ppuctrl_value&lt;br /&gt;
  ora current_nametable&lt;br /&gt;
  sta PPUCTRL&lt;br /&gt;
 &lt;br /&gt;
  ; X 및 Y 스크롤의 하위 8비트를 설정한다.&lt;br /&gt;
  bit PPUSTATUS&lt;br /&gt;
  lda cam_position_x&lt;br /&gt;
  sta PPUSCROLL&lt;br /&gt;
  lda cam_position_y&lt;br /&gt;
  sta PPUSCROLL&lt;br /&gt;
&lt;br /&gt;
수평 오프셋은 0에서 255까지의 범위를 갖는다. &amp;quot;정상적인&amp;quot; 수직 오프셋은 0에서 239까지의 범위를 가지며, 240에서 255까지의 값은 현재 네임테이블 끝의 속성 데이터가 타일 데이터로 잘못 사용되게 한다. PPU는 일반적으로 239에서 다음 네임테이블의 0으로 자동으로 건너뛰므로 이러한 &amp;quot;잘못된&amp;quot; 스크롤 위치는 명시적으로 기록된 경우에만 발생한다.&lt;br /&gt;
&lt;br /&gt;
여기서 여러 프레임에 걸쳐 스크롤 값을 변경하고 새로 드러난 네임테이블 영역에 타일을 쓰면 큰 배경 위로 카메라가 패닝하는 효과를 얻을 수 있다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUADDR}}{{Anchor|Reg2006}}{{Anchor|Address_($2006)_&amp;gt;&amp;gt;_write_x2}}&lt;br /&gt;
=== PPUADDR - VRAM 주소 ($2006 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 1번째 쓰기  2번째 쓰기&lt;br /&gt;
 15 bit  8  7  bit  0&lt;br /&gt;
 ---- ----  ---- ----&lt;br /&gt;
 ..AA AAAA  AAAA AAAA&lt;br /&gt;
   || ||||  |||| ||||&lt;br /&gt;
   ++-++++--++++-++++- VRAM 주소&lt;br /&gt;
&lt;br /&gt;
CPU와 PPU는 별도의 버스에 있기 때문에 어느 쪽도 다른 쪽의 메모리에 직접 접근할 수 없다. CPU는 PPU의 한 쌍의 레지스터를 통해 VRAM에 쓴다. 먼저 [[#PPUADDR|PPUADDR]]에 주소를 로드한 다음 [[#PPUDATA|PPUDATA]]에 데이터를 반복적으로 쓴다. 각 PPUDATA 접근은 [[#PPUCTRL|PPUCTRL]]에 구성된 대로 주소를 자동으로 1 또는 32만큼 증가시키므로 VRAM 주소는 모든 데이터 쓰기 시리즈에 대해 한 번만 설정하면 된다.&lt;br /&gt;
&lt;br /&gt;
16비트 주소는 PPUADDR에 한 번에 한 바이트씩, 상위 바이트부터 쓴다. 이것이 첫 번째 쓰기인지 두 번째 쓰기인지는 PPU의 [[#Internal_registers|내부 w 레지스터]]에 의해 추적되며, 이는 [[#PPUSCROLL|PPUSCROLL]]과 공유된다. w가 0이 아니거나 그 상태를 알 수 없는 경우, 주소를 쓰기 전에 [[#PPUSTATUS|PPUSTATUS]]를 읽어 지워야 한다. 예를 들어, w가 0으로 알려진 후 VRAM 주소를 $2108로 설정하려면:&lt;br /&gt;
&lt;br /&gt;
   lda #$21&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   lda #$08&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
&lt;br /&gt;
[[PPU_memory_map|PPU 주소 공간]]은 14비트로, $0000-$3FFF에 걸쳐 있다. 이 레지스터에 기록된 값의 비트 14와 15는 무시된다. 그러나 PPUADDR에 기록된 데이터를 보유하는 [[#Internal_registers|내부 t 레지스터]]의 비트 14는 PPUADDR 상위 바이트를 쓸 때 0으로 강제된다. 이 세부 사항은 VRAM 주소를 설정하기 위해 PPUADDR을 사용할 때는 중요하지 않지만, 화면 중간 스크롤을 제어하는 데 사용할 때는 중요한 제한 사항이다(자세한 내용은 [[PPU scrolling]] 참조).&lt;br /&gt;
&lt;br /&gt;
==== 참고 ====&lt;br /&gt;
화면 새로 고침 중 [[#PPUSCROLL|PPUSCROLL]] 및 [[#PPUADDR|PPUADDR]]에 접근하면 흥미로운 래스터 효과가 발생한다. 각 스캔라인의 시작 위치는 네임테이블 메모리의 모든 픽셀 위치로 설정할 수 있다. 자세한 내용은 [[PPU scrolling]]을 참조하라.&lt;br /&gt;
&lt;br /&gt;
==== 팔레트 손상 ====&lt;br /&gt;
특정 상황에서 PPU 팔레트의 항목이 손상될 수 있다. 이것이 정확히 어떻게 또는 왜 발생하는지는 불분명하지만, NTSC PPU의 모든 리비전은 적어도 어느 정도 취약한 것으로 보인다.&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=23209 렌더링 중 PPU가 꺼졌을 때 팔레트 변색 문제] N·K의 스레드&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
팔레트 메모리에 쓰기를 마쳤을 때의 해결 방법은 항상 다음과 같다.&lt;br /&gt;
# 필요한 경우 주소를 업데이트하여 $3F00, $3F10, $3F20 또는 다른 미러를 가리키도록 한다.&lt;br /&gt;
# 그런 다음에만 주소를 팔레트 메모리 외부를 가리키도록 변경한다.&lt;br /&gt;
&lt;br /&gt;
이 해결 방법을 구현하는 코드 조각은 수많은 게임에 존재한다.&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?p=280899#p280899 이상한 PPU 쓰기] Fiskbit의 스레드&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   lda #$3F&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   lda #0&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
&lt;br /&gt;
==== 버스 충돌 ====&lt;br /&gt;
래스터 효과 중, PPUADDR에 대한 두 번째 쓰기가 특정 시간에 발생하면 최대 한 축의 스크롤링이 기록된 값과 현재 값의 비트 AND로 설정된다. 두 번째 쓰기를 완료하는 유일한 안전한 시간은 블랭킹 중이다. 더 구체적인 타이밍은 [[PPU scrolling]]을 참조하라. [//forums.nesdev.org/viewtopic.php?p=230391#p230391]&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUDATA}}{{Anchor|Reg2007}}{{Anchor|Data_($2007)_&amp;lt;&amp;gt;_read/write}}&lt;br /&gt;
=== PPUDATA - VRAM 데이터 ($2007 읽기/쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 DDDD DDDD&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- VRAM 데이터&lt;br /&gt;
&lt;br /&gt;
VRAM 읽기/쓰기 데이터 레지스터. 접근 후, 비디오 메모리 주소는 $2000의 비트 2에 의해 결정된 양만큼 증가한다.&lt;br /&gt;
&lt;br /&gt;
[[#PPUMASK|PPUMASK]]로 배경/스프라이트 렌더링 플래그를 비활성화하여 화면이 꺼지거나 수직 블랭킹 중에 이 포트를 통해 VRAM에서 데이터를 읽거나 쓸 수 있다. 이 레지스터에 접근하면 VRAM 주소가 증가하므로, 그래픽 결함을 유발하고 쓰기 시 예측할 수 없는 VRAM 주소에 쓰게 되므로 수직 또는 강제 블랭킹 외부에서는 접근해서는 안 된다. 그러나 소수의 게임은 렌더링 중에 PPUDATA에서 읽는 것으로 알려져 있으며, 이로 인해 스크롤 위치가 변경된다. [[PPU scrolling#$2007 reads and writes|PPU 스크롤링]] 및 [[Tricky-to-emulate games]]를 참조하라.&lt;br /&gt;
&lt;br /&gt;
VRAM 읽기 및 쓰기는 렌더링이 사용하는 것과 동일한 내부 주소 레지스터를 공유한다. 따라서 비디오 메모리에 데이터를 로드한 후, 프로그램은 잘못된 스크롤링을 피하기 위해 [[#PPUSCROLL|PPUSCROLL]] 및 [[#PPUCTRL|PPUCTRL]] (비트 1-0) 쓰기로 스크롤 위치를 다시 로드해야 한다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|The PPUDATA read buffer (post-fetch)}}&lt;br /&gt;
==== PPUDATA 읽기 버퍼 ====&lt;br /&gt;
&lt;br /&gt;
PPUDATA에서 읽는 것은 현재 VRAM 주소의 값을 직접 반환하는 것이 아니라 내부 읽기 버퍼의 내용을 반환한다. 이 읽기 버퍼는 모든 PPUDATA 읽기에서 업데이트되지만, 이전 내용이 CPU로 반환된 &#039;&#039;후에만&#039;&#039; 업데이트되므로 PPUDATA 읽기를 효과적으로 하나 지연시킨다. 이는 PPU 버스 읽기가 너무 느려서 CPU 읽기를 서비스할 시간에 완료할 수 없기 때문이다. 이 읽기 버퍼 때문에, PPUADDR을 통해 VRAM 주소를 설정한 후에는 먼저 PPUDATA를 읽어 읽기 버퍼를 준비(결과 무시)한 다음 원하는 데이터를 읽어야 한다.&lt;br /&gt;
&lt;br /&gt;
읽기 버퍼는 PPUDATA 읽기에서만 업데이트된다는 점에 유의하라. 쓰기나 렌더링과 같은 다른 PPU 프로세스에는 영향을 받지 않으며, 다음 읽기까지 값을 무기한 유지한다.&lt;br /&gt;
&lt;br /&gt;
==== 팔레트 RAM 읽기 ====&lt;br /&gt;
&lt;br /&gt;
이후 PPU는 $3F00-$3FFF에서 팔레트 데이터를 읽는 신뢰할 수 없는 기능을 추가했다. 이러한 읽기는 팔레트 RAM이 PPU 주소 공간에 오버레이된 PPU 내부의 별도 메모리 공간이므로 표준 VRAM 읽기와 다르게 작동한다. 참조된 6비트 팔레트 데이터는 내부 읽기 버퍼로 가지 않고 즉시 반환되므로 준비 읽기가 필요하지 않다. 동시에 PPU는 지정된 주소의 PPU 메모리에서 팔레트 데이터 &amp;quot;아래&amp;quot;에서 일반 읽기를 수행하고 이 읽기 결과는 평소와 같이 읽기 버퍼로 들어간다. 읽기 버퍼의 이전 내용은 팔레트를 읽을 때 버려지지만, 주소를 팔레트 RAM 외부로 변경하고 한 번 읽으면 이 그림자 메모리([[PPU memory map|일반적으로 미러링된 네임테이블]])의 내용에 접근할 수 있다. 팔레트 RAM 읽기를 지원하지 않는 PPU에서는 이 메모리 범위가 나머지 PPU 메모리와 동일하게 동작한다.&lt;br /&gt;
&lt;br /&gt;
이 기능은 2C02G, 2C02H 및 PAL PPU에서 지원된다. 팔레트를 읽을 때 반환되는 바이트는 상위 2비트에 [[Open_bus_behavior#PPU_open_bus|PPU 열린 버스]]를 포함하며, 값은 그레이스케일 모드에 의해 수정된 후 반환된다. 그레이스케일 모드가 활성화되면 하위 4비트가 지워진다. 불행히도 일부 콘솔에서는 마스터 클럭에 대한 4개의 CPU/PPU 정렬 중 하나에서 팔레트 읽기가 손상될 수 있다. 이 손상은 레지스터 접근을 나타내는 [[PPU pinout|PPU /CS]] 신호가 언제 비활성화되는지에 따라 다르며, 이는 콘솔마다 다르다. 이 기능이 모든 PPU에 있는 것은 아니라는 점과 결합하여 개발자는 팔레트 RAM에서 읽는 것에 의존해서는 안 된다.&lt;br /&gt;
&lt;br /&gt;
==== DPCM 샘플과의 읽기 충돌 ====&lt;br /&gt;
&lt;br /&gt;
현재 DPCM 샘플을 재생 중인 경우, APU의 샘플 가져오기 중단이 $2007을 읽는 명령어와 동시에 발생하면 추가 읽기 사이클이 발생할 가능성이 있다. 이로 인해 추가 증가가 발생하고 바이트가 건너뛰어져 잘못된 데이터가 읽힌다. 참조: [[APU_DMC#Conflict with controller and PPU read|APU DMC]]&lt;br /&gt;
&lt;br /&gt;
{{Anchor|OAMDMA}}{{Anchor|Reg4014}}&lt;br /&gt;
=== OAMDMA - 스프라이트 DMA ($4014 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 AAAA AAAA&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- 소스 페이지 (소스 주소의 상위 바이트)&lt;br /&gt;
&lt;br /&gt;
OAMDMA는 CPU를 일시 중단하여 [[DMA]]를 사용하여 CPU 메모리 페이지를 PPU OAM으로 빠르게 복사할 수 있는 CPU 레지스터이다. 항상 256바이트를 복사하고 소스 주소는 항상 페이지 정렬($00으로 끝남)로 시작한다. 이 레지스터에 기록된 값은 소스 주소의 상위 바이트이며, 복사는 쓰기 직후 사이클에서 시작된다. 복사는 513 또는 514 사이클이 걸리며, CPU 메모리에서 읽기와 [[#OAMDATA|OAMDATA]]에 쓰기의 256 쌍으로 구현된다. vblank가 매우 짧고 [[#OAMADDR|OAMADDR]]을 변경하면 종종 OAM이 손상되기 때문에, OAM DMA는 일반적으로 매 프레임마다 스프라이트를 업데이트하는 유일한 현실적인 옵션이다. 데이터가 올바르게 정렬되고 [[Errata|손상을 피하기 위해]] DMA를 시작하기 전에 OAMADDR에 0을 써야 한다.&amp;lt;ref name = &amp;quot;OAMglitch&amp;quot; /&amp;gt; OAM DMA는 렌더링이 비활성화된 상태에서 프레임 중간에 수행할 수 있지만, 일반적으로 vblank에서만 수행된다.&lt;br /&gt;
&lt;br /&gt;
OAM은 동적 RAM(DRAM)으로 구성되어 있으며, 자주 새로 고치지 않으면 붕괴된다. 이는 NTSC와 PAL에서 다른 고려 사항이 필요하다. 새로 고침은 DRAM 행을 읽거나 쓸 때마다 자동으로 발생하므로, 렌더링 중 스프라이트 평가 프로세스에 의해 모든 스캔라인에서 새로 고쳐진다. NTSC에서는 vblank가 충분히 짧아서 렌더링이 다시 시작되기 전에 OAM이 붕괴되지 않으므로, OAM DMA는 vblank 중 언제든지 수행할 수 있다. PAL에서는 vblank가 훨씬 길기 때문에 그 시간 동안 붕괴를 피하기 위해 PPU는 NMI 후 24 스캔라인 후에 강제 새로 고침을 자동으로 수행하며, 이 동안에는 OAM에 쓸 수 없다. 이는 OAM DMA가 PAL의 vblank 시작으로 제한된다는 것을 의미한다. NTSC vblank는 24 PAL 스캔라인보다 짧으므로, NTSC 호환 NMI 핸들러는 강제 새로 고침 전에 완료되므로 OAM DMA 타이밍에 관계없이 PAL에서 작동해야 한다. 어느 경우든, vblank 중에 업데이트되지 않으면 OAM은 붕괴되지 않으며, 실제로 랙 프레임(CPU가 vblank 전에 작업을 완료하지 못한 프레임)에서는 불완전한 스프라이트 데이터를 PPU에 복사하는 것을 피하기 위해 일반적으로 업데이트해서는 안 된다.&lt;br /&gt;
&lt;br /&gt;
== 내부 레지스터 ==&lt;br /&gt;
&lt;br /&gt;
PPU에는 [[PPU scrolling#PPU internal registers|PPU 스크롤링]]에 자세히 설명된 4개의 내부 레지스터도 있다.&lt;br /&gt;
* &#039;&#039;&#039;v&#039;&#039;&#039;: 렌더링 중에는 스크롤 위치에 사용된다. 렌더링 외부에서는 현재 VRAM 주소로 사용된다.&lt;br /&gt;
* &#039;&#039;&#039;t&#039;&#039;&#039;: 렌더링 중에는 다음 스캔라인의 시작 거친 x 스크롤과 화면의 시작 y 스크롤을 지정한다. 렌더링 외부에서는 스크롤 또는 VRAM 주소를 v로 전송하기 전에 보유한다.&lt;br /&gt;
* &#039;&#039;&#039;x&#039;&#039;&#039;: 현재 스크롤의 미세 x 위치로, 렌더링 중에 v와 함께 사용된다.&lt;br /&gt;
* &#039;&#039;&#039;w&#039;&#039;&#039;: [[#PPUSCROLL|PPUSCROLL]] 또는 [[#PPUADDR|PPUADDR]]에 대한 각 쓰기에서 토글되며, 이것이 첫 번째 쓰기인지 두 번째 쓰기인지를 나타낸다. [[#PPUSTATUS|PPUSTATUS]]를 읽으면 지워진다. &#039;쓰기 래치&#039; 또는 &#039;쓰기 토글&#039;이라고도 한다.&lt;br /&gt;
&lt;br /&gt;
== 참조 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=PPU_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0&amp;diff=148</id>
		<title>PPU 레지스터</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=PPU_%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0&amp;diff=148"/>
		<updated>2025-10-01T04:05:12Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ NesDev발췌 | 링크 = https://www.nesdev.org/wiki/PPU_registers }}&lt;br /&gt;
[[PPU]]는 CPU에 8개의 메모리 매핑된 레지스터를 노출한다. 이것들은 명목상 CPU의 주소 공간에서 $2000부터 $2007까지 위치하지만, 주소가 불완전하게 디코딩되기 때문에 $2008부터 $3FFF까지 8바이트마다 [[Mirroring#Memory Mirroring|미러링]]된다. 예를 들어, $3456에 쓰는 것은 $2006에 쓰는 것과 같다.&lt;br /&gt;
&lt;br /&gt;
PPU는 전원 인가 또는 리셋 직후 렌더링을 시작하지만, 다음 프레임의 프리 렌더 스캔라인에 도달할 때까지 대부분의 레지스터($2000, $2001, $2005, $2006)에 대한 쓰기를 무시한다. 더 구체적으로, CPU와 PPU가 동시에 리셋된다고 가정할 때 약 29658 NTSC CPU 사이클 또는 33132 PAL CPU 사이클 동안이다. 자세한 내용은 [[PPU power up state]] 및 [[Init code]]를 참조하라.&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== 요약 ==&lt;br /&gt;
{| class=&amp;quot;tabular&amp;quot;&lt;br /&gt;
! 일반 이름&lt;br /&gt;
! 주소&lt;br /&gt;
! 비트&lt;br /&gt;
! 타입&lt;br /&gt;
! 노트&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUCTRL|PPUCTRL]]&lt;br /&gt;
! $2000&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;VPHB SINN&amp;lt;/tt&amp;gt; || W || [[NMI]] 활성화 (V), PPU 마스터/슬레이브 (P), 스프라이트 높이 (H), 배경 타일 선택 (B), 스프라이트 타일 선택 (S), 증가 모드 (I), 네임테이블 선택 / X 및 Y 스크롤 비트 8 (NN)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUMASK|PPUMASK]]&lt;br /&gt;
! $2001&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;BGRs bMmG&amp;lt;/tt&amp;gt; || W || 색상 강조 (BGR), 스프라이트 활성화 (s), 배경 활성화 (b), 스프라이트 왼쪽 열 활성화 (M), 배경 왼쪽 열 활성화 (m), 그레이스케일 (G)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUSTATUS|PPUSTATUS]]&lt;br /&gt;
! $2002&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;VSO- ----&amp;lt;/tt&amp;gt; || R || vblank (V), 스프라이트 0 히트 (S), 스프라이트 오버플로 (O); 읽기는 $2005/$2006의 쓰기 쌍을 리셋한다&lt;br /&gt;
|-&lt;br /&gt;
! [[#OAMADDR|OAMADDR]]&lt;br /&gt;
! $2003&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;AAAA AAAA&amp;lt;/tt&amp;gt; || W || [[PPU OAM|OAM]] 읽기/쓰기 주소&lt;br /&gt;
|-&lt;br /&gt;
! [[#OAMDATA|OAMDATA]]&lt;br /&gt;
! $2004&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;DDDD DDDD&amp;lt;/tt&amp;gt; || RW || OAM 데이터 읽기/쓰기&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUSCROLL|PPUSCROLL]]&lt;br /&gt;
! $2005&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;XXXX XXXX YYYY YYYY&amp;lt;/tt&amp;gt; || Wx2 || X 및 Y 스크롤 비트 7-0 (두 번 쓰기: X 스크롤, 그 다음 Y 스크롤)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUADDR|PPUADDR]]&lt;br /&gt;
! $2006&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;..AA AAAA AAAA AAAA&amp;lt;/tt&amp;gt; || Wx2 || VRAM 주소 (두 번 쓰기: 최상위 바이트, 그 다음 최하위 바이트)&lt;br /&gt;
|-&lt;br /&gt;
! [[#PPUDATA|PPUDATA]]&lt;br /&gt;
! $2007&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;DDDD DDDD&amp;lt;/tt&amp;gt; || RW || VRAM 데이터 읽기/쓰기&lt;br /&gt;
|-&lt;br /&gt;
! [[#OAMDMA|OAMDMA]]&lt;br /&gt;
! $4014&lt;br /&gt;
| style=&amp;quot;text-align: right&amp;quot; | &amp;lt;tt style=&amp;quot;white-space: nowrap&amp;quot;&amp;gt;AAAA AAAA&amp;lt;/tt&amp;gt; || W || OAM DMA 상위 주소&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
레지스터 타입:&lt;br /&gt;
* &#039;&#039;&#039;R&#039;&#039;&#039; - 읽기 가능&lt;br /&gt;
* &#039;&#039;&#039;W&#039;&#039;&#039; - 쓰기 가능&lt;br /&gt;
* &#039;&#039;&#039;x2&#039;&#039;&#039; - 두 번의 1바이트 접근으로 접근하는 내부 2바이트 상태&lt;br /&gt;
&lt;br /&gt;
{{Anchor|Ports}}&lt;br /&gt;
== MMIO 레지스터 ==&lt;br /&gt;
&lt;br /&gt;
PPU는 CPU와의 통신에 사용하는 내부 데이터 버스를 가지고 있다.&lt;br /&gt;
이 버스는 [[Visual 2C02]]에서 `_io_db`로, FCEUX에서는 `PPUGenLatch`로 불리며&amp;lt;ref&amp;gt;[http://sourceforge.net/p/fceultra/code/HEAD/tree/fceu/trunk/src/ppu.cpp#l183 ppu.cpp] by Bero and Xodnizel&amp;lt;/ref&amp;gt;, PPU의 여러 부분으로 이어지는 매우 긴 트레이스의 커패시턴스로 인해 8비트 동적 래치처럼 동작한다.&lt;br /&gt;
명목상 읽기 전용인 PPUSTATUS를 포함한 모든 PPU 포트에 값을 쓰면 이 래치가 채워진다.&lt;br /&gt;
읽기 가능한 포트(PPUSTATUS, OAMDATA, 또는 PPUDATA)를 읽는 것도 읽은 비트로 래치를 채운다.&lt;br /&gt;
명목상 &amp;quot;쓰기 전용&amp;quot; 레지스터를 읽으면 래치의 현재 값이 반환되며, PPUSTATUS의 사용되지 않는 비트도 마찬가지다.&lt;br /&gt;
이 값의 적어도 하나의 비트는 3ms에서 30ms 후에 붕괴되며, PPU가 따뜻할 때 더 빠르다. &amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=24639 lidnariq의 PPU 붕괴 테스트 ROM에 대한 답글]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUCTRL}}{{Anchor|Reg2000}}{{Anchor|Controller_($2000)_&amp;gt;_write}}&lt;br /&gt;
=== PPUCTRL - 기타 설정 ($2000 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 VPHB SINN&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 |||| ||++- 기본 네임테이블 주소&lt;br /&gt;
 |||| ||    (0 = $2000; 1 = $2400; 2 = $2800; 3 = $2C00)&lt;br /&gt;
 |||| |+--- PPUDATA의 CPU 읽기/쓰기 당 VRAM 주소 증가&lt;br /&gt;
 |||| |     (0: 1씩 증가, 가로로 진행; 1: 32씩 증가, 세로로 진행)&lt;br /&gt;
 |||| +---- 8x8 스프라이트의 스프라이트 패턴 테이블 주소&lt;br /&gt;
 ||||       (0: $0000; 1: $1000; 8x16 모드에서는 무시됨)&lt;br /&gt;
 |||+------ 배경 패턴 테이블 주소 (0: $0000; 1: $1000)&lt;br /&gt;
 ||+------- [[Sprite size]] (0: 8x8 픽셀; 1: 8x16 픽셀 – [[PPU OAM#Byte 1]] 참조)&lt;br /&gt;
 |+-------- PPU 마스터/슬레이브 선택&lt;br /&gt;
 |          (0: EXT 핀에서 배경 읽기; 1: EXT 핀에 색상 출력)&lt;br /&gt;
 +--------- [[wikipedia:Vertical blanking interval|Vblank]] [[NMI]] 활성화 (0: 꺼짐, 1: 켜짐)&lt;br /&gt;
&lt;br /&gt;
PPUCTRL (&amp;quot;컨트롤&amp;quot; 또는 &amp;quot;컨트롤러&amp;quot; 레지스터)은 렌더링, 스크롤 위치, vblank NMI, 그리고 듀얼 PPU 구성과 관련된 설정의 조합을 포함한다. [[PPU power up state|전원/리셋 후]], 이 레지스터에 대한 쓰기는 첫 번째 프리 렌더 스캔라인까지 무시된다.&lt;br /&gt;
&lt;br /&gt;
==== Vblank NMI ====&lt;br /&gt;
&lt;br /&gt;
PPUCTRL에서 NMI를 활성화하면 vblank 시작 시(스캔라인 241, 도트 1) NMI 핸들러가 호출된다. 이것은 소프트웨어가 디스플레이의 프레임 속도로 실행될 수 있도록 신뢰할 수 있는 시간 소스를 제공하고, 소프트웨어에 vblank를 알린다. Vblank는 렌더링이 활성화된 상태에서 소프트웨어가 VRAM 및 OAM에 데이터를 보낼 수 있는 유일한 시간이며, 이 NMI는 vblank를 감지하는 &#039;&#039;유일한&#039;&#039; 신뢰할 수 있는 방법이다. [[#PPUSTATUS|PPUSTATUS]]에서 vblank 플래그를 폴링하는 것은 vblank를 완전히 놓칠 수 있다.&lt;br /&gt;
&lt;br /&gt;
[[#PPUSTATUS|PPUSTATUS]]의 vblank 플래그가 1인 동안 NMI 활성화를 0에서 1로 변경하면 즉시 NMI가 트리거된다. 이것은 PPUSTATUS 레지스터가 아직 읽히지 않은 경우 vblank 중에 발생한다. NMI 루틴이 vblank에서 너무 늦게 실행되어 제시간에 끝나지 못하게 하여 그래픽 결함을 일으키거나, 게임이 실제로 발생한 것보다 더 많은 프레임을 처리하게 할 수 있다. 이 문제를 피하려면, PPUCTRL에서 NMI를 활성화하기 전에 먼저 PPUSTATUS를 읽어 vblank 플래그를 지우는 것이 신중하다.&lt;br /&gt;
&lt;br /&gt;
==== 스크롤링 ====&lt;br /&gt;
PPUCTRL 비트 0과 1의 현재 네임테이블 비트는 스크롤 좌표의 최상위 비트로 간주될 수 있으며, 이는 9비트 너비이다([[PPU_nametables|네임테이블]] 및 [[#PPUSCROLL|PPUSCROLL]] 참조):&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 .... ..YX&lt;br /&gt;
        ||&lt;br /&gt;
        |+- X 스크롤 위치 비트 8 (즉, X에 256을 더함)&lt;br /&gt;
        +-- Y 스크롤 위치 비트 8 (즉, Y에 240을 더함)&lt;br /&gt;
&lt;br /&gt;
이 두 비트는 [[PPUSCROLL]]에 기록된 값과 동일한 [[#Internal registers|내부 t 레지스터]]로 이동하며, 스크롤 위치를 완전히 지정하려면 [[#PPUSCROLL|PPUSCROLL]]과 함께 기록되어야 한다.&lt;br /&gt;
&lt;br /&gt;
==== 마스터/슬레이브 모드와 EXT 핀 ====&lt;br /&gt;
PPUCTRL의 비트 6은 PPU를 손상시킬 수 있으므로 순정 콘솔에서는 절대 설정해서는 안 된다.&lt;br /&gt;
&lt;br /&gt;
이 비트가 클리어되면(일반적인 경우), PPU는 EXT 핀에서 배경색에 대한 [[PPU_palettes|팔레트 인덱스]]를 가져온다. 순정 NES는 이 핀들을 접지하여 예상대로 팔레트 인덱스 0을 배경색으로 만든다. EXT 핀에 연결된 보조 그림 생성기는 배경 팔레트의 색상을 사용하여 배경을 다른 이미지로 교체할 수 있으며, 이는 시차 스크롤링과 같은 기능에 사용될 수 있다.&lt;br /&gt;
&lt;br /&gt;
비트 6을 설정하면 PPU는 각 픽셀에 대해 EXT 핀에 팔레트 메모리 인덱스의 하위 4비트를 출력한다. 4비트만 출력되므로 일반적으로 배경과 스프라이트 픽셀을 이 방법으로 구별할 수 없다. 이 비트를 설정해도 PPU의 컴포지트 비디오 출력의 이미지는 영향을 받지 않는다. 수정되지 않은 NES에서는 EXT 핀이 접지되어 있으므로, 비트 6을 설정하는 것은 0이 아닌 픽셀 값을 출력할 때마다 칩을 손상시킬 수 있으므로 권장되지 않는다(실질적으로 Vcc와 GND를 함께 단락시키기 때문). 투명 픽셀에 대한 EXT 출력은 일반적인 배경색이 아니라 해당 배경 슬라이버 팔레트의 항목 0이라는 점에 유의하라. 렌더링이 비활성화되면 [[PPU palettes|배경 재정의]]에 관계없이 EXT 출력은 항상 인덱스 0이다.&lt;br /&gt;
&lt;br /&gt;
==== 비트 0 경쟁 조건 ====&lt;br /&gt;
수평 네임테이블 배열(일명 수직 미러링) 또는 4화면 VRAM을 사용하는 경우 vblank 외부에서 이 레지스터에 쓸 때 주의하라.&lt;br /&gt;
특정 CPU-PPU 정렬의 경우, [[PPU scrolling#At dot 257 of each scanline|도트 257]]에서 시작하는 쓰기는 다음 스캔라인만 왼쪽 네임테이블에서 잘못 그려지게 한다.&lt;br /&gt;
이것은 눈에 보이는 결함을 유발할 수 있으며, 해당 스캔라인에 대한 스프라이트 0 히트를 방해할 수도 있다(잘못된 배경으로 그려지기 때문).&lt;br /&gt;
이 결함은 수평 또는 단일 화면 미러링에서는 왼쪽과 오른쪽 네임테이블이 동일하기 때문에 효과가 없다.&lt;br /&gt;
도트 257에서 시작하여 도트 258까지 계속되는 쓰기만 이 결함을 유발할 수 있다. 다른 모든 수평 타이밍은 안전하다.&lt;br /&gt;
이 결함은 구체적으로 열린 버스의 값을 레지스터에 쓰는데, 이는 거의 항상 주소의 상위 바이트가 될 것이다. 원하는 네임테이블에 따라 이 레지스터 또는 $2100에 있는 이 레지스터의 미러에 쓰는 것이 [//forums.nesdev.org/viewtopic.php?p=230434#p230434 기능적인 해결 방법]으로 보인다.&lt;br /&gt;
&lt;br /&gt;
이것은 &#039;&#039;슈퍼 마리오 브라더스&#039;&#039;에서 프로그램이 게임 로직 끝에 PPUCTRL에 쓸 때 가끔 [[Game bugs|보이는 결함]]을 생성한다.&lt;br /&gt;
게임 로직 중에 NMI를 껐다가 게임 로직이 끝나면 NMI를 다시 켜서 게임 로직이 끝나기 전에 NMI 핸들러가 다시 호출되는 것을 방지하는 것으로 보인다.&lt;br /&gt;
또 다른 해결 방법은 PPU의 NMI 활성화를 사용하는 대신 소프트웨어 플래그를 사용하여 NMI 재진입을 방지하는 것이다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUMASK}}{{Anchor|Reg2001}}{{Anchor|Mask_($2001)_&amp;gt;_write}}&lt;br /&gt;
=== PPUMASK - 렌더링 설정 ($2001 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 BGRs bMmG&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 |||| |||+- 그레이스케일 (0: 일반 색상, 1: 그레이스케일)&lt;br /&gt;
 |||| ||+-- 1: 화면 왼쪽 8픽셀에 배경 표시, 0: 숨기기&lt;br /&gt;
 |||| |+--- 1: 화면 왼쪽 8픽셀에 스프라이트 표시, 0: 숨기기&lt;br /&gt;
 |||| +---- 1: 배경 렌더링 활성화&lt;br /&gt;
 |||+------ 1: 스프라이트 렌더링 활성화&lt;br /&gt;
 ||+------- 빨간색 강조 (PAL/Dendy에서는 녹색)&lt;br /&gt;
 |+-------- 녹색 강조 (PAL/Dendy에서는 빨간색)&lt;br /&gt;
 +--------- 파란색 강조&lt;br /&gt;
&lt;br /&gt;
PPUMASK (&amp;quot;마스크&amp;quot; 레지스터)는 스프라이트와 배경의 렌더링 및 색상 효과를 제어한다. [[PPU power up state|전원/리셋 후]], 이 레지스터에 대한 쓰기는 첫 번째 프리 렌더 스캔라인까지 무시된다.&lt;br /&gt;
&lt;br /&gt;
가장 일반적으로, PPUMASK는 게임 플레이 외부에서 VRAM으로 대량의 데이터를 전송할 수 있도록 $00으로 설정되고, 게임 플레이 중에는 색상 효과 없이 모든 렌더링을 활성화하기 위해 $1E로 설정된다.&lt;br /&gt;
&lt;br /&gt;
==== 렌더링 제어 ====&lt;br /&gt;
&lt;br /&gt;
렌더링은 PPU가 메모리를 적극적으로 가져와 화면에 이미지를 그리는 과정이다. PPUMASK에서 스프라이트 및 배경 렌더링 중 하나 또는 둘 다 활성화되어 있는 한 렌더링 전체가 활성화된다. 한 구성 요소가 활성화되고 다른 구성 요소가 활성화되지 않은 경우, 비활성화된 구성 요소는 단순히 투명하게 처리된다. 렌더링 프로세스는 그 외에는 영향을 받지 않는다. 비트 3과 4를 통해 두 구성 요소가 모두 비활성화되면 렌더링 프로세스가 중지되고 PPU는 배경색을 표시한다.&lt;br /&gt;
&lt;br /&gt;
렌더링 중에는 PPU가 VRAM과 OAM을 적극적으로 사용한다. 이로 인해 CPU는 [[#PPUDATA|PPUDATA]]를 통해 VRAM에 접근하거나 [[#OAMDATA|OAMDATA]]를 통해 OAM에 접근할 수 없으므로, 이러한 접근은 렌더링 외부에서 수행되어야 한다. 즉, vblank 중(게임 플레이 중 데이터 전송) 또는 렌더링이 꺼진 상태(레벨 로드와 같은 대규모 데이터 전송)에서 수행해야 한다. 수많은 하드웨어 버그와 제한을 피하기 위해, 일반적으로 렌더링은 vblank 중에만 켜거나 끄는 것이 좋다. 이는 원하는 PPUMASK 값을 레지스터 자체가 아닌 변수에 쓰고 NMI 핸들러의 vblank 중에만 해당 변수를 PPUMASK에 복사하여 수행할 수 있다.&lt;br /&gt;
&lt;br /&gt;
PPU는 화면의 가장 왼쪽 8픽셀에서만 스프라이트와 배경을 선택적으로 숨길 수 있으며, 이를 투명하게 만들어 배경색을 그린다. 스프라이트의 경우, 이는 스프라이트가 오른쪽 가장자리에서처럼 화면 왼쪽 가장자리에서 부분적으로 걸칠 수 없는 제한인 스프라이트 팝인을 피하는 데 유용할 수 있다. 배경의 경우, 이는 수직 또는 단일 화면 네임테이블 배열로 수평으로 스크롤할 때 타일 아티팩트를 제거하고 속성 아티팩트를 줄일 수 있다. 이러한 배열은 스크롤 이음새를 화면 밖으로 숨길 수 없기 때문이다. 배경색은 배경 아트에 사용된 색상과 일치하지 않을 수 있으므로 왼쪽 열을 비활성화하는 것이 사소한 아티팩트보다 더 산만할 수 있다.&lt;br /&gt;
&lt;br /&gt;
참고:&lt;br /&gt;
* 렌더링 중에 PPUDATA에 쓰면 VRAM이 손상될 수 있으므로, 쓰기는 vblank 중이거나 PPUMASK 비트 3과 4에서 렌더링이 비활성화된 상태에서 수행해야 한다.&lt;br /&gt;
* 배경이나 스프라이트가 비활성화된 영역에서는 스프라이트 0 히트가 트리거되지 않는다.&lt;br /&gt;
* 렌더링 토글은 쓰기 후 약 3-4 도트 후에 적용된다. 이 지연은 Battletoads가 충돌을 피하기 위해 필요하다.&lt;br /&gt;
* 화면 중간에 렌더링을 토글하면 종종 OAM의 1개 행이 손상되고 현재 및 다음 스캔라인에 대해 잘못된 스프라이트가 그려진다. (참조: [[Errata#OAM and Sprites|정오표]])&lt;br /&gt;
* 화면 중간에 렌더링을 끄면 [[#Internal registers|내부 v 레지스터]]의 하위 14비트 값이 $3C00-$3FFF 사이인 경우 팔레트 RAM이 손상될 수 있다.&lt;br /&gt;
* 렌더링을 늦게 켜면 프리 렌더 끝의 도트가 절대 건너뛰지 않게 되어 정지된 화면에서 도트 크롤이 발생할 수 있다.&lt;br /&gt;
* 렌더링을 늦게 켜면 [[PPU_scrolling#Split_X/Y_scroll|복잡한 쓰기 시리즈로 수동으로 설정]]하지 않는 한 PPU의 스크롤 값이 잘못된다.&lt;br /&gt;
&lt;br /&gt;
==== 색상 제어 ====&lt;br /&gt;
&lt;br /&gt;
그레이스케일 모드는 모든 색상을 회색 또는 흰색 음영으로 강제한다. 이것은 색상을 $30과 비트 AND 연산하여 수행되며, 모든 색상이 회색 열($00, $10, $20, $30)에서 나오게 한다. 이 열에는 검은색이 없다는 점에 유의하라. 이 AND 동작은 색상이 뒤섞인 RGB PPU(2C04 시리즈)가 실제로 회색 음영을 얻는 것이 아니라 $x0 열에 있는 색상을 얻는다는 것을 의미한다. 팔레트 RAM에서 읽을 때 반환된 값은 이 AND 동작을 반영하지만 기본 데이터는 보존된다. 팔레트 쓰기는 그레이스케일 모드에 관계없이 정상적으로 작동한다.&lt;br /&gt;
&lt;br /&gt;
[[Color emphasis]]는 다른 두 색상 구성 요소를 어둡게 하여 선택한 구성 요소를 비교적 밝게 만들어 강조하는 색조 효과를 유발한다. 3가지 구성 요소를 모두 강조하면 모든 색상이 단순히 어두워진다. 이것은 그레이스케일과 독립적으로 작동하여 회색을 착색할 수 있다. PAL 및 Dendy PPU는 강조 비트 순서가 다르므로 포트 및 이중 지역 게임은 비트를 재정렬해야 한다. 또한 RGB PPU의 강조는 완전히 다르며, 대신 강조된 구성 요소의 밝기를 최대화하고 모든 구성 요소가 강조될 때 완전히 흰색 화면을 생성한다. RGB 강조는 훨씬 덜 유용하며 일반적으로 피하는 것이 가장 좋다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUSTATUS}}{{Anchor|Reg2002}}{{Anchor|Status_($2002)_&amp;lt;_read}}&lt;br /&gt;
=== PPUSTATUS - 렌더링 이벤트 ($2002 읽기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 VSOx xxxx&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 |||+-++++- ([[Open_bus_behavior#PPU_open_bus|PPU 열린 버스]] 또는 2C05 PPU 식별자)&lt;br /&gt;
 ||+------- [[PPU_sprite_evaluation#Sprite_overflow_bug|스프라이트 오버플로]] 플래그&lt;br /&gt;
 |+-------- [[PPU_OAM#Sprite_zero_hits|스프라이트 0 히트]] 플래그&lt;br /&gt;
 +--------- Vblank 플래그, 읽을 때 지워짐. &amp;lt;u&amp;gt;&#039;&#039;&#039;신뢰할 수 없음&#039;&#039;&#039;&amp;lt;/u&amp;gt;; 아래 참조.&lt;br /&gt;
&lt;br /&gt;
PPUSTATUS (&amp;quot;상태&amp;quot; 레지스터)는 렌더링 관련 이벤트의 상태를 반영하며 주로 타이밍에 사용된다. 이 레지스터의 세 플래그는 프리렌더 스캔라인의 도트 1에서 자동으로 지워진다. 설정 및 해제 타이밍에 대한 자세한 내용은 [[PPU 렌더링]]을 참조하라.&lt;br /&gt;
&lt;br /&gt;
이 레지스터를 읽으면 PPU의 [[#Internal registers|내부 w 레지스터]]가 지워지는 부작용이 있다. 쓰기가 올바른 순서로 이루어지도록 [[#PPUSCROLL|PPUSCROLL]] 및 [[#PPUADDR|PPUADDR]]에 쓰기 전에 일반적으로 읽는다.&lt;br /&gt;
&lt;br /&gt;
==== Vblank 플래그 ====&lt;br /&gt;
&lt;br /&gt;
vblank 플래그는 vblank 시작 시(스캔라인 241, 도트 1) 설정된다. PPUSTATUS를 읽으면 이 플래그의 현재 상태가 반환된 다음 지워진다. 읽어서 vblank 플래그가 지워지지 않으면 프리렌더 스캔라인의 도트 1에서 자동으로 지워진다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;vblank 플래그를 읽는 것은 vblank를 감지하는 신뢰할 수 있는 방법이 아니다. 대신 [[NMI thread|NMI]]를 사용해야 한다.&#039;&#039;&#039;&amp;lt;/u&amp;gt; 플래그가 설정되기 전 도트(스캔라인 241, 도트 0)에서 플래그를 읽으면 0으로 읽히고 지워지므로, vblank 플래그에 대해 PPUSTATUS를 폴링하면 vblank를 놓치고 게임이 버벅거릴 수 있다. 이 경우 NMI도 억제되며, 다음 도트 또는 두 도트에 걸친 읽기에 의해서도 억제될 수 있다. NTSC 및 PAL에서는 플래그가 두 프레임 연속으로 떨어지지 않는 것이 보장되지만, Dendy에서는 [[PPU_power_up_state#Dendy|매 프레임마다 발생]]하여 게임이 충돌할 수 있다. NMI를 사용하면 소프트웨어가 매 프레임마다 vblank를 올바르게 감지할 수 있다. 또한 PlayChoice-10에서도 필요하며, NMI가 너무 오랫동안 비활성화되면 게임을 거부한다. 콘솔을 부팅하는 동안에는 vblank 플래그를 폴링해야 하지만, 이 시점의 타이밍은 중요하지 않다(안전한 부팅에 대한 자세한 내용은 [[Init code]] 참조).&lt;br /&gt;
&lt;br /&gt;
vblank 플래그는 NMI 생성에 사용되며, 이 플래그가 1인 동안 NMI를 활성화하면 즉시 NMI가 발생한다([[PPU_registers#Vblank_NMI|PPUCTRL]] 참조).&lt;br /&gt;
&lt;br /&gt;
==== 스프라이트 0 히트 플래그 ====&lt;br /&gt;
&lt;br /&gt;
[[PPU_OAM#Sprite_zero_hits|스프라이트 0 히트]]는 OAM의 첫 번째 스프라이트(스프라이트 0)와 배경 간의 픽셀 단위 충돌을 감지하는 하드웨어 충돌 감지 기능이다. 스프라이트 0 히트 플래그는 스프라이트 0의 불투명한 픽셀이 배경의 불투명한 픽셀과 겹칠 때 즉시 설정되며, 스프라이트 우선 순위와는 무관하다. &#039;불투명&#039;은 픽셀이 &#039;투명&#039;하지 않다는 것을 의미한다. 즉, [[PPU_pattern_tables|두 패턴 비트]]가 %00이 아니다. 플래그는 프리렌더 스캔라인의 도트 1까지 설정된 상태를 유지하므로 프레임당 하나의 충돌만 감지할 수 있다.&lt;br /&gt;
&lt;br /&gt;
이 플래그는 충돌을 감지하지만 주로 타이밍에 사용된다. 많은 게임에서 스프라이트 0을 화면의 고정된 위치에 배치하고 이 플래그가 설정될 때까지 폴링한다. 이를 통해 CPU는 화면에서 대략적인 위치를 파악하여 하드웨어 레지스터에 대한 화면 중간 쓰기 시간을 맞출 수 있다. 일반적으로 이것은 &#039;&#039;슈퍼 마리오 브라더스&#039;&#039;와 같이 배경 기반 HUD를 허용하기 위해 화면 중간에 스크롤 위치를 변경하는 데 사용된다. 그러나 일부 최신 홈브루 게임은 [https://forums.nesdev.org/viewtopic.php?t=15850 &#039;&#039;Lunar Limit&#039;&#039;] 및 [https://fiskbit.itch.io/irritating-ship &#039;&#039;Irritating Ship&#039;&#039;]과 같이 실제 충돌에 이를 사용한다.&lt;br /&gt;
&lt;br /&gt;
스프라이트 0 히트는 X=255에서 또는 [[#PPUMASK|PPUMASK]]를 통해 스프라이트나 배경이 비활성화된 곳에서는 충돌을 감지할 수 없다. 여기에는 가장 왼쪽 8픽셀이 숨겨져 있을 때 X=0..7이 포함된다. 그러나 PAL의 왼쪽 및 오른쪽 가장자리 자르기에는 영향을 받지 않는다.&lt;br /&gt;
&lt;br /&gt;
타이밍에 이 플래그를 사용할 때 몇 가지 중요한 고려 사항이 있다.&lt;br /&gt;
* 스프라이트 0 히트는 프리렌더 스캔라인까지 지워지지 않으므로 소프트웨어는 이전 프레임의 히트를 현재 프레임의 히트로 착각할 수 있다. 따라서 플래그가 다시 설정되기를 기다리기 전에 플래그가 지워질 때까지 폴링해야 할 수 있다.&lt;br /&gt;
* 게임이 스프라이트 0 히트가 발생할 것으로 예상하고 발생하지 않으면 종종 충돌이 발생한다. 히트가 발생하지 않을 위험이 있는 경우(아마도 스크롤할 때 겹침이 발생하지 않거나 전원 주기, 콘솔 또는 에뮬레이터에 따라 달라질 수 있는 정확한 화면 중간 타이밍에 의존하기 때문에) 폴링 루프를 빠져나갈 다른 방법이 있는 것이 중요하다. 예를 들어, vblank 플래그를 폴링하거나 NMI 핸들러가 게임이 여전히 스프라이트 0 히트를 폴링하고 있는지 확인하여 이를 수행할 수 있다.&lt;br /&gt;
* 게임은 종종 랙 프레임에서 스프라이트 0 히트를 처리하지 않아 화면 중간 이벤트가 발생하지 않는다. 이로 인한 일반적인 결과는 랙 중에 HUD가 깜박이는 것이다. 적어도 랙 프레임에서 NMI 핸들러에서 스프라이트 0 히트를 처리하면 이 문제를 해결할 수 있다.&lt;br /&gt;
&lt;br /&gt;
==== 스프라이트 오버플로 플래그 ====&lt;br /&gt;
&lt;br /&gt;
스프라이트 오버플로 플래그는 스캔라인에 8개 이상의 스프라이트가 있을 때마다 설정되도록 의도되었다. 불행히도 이를 감지하는 논리가 제대로 작동하지 않아 PPU가 9번째 스프라이트를 검색할 때 OAM에서 잘못된 인덱스를 확인하게 된다. 이로 인해 거짓 양성과 거짓 음성이 모두 발생한다. 잘못된 동작에 대한 자세한 내용은 [[PPU sprite evaluation#Sprite_overflow_bug|PPU 스프라이트 평가]]를 참조하라. 실제로 스프라이트 오버플로는 스프라이트 0 히트와 같이 타이밍에 사용되지만, 버그가 있는 동작과 9개의 스프라이트 타일 비용 때문에 일반적으로 두 개 이상의 타이밍 소스가 필요할 때만 사용된다. 스프라이트 0 히트와 마찬가지로 이 플래그는 프리렌더 스캔라인 시작 시 지워지며 프레임당 한 번만 설정할 수 있다.&lt;br /&gt;
&lt;br /&gt;
스프라이트 오버플로를 사용하는 것은 종종 최후의 수단이다. 매퍼 IRQ를 사용할 수 없는 경우 [[APU_DMC#Usage_of_DMC_for_syncing_to_video|DMC IRQ]]는 타이밍에 효과적인 대안이 될 수 있지만 사용하기 복잡하다.&lt;br /&gt;
&lt;br /&gt;
==== 2C05 식별자 ====&lt;br /&gt;
&lt;br /&gt;
2C05 시리즈 아케이드 PPU는 PPU 열린 버스 대신 비트 4-0에 식별자를 반환한다. 이 값은 일종의 복사 방지 형태로 게임에서 확인한다. 이는 소비자용 2C05-99에는 적용되지 않으며, 평소와 같이 열린 버스를 반환한다. PPU에서 직접 데이터를 수집하지는 않았지만 2C05 게임은 다음 값을 예상한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;tabular&amp;quot;&lt;br /&gt;
! PPU&lt;br /&gt;
! 마스크&lt;br /&gt;
! 값&lt;br /&gt;
|-&lt;br /&gt;
| 2C05-02&lt;br /&gt;
| $3F&lt;br /&gt;
| $3D&lt;br /&gt;
|-&lt;br /&gt;
| 2C05-03&lt;br /&gt;
| $1F&lt;br /&gt;
| $1C&lt;br /&gt;
|-&lt;br /&gt;
| 2C05-04&lt;br /&gt;
| $1F&lt;br /&gt;
| $1B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Anchor|OAMADDR}}{{Anchor|Reg2003}}{{Anchor|OAM_address_($2003)_&amp;gt;_write}}&lt;br /&gt;
=== OAMADDR - 스프라이트 RAM 주소 ($2003 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 AAAA AAAA&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- OAM 주소&lt;br /&gt;
&lt;br /&gt;
여기에 접근하려는 [[PPU OAM|OAM]]의 주소를 쓴다. 대부분의 게임은 여기에 $00을 쓰고 [[#OAMDMA|OAMDMA]]를 사용한다. (DMA는 2A03/7 칩에 구현되어 있으며 [[#OAMDATA|OAMDATA]]에 반복적으로 쓰는 방식으로 작동한다)&lt;br /&gt;
&lt;br /&gt;
==== 렌더링 중 값 ====&lt;br /&gt;
&lt;br /&gt;
OAMADDR은 프리렌더 및 가시 스캔라인의 257-320 틱(스프라이트 타일 로딩 간격) 각각 동안 0으로 설정된다. 이는 또한 정상적으로 완료된 렌더링 프레임의 끝에서 OAMADDR이 항상 0으로 돌아온다는 것을 의미한다.&lt;br /&gt;
&lt;br /&gt;
렌더링이 스캔라인 중간에 활성화되면&amp;lt;ref name=&amp;quot;OAMADDR Clarification&amp;quot;/&amp;gt;, 가시 스캔라인의 틱 65에서 OAM 스프라이트 평가가 시작되기 전에 OAMADDR이 0으로 설정되지 않은 경우 추가적인 결과가 발생한다. 이 틱에서의 OAMADDR 값은 이 스캔라인에 대한 스프라이트 평가의 시작 주소를 결정하며, 이로 인해 OAMADDR의 스프라이트가 [[sprite-0 hit]] 및 우선 순위 모두에 대해 스프라이트 0인 것처럼 처리될 수 있다. OAMADDR이 정렬되지 않고 OAM 항목의 Y 위치(첫 번째 바이트)를 가리키지 않으면, 가리키는 모든 것(타일 인덱스, 속성 또는 X 좌표)이 Y 위치로 재해석되고 다음 바이트도 유사하게 재해석된다. OAM의 끝에 도달하면 더 이상 스프라이트가 발견되지 않으며, 시작 OAMADDR 이전의 모든 스프라이트를 효과적으로 숨긴다.&lt;br /&gt;
&lt;br /&gt;
==== OAMADDR 주의사항 ====&lt;br /&gt;
&lt;br /&gt;
2C02G에서는 OAMADDR에 쓰면 OAM이 손상된다. 정확한 손상은 완전히 설명되지 않았지만, 이는 일반적으로 대상 주소의 8바이트 행 위에 스프라이트 8과 9(주소 $20)를 복사하는 것으로 보인다. 이 복사의 소스 주소는 CPU 버스의 이전 값(가장 자주 $2003 피연산자에서 $20)에서 오는 것으로 보인다.&amp;lt;ref name=&amp;quot;OAMADDR Clarification&amp;quot;&amp;gt;[//forums.nesdev.org/viewtopic.php?p=285674#p285674 OAMDATA $2003 손상 명확화?] - 포럼 스레드&amp;lt;/ref&amp;gt;&amp;lt;ref name = &amp;quot;OAMglitch&amp;quot;&amp;gt;[//forums.nesdev.org/viewtopic.php?t=10189 수동 OAM 쓰기 결함] blargg의 스레드&amp;lt;/ref&amp;gt; 다른 가능한 동작도 있을 수 있다. 그런 다음 OAM의 256바이트를 모두 써서 이 문제를 해결할 수 있지만, [[PPU OAM#Dynamic RAM decay|OAM 붕괴]]가 시작되기 전의 제한된 시간으로 인해 일반적으로 OAMDMA를 통해 수행해야 한다.&lt;br /&gt;
&lt;br /&gt;
또한 렌더링이 시작될 때 OAMADDR이 8보다 작지 않으면 &amp;lt;tt&amp;gt;OAMADDR &amp;amp; 0xF8&amp;lt;/tt&amp;gt;에서 시작하는 8바이트가 OAM의 첫 8바이트에 복사되는 경우도 있다. 이것이 관련이 있을 가능성이 높다. Dendy에서는 후자의 버그가 2C02 호환성을 위해 필요하다.&lt;br /&gt;
&lt;br /&gt;
2C03, 2C04, 2C05&amp;lt;ref name=&amp;quot;noOAMglitch&amp;quot;&amp;gt;[//forums.nesdev.org/viewtopic.php?p=179676#p179676 $2003에 대한 쓰기는 OAM 손상을 일으키지 않는 것으로 보임] lidnariq의 게시물&amp;lt;/ref&amp;gt; 및 2C07에서는 OAMADDR이 의도한 대로 작동하는 것으로 알려져 있다. 이 버그가 2C02의 모든 리비전에 존재하는지는 알려져 있지 않다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|OAMDATA}}{{Anchor|Reg2004}}{{Anchor|OAM_data_($2004)_&amp;lt;&amp;gt;_read/write}}&lt;br /&gt;
=== OAMDATA - 스프라이트 RAM 데이터 ($2004 읽기/쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 DDDD DDDD&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- OAM 데이터&lt;br /&gt;
&lt;br /&gt;
여기에 OAM 데이터를 쓴다. 쓰기는 쓰기 후 [[#OAMADDR|OAMADDR]]을 증가시킨다. 읽기는 그렇지 않다. 수직 또는 강제 블랭킹 중 읽기는 해당 주소의 OAM에서 값을 반환한다.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;대부분의 경우 이 레지스터에 직접 쓰지 마라.&#039;&#039;&#039; OAM에 대한 변경은 일반적으로 vblank 중에만 이루어져야 하므로, OAMDATA를 통한 쓰기는 부분 업데이트에만 효과적이다. 한 vblank 간격 내에 모든 OAM을 업데이트하기에는 너무 느리고, 위에서 설명한 것처럼 부분 쓰기는 손상을 유발하기 때문이다. 대부분의 게임은 대신 [[#OAMDMA|OAMDMA]]를 통해 DMA 기능을 사용한다.&lt;br /&gt;
&lt;br /&gt;
* PPU가 렌더링하는 동안 OAMDATA를 읽으면 스프라이트 평가 및 로딩 중 내부 OAM 접근이 노출된다. &#039;&#039;Micro Machines&#039;&#039;가 이를 수행한다.&lt;br /&gt;
* 렌더링 중(프리 렌더 라인 및 가시 라인 0-239에서, 스프라이트 또는 배경 렌더링이 활성화된 경우) OAMDATA에 대한 쓰기는 OAM의 값을 수정하지 않지만, [[#OAMADDR|OAMADDR]]의 결함 있는 증가를 수행하여 상위 6비트만 증가시킨다(즉, [[PPU sprite evaluation]]에서 &#039;&#039;[n]&#039;&#039; 값을 증가시킨다. 스프라이트 평가의 현재 상태에 따라 하위 비트를 대신 증가시킬 수도 있다). 이는 $2004에 대한 쓰기를 사용하므로 [[#OAMDMA|OAMDMA]]를 통한 DMA 전송에도 적용된다. 에뮬레이션 목적으로는 렌더링 중 쓰기를 완전히 무시하는 것이 가장 좋다.&lt;br /&gt;
* 이전에는 이 레지스터에서 읽는 것이 신뢰할 수 없다고 생각되었다&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=6424 $2004 읽기 신뢰성?] blargg의 스레드&amp;lt;/ref&amp;gt;. 그러나 최근 증거에 따르면 이는 전적으로 [[#OAMADDR|OAMADDR]] 쓰기에 의한 손상 때문인 것으로 보인다.&lt;br /&gt;
* 초기 Famicom 및 NES에서 발견된 가장 오래된 PPU 구현에서는 이 레지스터를 읽을 수 없다&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?p=62137#p62137 초기 리비전에서는 $2004를 읽을 수 없음] jsr의 답글&amp;lt;/ref&amp;gt;. 읽기 기능은 대부분의 NES 및 이후 Famicom에서 발견된 RP2C02G에 추가되었다.&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?p=150926#p150926 하드웨어 리비전 및 $2004 읽기] Great Hierophant의 답글&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 2C07에서는 스프라이트 평가를 &#039;&#039;절대&#039;&#039; 완전히 비활성화할 수 없으며, vblank 시작 후 24 스캔라인 후에 항상 시작된다&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=11041 2C07 PPU 스프라이트 평가 노트] thefox의 스레드&amp;lt;/ref&amp;gt;(2C02에서 프리렌더 스캔라인이 있었을 때와 동일). 따라서 OAM에 대한 모든 업데이트는 2C07이 수직 블랭킹을 신호한 후 처음 24 스캔라인 내에 수행되어야 한다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUSCROLL}}{{Anchor|Reg2005}}{{Anchor|Scroll_($2005)_&amp;gt;&amp;gt;_write_x2}}&lt;br /&gt;
=== PPUSCROLL - X 및 Y 스크롤 ($2005 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 1번째 쓰기&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 XXXX XXXX&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- X 스크롤 비트 7-0 (PPUCTRL 비트 0의 비트 8)&lt;br /&gt;
 &lt;br /&gt;
 2번째 쓰기&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 YYYY YYYY&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- Y 스크롤 비트 7-0 (PPUCTRL 비트 1의 비트 8)&lt;br /&gt;
&lt;br /&gt;
이 레지스터는 [[PPU scrolling|스크롤 위치]]를 변경하는 데 사용되며, [[#PPUCTRL|PPUCTRL]]을 통해 선택된 네임테이블의 어떤 픽셀이 렌더링된 화면의 왼쪽 상단 모서리에 있어야 하는지 PPU에 알려준다. PPUSCROLL은 두 번의 쓰기를 필요로 한다. 첫 번째는 X 스크롤이고 두 번째는 Y 스크롤이다. 이것이 첫 번째 쓰기인지 두 번째 쓰기인지는 [[#PPUADDR|PPUADDR]]과 공유되는 [[#Internal_registers|w 레지스터]]에 의해 내부적으로 추적된다. 일반적으로 이 레지스터는 다음 프레임이 원하는 위치에서 렌더링을 시작하도록 수직 블랭킹 중에 쓰여지지만, 화면을 분할하기 위해 렌더링 중에 수정될 수도 있다. 렌더링 중에 수직 스크롤을 변경하면 다음 프레임에만 적용된다. PPUCTRL의 네임테이블 비트와 함께 스크롤은 구성 요소당 9비트로 생각할 수 있으며, 스크롤 위치를 완전히 지정하려면 PPUSCROLL과 함께 PPUCTRL을 업데이트해야 한다.&lt;br /&gt;
&lt;br /&gt;
{{mbox&lt;br /&gt;
| type = warning&lt;br /&gt;
| text = &amp;lt;font size=+1&amp;gt;PPU 스크롤 레지스터는 PPU 주소 레지스터와 [[PPU_scrolling#PPU_internal_registers|내부 상태를 공유]]한다. 이 때문에 PPUSCROLL 및 PPUCTRL의 네임테이블 비트는 PPUADDR에 대한 모든 쓰기 &#039;&#039;후에&#039;&#039; 쓰여져야 한다.&amp;lt;/font&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
[[#Internal_registers|w (쓰기 래치)]]를 지우기 위해 [[#PPUSTATUS|PPUSTATUS]]를 읽은 후, 화면을 켜기 직전에 PPUSCROLL에 수평 및 수직 스크롤 오프셋을 쓴다.&lt;br /&gt;
&lt;br /&gt;
  ; X 및 Y 스크롤의 상위 비트를 설정한다.&lt;br /&gt;
  lda ppuctrl_value&lt;br /&gt;
  ora current_nametable&lt;br /&gt;
  sta PPUCTRL&lt;br /&gt;
 &lt;br /&gt;
  ; X 및 Y 스크롤의 하위 8비트를 설정한다.&lt;br /&gt;
  bit PPUSTATUS&lt;br /&gt;
  lda cam_position_x&lt;br /&gt;
  sta PPUSCROLL&lt;br /&gt;
  lda cam_position_y&lt;br /&gt;
  sta PPUSCROLL&lt;br /&gt;
&lt;br /&gt;
수평 오프셋은 0에서 255까지의 범위를 갖는다. &amp;quot;정상적인&amp;quot; 수직 오프셋은 0에서 239까지의 범위를 가지며, 240에서 255까지의 값은 현재 네임테이블 끝의 속성 데이터가 타일 데이터로 잘못 사용되게 한다. PPU는 일반적으로 239에서 다음 네임테이블의 0으로 자동으로 건너뛰므로 이러한 &amp;quot;잘못된&amp;quot; 스크롤 위치는 명시적으로 기록된 경우에만 발생한다.&lt;br /&gt;
&lt;br /&gt;
여기서 여러 프레임에 걸쳐 스크롤 값을 변경하고 새로 드러난 네임테이블 영역에 타일을 쓰면 큰 배경 위로 카메라가 패닝하는 효과를 얻을 수 있다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUADDR}}{{Anchor|Reg2006}}{{Anchor|Address_($2006)_&amp;gt;&amp;gt;_write_x2}}&lt;br /&gt;
=== PPUADDR - VRAM 주소 ($2006 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 1번째 쓰기  2번째 쓰기&lt;br /&gt;
 15 bit  8  7  bit  0&lt;br /&gt;
 ---- ----  ---- ----&lt;br /&gt;
 ..AA AAAA  AAAA AAAA&lt;br /&gt;
   || ||||  |||| ||||&lt;br /&gt;
   ++-++++--++++-++++- VRAM 주소&lt;br /&gt;
&lt;br /&gt;
CPU와 PPU는 별도의 버스에 있기 때문에 어느 쪽도 다른 쪽의 메모리에 직접 접근할 수 없다. CPU는 PPU의 한 쌍의 레지스터를 통해 VRAM에 쓴다. 먼저 [[#PPUADDR|PPUADDR]]에 주소를 로드한 다음 [[#PPUDATA|PPUDATA]]에 데이터를 반복적으로 쓴다. 각 PPUDATA 접근은 [[#PPUCTRL|PPUCTRL]]에 구성된 대로 주소를 자동으로 1 또는 32만큼 증가시키므로 VRAM 주소는 모든 데이터 쓰기 시리즈에 대해 한 번만 설정하면 된다.&lt;br /&gt;
&lt;br /&gt;
16비트 주소는 PPUADDR에 한 번에 한 바이트씩, 상위 바이트부터 쓴다. 이것이 첫 번째 쓰기인지 두 번째 쓰기인지는 PPU의 [[#Internal_registers|내부 w 레지스터]]에 의해 추적되며, 이는 [[#PPUSCROLL|PPUSCROLL]]과 공유된다. w가 0이 아니거나 그 상태를 알 수 없는 경우, 주소를 쓰기 전에 [[#PPUSTATUS|PPUSTATUS]]를 읽어 지워야 한다. 예를 들어, w가 0으로 알려진 후 VRAM 주소를 $2108로 설정하려면:&lt;br /&gt;
&lt;br /&gt;
   lda #$21&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   lda #$08&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
&lt;br /&gt;
[[PPU_memory_map|PPU 주소 공간]]은 14비트로, $0000-$3FFF에 걸쳐 있다. 이 레지스터에 기록된 값의 비트 14와 15는 무시된다. 그러나 PPUADDR에 기록된 데이터를 보유하는 [[#Internal_registers|내부 t 레지스터]]의 비트 14는 PPUADDR 상위 바이트를 쓸 때 0으로 강제된다. 이 세부 사항은 VRAM 주소를 설정하기 위해 PPUADDR을 사용할 때는 중요하지 않지만, 화면 중간 스크롤을 제어하는 데 사용할 때는 중요한 제한 사항이다(자세한 내용은 [[PPU scrolling]] 참조).&lt;br /&gt;
&lt;br /&gt;
==== 참고 ====&lt;br /&gt;
화면 새로 고침 중 [[#PPUSCROLL|PPUSCROLL]] 및 [[#PPUADDR|PPUADDR]]에 접근하면 흥미로운 래스터 효과가 발생한다. 각 스캔라인의 시작 위치는 네임테이블 메모리의 모든 픽셀 위치로 설정할 수 있다. 자세한 내용은 [[PPU scrolling]]을 참조하라.&lt;br /&gt;
&lt;br /&gt;
==== 팔레트 손상 ====&lt;br /&gt;
특정 상황에서 PPU 팔레트의 항목이 손상될 수 있다. 이것이 정확히 어떻게 또는 왜 발생하는지는 불분명하지만, NTSC PPU의 모든 리비전은 적어도 어느 정도 취약한 것으로 보인다.&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?t=23209 렌더링 중 PPU가 꺼졌을 때 팔레트 변색 문제] N·K의 스레드&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
팔레트 메모리에 쓰기를 마쳤을 때의 해결 방법은 항상 다음과 같다.&lt;br /&gt;
# 필요한 경우 주소를 업데이트하여 $3F00, $3F10, $3F20 또는 다른 미러를 가리키도록 한다.&lt;br /&gt;
# 그런 다음에만 주소를 팔레트 메모리 외부를 가리키도록 변경한다.&lt;br /&gt;
&lt;br /&gt;
이 해결 방법을 구현하는 코드 조각은 수많은 게임에 존재한다.&amp;lt;ref&amp;gt;[//forums.nesdev.org/viewtopic.php?p=280899#p280899 이상한 PPU 쓰기] Fiskbit의 스레드&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   lda #$3F&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   lda #0&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
   sta PPUADDR&lt;br /&gt;
&lt;br /&gt;
==== 버스 충돌 ====&lt;br /&gt;
래스터 효과 중, PPUADDR에 대한 두 번째 쓰기가 특정 시간에 발생하면 최대 한 축의 스크롤링이 기록된 값과 현재 값의 비트 AND로 설정된다. 두 번째 쓰기를 완료하는 유일한 안전한 시간은 블랭킹 중이다. 더 구체적인 타이밍은 [[PPU scrolling]]을 참조하라. [//forums.nesdev.org/viewtopic.php?p=230391#p230391]&lt;br /&gt;
&lt;br /&gt;
{{Anchor|PPUDATA}}{{Anchor|Reg2007}}{{Anchor|Data_($2007)_&amp;lt;&amp;gt;_read/write}}&lt;br /&gt;
=== PPUDATA - VRAM 데이터 ($2007 읽기/쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 DDDD DDDD&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- VRAM 데이터&lt;br /&gt;
&lt;br /&gt;
VRAM 읽기/쓰기 데이터 레지스터. 접근 후, 비디오 메모리 주소는 $2000의 비트 2에 의해 결정된 양만큼 증가한다.&lt;br /&gt;
&lt;br /&gt;
[[#PPUMASK|PPUMASK]]로 배경/스프라이트 렌더링 플래그를 비활성화하여 화면이 꺼지거나 수직 블랭킹 중에 이 포트를 통해 VRAM에서 데이터를 읽거나 쓸 수 있다. 이 레지스터에 접근하면 VRAM 주소가 증가하므로, 그래픽 결함을 유발하고 쓰기 시 예측할 수 없는 VRAM 주소에 쓰게 되므로 수직 또는 강제 블랭킹 외부에서는 접근해서는 안 된다. 그러나 소수의 게임은 렌더링 중에 PPUDATA에서 읽는 것으로 알려져 있으며, 이로 인해 스크롤 위치가 변경된다. [[PPU scrolling#$2007 reads and writes|PPU 스크롤링]] 및 [[Tricky-to-emulate games]]를 참조하라.&lt;br /&gt;
&lt;br /&gt;
VRAM 읽기 및 쓰기는 렌더링이 사용하는 것과 동일한 내부 주소 레지스터를 공유한다. 따라서 비디오 메모리에 데이터를 로드한 후, 프로그램은 잘못된 스크롤링을 피하기 위해 [[#PPUSCROLL|PPUSCROLL]] 및 [[#PPUCTRL|PPUCTRL]] (비트 1-0) 쓰기로 스크롤 위치를 다시 로드해야 한다.&lt;br /&gt;
&lt;br /&gt;
{{Anchor|The PPUDATA read buffer (post-fetch)}}&lt;br /&gt;
==== PPUDATA 읽기 버퍼 ====&lt;br /&gt;
&lt;br /&gt;
PPUDATA에서 읽는 것은 현재 VRAM 주소의 값을 직접 반환하는 것이 아니라 내부 읽기 버퍼의 내용을 반환한다. 이 읽기 버퍼는 모든 PPUDATA 읽기에서 업데이트되지만, 이전 내용이 CPU로 반환된 &#039;&#039;후에만&#039;&#039; 업데이트되므로 PPUDATA 읽기를 효과적으로 하나 지연시킨다. 이는 PPU 버스 읽기가 너무 느려서 CPU 읽기를 서비스할 시간에 완료할 수 없기 때문이다. 이 읽기 버퍼 때문에, PPUADDR을 통해 VRAM 주소를 설정한 후에는 먼저 PPUDATA를 읽어 읽기 버퍼를 준비(결과 무시)한 다음 원하는 데이터를 읽어야 한다.&lt;br /&gt;
&lt;br /&gt;
읽기 버퍼는 PPUDATA 읽기에서만 업데이트된다는 점에 유의하라. 쓰기나 렌더링과 같은 다른 PPU 프로세스에는 영향을 받지 않으며, 다음 읽기까지 값을 무기한 유지한다.&lt;br /&gt;
&lt;br /&gt;
==== 팔레트 RAM 읽기 ====&lt;br /&gt;
&lt;br /&gt;
이후 PPU는 $3F00-$3FFF에서 팔레트 데이터를 읽는 신뢰할 수 없는 기능을 추가했다. 이러한 읽기는 팔레트 RAM이 PPU 주소 공간에 오버레이된 PPU 내부의 별도 메모리 공간이므로 표준 VRAM 읽기와 다르게 작동한다. 참조된 6비트 팔레트 데이터는 내부 읽기 버퍼로 가지 않고 즉시 반환되므로 준비 읽기가 필요하지 않다. 동시에 PPU는 지정된 주소의 PPU 메모리에서 팔레트 데이터 &amp;quot;아래&amp;quot;에서 일반 읽기를 수행하고 이 읽기 결과는 평소와 같이 읽기 버퍼로 들어간다. 읽기 버퍼의 이전 내용은 팔레트를 읽을 때 버려지지만, 주소를 팔레트 RAM 외부로 변경하고 한 번 읽으면 이 그림자 메모리([[PPU memory map|일반적으로 미러링된 네임테이블]])의 내용에 접근할 수 있다. 팔레트 RAM 읽기를 지원하지 않는 PPU에서는 이 메모리 범위가 나머지 PPU 메모리와 동일하게 동작한다.&lt;br /&gt;
&lt;br /&gt;
이 기능은 2C02G, 2C02H 및 PAL PPU에서 지원된다. 팔레트를 읽을 때 반환되는 바이트는 상위 2비트에 [[Open_bus_behavior#PPU_open_bus|PPU 열린 버스]]를 포함하며, 값은 그레이스케일 모드에 의해 수정된 후 반환된다. 그레이스케일 모드가 활성화되면 하위 4비트가 지워진다. 불행히도 일부 콘솔에서는 마스터 클럭에 대한 4개의 CPU/PPU 정렬 중 하나에서 팔레트 읽기가 손상될 수 있다. 이 손상은 레지스터 접근을 나타내는 [[PPU pinout|PPU /CS]] 신호가 언제 비활성화되는지에 따라 다르며, 이는 콘솔마다 다르다. 이 기능이 모든 PPU에 있는 것은 아니라는 점과 결합하여 개발자는 팔레트 RAM에서 읽는 것에 의존해서는 안 된다.&lt;br /&gt;
&lt;br /&gt;
==== DPCM 샘플과의 읽기 충돌 ====&lt;br /&gt;
&lt;br /&gt;
현재 DPCM 샘플을 재생 중인 경우, APU의 샘플 가져오기 중단이 $2007을 읽는 명령어와 동시에 발생하면 추가 읽기 사이클이 발생할 가능성이 있다. 이로 인해 추가 증가가 발생하고 바이트가 건너뛰어져 잘못된 데이터가 읽힌다. 참조: [[APU_DMC#Conflict with controller and PPU read|APU DMC]]&lt;br /&gt;
&lt;br /&gt;
{{Anchor|OAMDMA}}{{Anchor|Reg4014}}&lt;br /&gt;
=== OAMDMA - 스프라이트 DMA ($4014 쓰기) ===&lt;br /&gt;
----&lt;br /&gt;
 7  bit  0&lt;br /&gt;
 ---- ----&lt;br /&gt;
 AAAA AAAA&lt;br /&gt;
 |||| ||||&lt;br /&gt;
 ++++-++++- 소스 페이지 (소스 주소의 상위 바이트)&lt;br /&gt;
&lt;br /&gt;
OAMDMA는 CPU를 일시 중단하여 [[DMA]]를 사용하여 CPU 메모리 페이지를 PPU OAM으로 빠르게 복사할 수 있는 CPU 레지스터이다. 항상 256바이트를 복사하고 소스 주소는 항상 페이지 정렬($00으로 끝남)로 시작한다. 이 레지스터에 기록된 값은 소스 주소의 상위 바이트이며, 복사는 쓰기 직후 사이클에서 시작된다. 복사는 513 또는 514 사이클이 걸리며, CPU 메모리에서 읽기와 [[#OAMDATA|OAMDATA]]에 쓰기의 256 쌍으로 구현된다. vblank가 매우 짧고 [[#OAMADDR|OAMADDR]]을 변경하면 종종 OAM이 손상되기 때문에, OAM DMA는 일반적으로 매 프레임마다 스프라이트를 업데이트하는 유일한 현실적인 옵션이다. 데이터가 올바르게 정렬되고 [[Errata|손상을 피하기 위해]] DMA를 시작하기 전에 OAMADDR에 0을 써야 한다.&amp;lt;ref name = &amp;quot;OAMglitch&amp;quot; /&amp;gt; OAM DMA는 렌더링이 비활성화된 상태에서 프레임 중간에 수행할 수 있지만, 일반적으로 vblank에서만 수행된다.&lt;br /&gt;
&lt;br /&gt;
OAM은 동적 RAM(DRAM)으로 구성되어 있으며, 자주 새로 고치지 않으면 붕괴된다. 이는 NTSC와 PAL에서 다른 고려 사항이 필요하다. 새로 고침은 DRAM 행을 읽거나 쓸 때마다 자동으로 발생하므로, 렌더링 중 스프라이트 평가 프로세스에 의해 모든 스캔라인에서 새로 고쳐진다. NTSC에서는 vblank가 충분히 짧아서 렌더링이 다시 시작되기 전에 OAM이 붕괴되지 않으므로, OAM DMA는 vblank 중 언제든지 수행할 수 있다. PAL에서는 vblank가 훨씬 길기 때문에 그 시간 동안 붕괴를 피하기 위해 PPU는 NMI 후 24 스캔라인 후에 강제 새로 고침을 자동으로 수행하며, 이 동안에는 OAM에 쓸 수 없다. 이는 OAM DMA가 PAL의 vblank 시작으로 제한된다는 것을 의미한다. NTSC vblank는 24 PAL 스캔라인보다 짧으므로, NTSC 호환 NMI 핸들러는 강제 새로 고침 전에 완료되므로 OAM DMA 타이밍에 관계없이 PAL에서 작동해야 한다. 어느 경우든, vblank 중에 업데이트되지 않으면 OAM은 붕괴되지 않으며, 실제로 랙 프레임(CPU가 vblank 전에 작업을 완료하지 못한 프레임)에서는 불완전한 스프라이트 데이터를 PPU에 복사하는 것을 피하기 위해 일반적으로 업데이트해서는 안 된다.&lt;br /&gt;
&lt;br /&gt;
== 내부 레지스터 ==&lt;br /&gt;
&lt;br /&gt;
PPU에는 [[PPU scrolling#PPU internal registers|PPU 스크롤링]]에 자세히 설명된 4개의 내부 레지스터도 있다.&lt;br /&gt;
* &#039;&#039;&#039;v&#039;&#039;&#039;: 렌더링 중에는 스크롤 위치에 사용된다. 렌더링 외부에서는 현재 VRAM 주소로 사용된다.&lt;br /&gt;
* &#039;&#039;&#039;t&#039;&#039;&#039;: 렌더링 중에는 다음 스캔라인의 시작 거친 x 스크롤과 화면의 시작 y 스크롤을 지정한다. 렌더링 외부에서는 스크롤 또는 VRAM 주소를 v로 전송하기 전에 보유한다.&lt;br /&gt;
* &#039;&#039;&#039;x&#039;&#039;&#039;: 현재 스크롤의 미세 x 위치로, 렌더링 중에 v와 함께 사용된다.&lt;br /&gt;
* &#039;&#039;&#039;w&#039;&#039;&#039;: [[#PPUSCROLL|PPUSCROLL]] 또는 [[#PPUADDR|PPUADDR]]에 대한 각 쓰기에서 토글되며, 이것이 첫 번째 쓰기인지 두 번째 쓰기인지를 나타낸다. [[#PPUSTATUS|PPUSTATUS]]를 읽으면 지워진다. &#039;쓰기 래치&#039; 또는 &#039;쓰기 토글&#039;이라고도 한다.&lt;br /&gt;
&lt;br /&gt;
== 참조 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:NesDev%EB%B0%9C%EC%B7%8C&amp;diff=147</id>
		<title>틀:NesDev발췌</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:NesDev%EB%B0%9C%EC%B7%8C&amp;diff=147"/>
		<updated>2025-10-01T04:04:18Z</updated>

		<summary type="html">&lt;p&gt;Root: 새 문서: {{알림 상자 | 제목 = 해당 문서는 NesDev의 문서를 번역했습니다. | 색 = #99EA61 | 왼쪽 그림 = 없음 | 본문 = 해당 문서의 전체 또는 일부는 NesDev의 문서를 번역했으며, 일부 오래된 내용이 포함되어 있을수도 있습니다.&amp;lt;br&amp;gt; 원글링크: 링크를 삽입해 주세요}}} }}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{알림 상자 | 제목 = 해당 문서는 NesDev의 문서를 번역했습니다. | 색 = #99EA61 | 왼쪽 그림 = 없음 | 본문 = 해당 문서의 전체 또는 일부는 NesDev의 문서를 번역했으며, 일부 오래된 내용이 포함되어 있을수도 있습니다.&amp;lt;br&amp;gt; 원글링크: [[{{{원글링크|링크를 삽입해 주세요}}}]] }}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=146</id>
		<title>틀:알림 상자</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=146"/>
		<updated>2025-10-01T04:03:56Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{| style=&amp;quot;clear: both; width: {{{폭|100%}}}; margin: 0 auto; border-collapse: collapse; background: {{{배경색|#fbfbfb}}}; border: {{{경계선|1px solid #aaa}}};  {{#if:{{{오른쪽색|}}}|border-right: 10px solid {{{오른쪽색|#1e90ff}}}; }}border-top: 5px solid {{{색|#1e90ff}}};&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
{{#ifeq:{{{왼쪽 그림}}}|없음| |{{!}}style=&amp;quot;width: 52px; padding: 2px 0px 2px 0.5em;&amp;quot;{{!}}{{{왼쪽 그림 예외|[[그림:{{{왼쪽 그림|information icon4.svg}}}|링크=|{{{왼쪽 그림 크기|45px}}}|{{{왼쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|style=&amp;quot;padding: {{{간격|8px}}}; font-size:130%;&amp;quot;|{{#if:{{{제목|}}}|&amp;lt;span style=&amp;quot;color:{{{제목색|#000000}}};&amp;quot;&amp;gt;&#039;&#039;&#039;{{{제목}}}&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;}}&amp;lt;span style=&amp;quot;color:{{{본문색|#000000}}};font-size:70%;line-height:0.8;&amp;quot;&amp;gt;{{{본문|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
{{#if:{{{오른쪽 그림|}}}|{{!}}style=&amp;quot;width: 52px; padding: 2px 4px 2px 0px;&amp;quot;{{!}}{{{오른쪽 그림 예외|[[그림:{{{오른쪽 그림| - }}}|링크=|{{{오른쪽 그림 크기|45px}}}|{{{오른쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|}{{#if: {{{분류|}}}|[[분류:{{{분류}}}]]}}{{#ifeq: {{NAMESPACE}}|틀|[[분류:알림 상자 틀]]}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 설명 || 사용&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* 폭 = 100% (기본 설정)&lt;br /&gt;
* 색 = #1e90ff (기본 설정)&lt;br /&gt;
* 배경색 = #fbfbfb (기본 설정)&lt;br /&gt;
* 경계선 = 1px solid #aaaaaa (기본 설정)&lt;br /&gt;
* 왼쪽 그림 = Info non-talk.png (기본 설정, ‘없음’으로 설정할 수도 있습니다.)&lt;br /&gt;
* 왼쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 왼쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 왼쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 오른쪽 그림 = 없어도 됨&lt;br /&gt;
* 오른쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 오른쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 오른쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 제목색 = #000000 (기본 설정)&lt;br /&gt;
* 본문색 = #000000 (기본 설정)&lt;br /&gt;
* 제목 = &lt;br /&gt;
* 본문 = &lt;br /&gt;
||&amp;lt;pre&amp;gt;{{알림 상자&lt;br /&gt;
| 폭 = &lt;br /&gt;
| 색 = &lt;br /&gt;
| 배경색 = &lt;br /&gt;
| 경계선 = &lt;br /&gt;
| 왼쪽 그림 =&lt;br /&gt;
| 왼쪽 그림 크기 =&lt;br /&gt;
| 왼쪽 그림 설명 =&lt;br /&gt;
| 왼쪽 그림 예외 =&lt;br /&gt;
| 오른쪽 그림 = &lt;br /&gt;
| 오른쪽 그림 크기 =&lt;br /&gt;
| 오른쪽 그림 설명 =&lt;br /&gt;
| 오른쪽 그림 예외 =&lt;br /&gt;
| 간격 = &lt;br /&gt;
| 제목 = &lt;br /&gt;
| 본문 = &lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=Asar&amp;diff=145</id>
		<title>Asar</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=Asar&amp;diff=145"/>
		<updated>2025-10-01T03:31:14Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
[https://github.com/RPGHacker/asar GitHub]&lt;br /&gt;
&lt;br /&gt;
[[슈퍼패미컴]]용 [[어셈블러]]. 기존 롬 이미지에 [[패치]]를 적용하거나 [[소스 코드]]로부터 새로운 롬을 만들어낼 수 있다.&lt;br /&gt;
&lt;br /&gt;
[[분류:어셈블러]]&lt;br /&gt;
[[분류:슈퍼패미컴]][[분류:토막글]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%EB%AC%B8%EC%9E%90_%EC%BD%94%EB%93%9C&amp;diff=144</id>
		<title>문자 코드</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%EB%AC%B8%EC%9E%90_%EC%BD%94%EB%93%9C&amp;diff=144"/>
		<updated>2025-10-01T03:30:48Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
== 개요 ==&lt;br /&gt;
각 문자를 나타내는 고유 코드(번호).&lt;br /&gt;
&lt;br /&gt;
== 원리 ==&lt;br /&gt;
== 관련 문서 ==&lt;br /&gt;
* [[고유번호표]]&lt;br /&gt;
&lt;br /&gt;
[[분류:데이터]][[분류:토막글]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%EB%B9%84%ED%8A%B8&amp;diff=143</id>
		<title>비트</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%EB%B9%84%ED%8A%B8&amp;diff=143"/>
		<updated>2025-10-01T03:28:29Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
[[분류:토막글]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;비트&#039;&#039;&#039;(bit, &#039;&#039;&#039;b&#039;&#039;&#039;inary dig&#039;&#039;&#039;it&#039;&#039;&#039;)란 컴퓨터 등 전자기기에서 사용 가능한 정보의 최소 단위로 0과 1의 중 하나의 값을 가진다.&lt;br /&gt;
== 실제 사용 예 ==&lt;br /&gt;
[[1BPP]](&#039;&#039;&#039;1&#039;&#039;&#039; &#039;&#039;&#039;B&#039;&#039;&#039;it &#039;&#039;&#039;P&#039;&#039;&#039;er &#039;&#039;&#039;P&#039;&#039;&#039;ixel) 그래픽의 경우 화소 하나가 단일 비트로 쓰인다. (배경색/전경색의 2색 그림)&lt;br /&gt;
&lt;br /&gt;
[[2BPP]](&#039;&#039;&#039;2&#039;&#039;&#039; &#039;&#039;&#039;B&#039;&#039;&#039;its &#039;&#039;&#039;P&#039;&#039;&#039;er &#039;&#039;&#039;P&#039;&#039;&#039;ixel) 그래픽의 경우 화소 하나가 2개의 비트로 쓰인다. (배경색 포함 4색 그림)&lt;br /&gt;
&lt;br /&gt;
[[4BPP]](&#039;&#039;&#039;4&#039;&#039;&#039; &#039;&#039;&#039;B&#039;&#039;&#039;its &#039;&#039;&#039;P&#039;&#039;&#039;er &#039;&#039;&#039;P&#039;&#039;&#039;ixel) 그래픽의 경우 화소 하나가 4개의 비트로 쓰인다. (배경색 포함 16색 그림)&lt;br /&gt;
&lt;br /&gt;
파일로 저장되는 경우 8개의 비트가 모여 1 [[바이트]](byte)를 이루고 최소 저장단위로 쓰인다.&lt;br /&gt;
&lt;br /&gt;
[[분류:데이터]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%EB%B0%94%EC%9D%B4%ED%8A%B8&amp;diff=142</id>
		<title>바이트</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%EB%B0%94%EC%9D%B4%ED%8A%B8&amp;diff=142"/>
		<updated>2025-10-01T03:28:16Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
[[분류:토막글]]&lt;br /&gt;
&#039;&#039;&#039;바이트&#039;&#039;&#039;(byte)는 컴퓨터의 기억장치의 기본 단위로 기본적으로 8 [[비트]]를 묶은 것을 1 바이트로 정의한다.&lt;br /&gt;
=== 설명 ===&lt;br /&gt;
바이트는 0x00 ~ 0xFF 의 값을 가지므로 256 가지의 값 중의 하나를 표현가능하다.&lt;br /&gt;
&lt;br /&gt;
부호 없는 정수일 경우 0에서 255까지의 값을 표현 가능하다.&lt;br /&gt;
&lt;br /&gt;
부호 있는 정수일 경우 -128에서 127까지의 값을 표현 가능하다.&lt;br /&gt;
&lt;br /&gt;
문자를 표현할 경우 공백 포함 256까지 종류의 문자를 표현 가능하다.&lt;br /&gt;
&lt;br /&gt;
이미지의 경우에는 1 바이트로&lt;br /&gt;
&lt;br /&gt;
[[1BPP]]는 8개의 픽셀을 표현 가능하다.&lt;br /&gt;
&lt;br /&gt;
[[2BPP]]는 4개의 픽셀을 표현 가능하다.&lt;br /&gt;
&lt;br /&gt;
[[4BPP]]는 2개의 픽셀을 표현 가능하다.&lt;br /&gt;
&lt;br /&gt;
[[8BPP]]는 1개의 픽셀을 표현 가능하다.&lt;br /&gt;
&lt;br /&gt;
[[분류:데이터]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=2BPP&amp;diff=141</id>
		<title>2BPP</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=2BPP&amp;diff=141"/>
		<updated>2025-10-01T03:28:03Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
[[분류:토막글]]&lt;br /&gt;
&#039;&#039;&#039;2BPP&#039;&#039;&#039;(2 Bit Per Pixel)는 [[픽셀]] 하나를 2[[비트]]로 표현하는 그래픽 형식이다.&lt;br /&gt;
&lt;br /&gt;
== 패미컴과 게임보이의 차이 ==&lt;br /&gt;
[[파일:FC GB 2BPP.png|thumb|right]]&lt;br /&gt;
&lt;br /&gt;
[[패미컴]]과 [[게임보이]]는 모두 2BPP 형식 8x8픽셀 [[타일]]을 사용하지만 [[바이트]]를 배열하는 방식에 차이가 있다.&lt;br /&gt;
&lt;br /&gt;
패미컴은 8x8 타일을 1BPP 타일로 모두 채우고 다시 1BPP 타일을 늘어놓아 한 픽셀의 상·하위 비트가 8바이트 단위로 나뉘어 저장되지만, 게임보이의 경우 세로 1픽셀씩 나누어 배열해 상·하위 비트가 1바이트 단위로 나뉜다.&lt;br /&gt;
&lt;br /&gt;
그렇기 때문에 VRAM에 [[1BPP]] [[폰트]]를 로드하고자 할 때, 패미컴은 8바이트씩 쓰고 8바이트씩 비워줘야 하는 반면 게임보이는 1바이트씩 쓰고 1바이트씩 비워줘야 올바르게 표시된다.&lt;br /&gt;
&lt;br /&gt;
[[분류:그래픽]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=Mgbdis&amp;diff=140</id>
		<title>Mgbdis</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=Mgbdis&amp;diff=140"/>
		<updated>2025-10-01T03:27:07Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
[[분류:토막글]]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/mattcurrie/mgbdis GitHub]&lt;br /&gt;
&lt;br /&gt;
[[파이썬]]으로 만들어진 [[게임보이]] [[디스어셈블러]].&lt;br /&gt;
&lt;br /&gt;
== 기능 ==&lt;br /&gt;
심볼 파일(&amp;lt;code&amp;gt;.sym&amp;lt;/code&amp;gt;)을 읽어와서 각 영역의 형식(코드, 데이터, 그래픽)에 따라 알맞은 출력을 하도록 지시할 수 있다. 그래픽 데이터는 자동으로 [[PNG]] 형식으로 변환된다.&lt;br /&gt;
&lt;br /&gt;
[[CDL]] 파일을 직접 받지는 않는다. [[에뮬레이터]]에서 나온 CDL을 활용하려면 sym 파일로 변환해야 한다. [https://github.com/Lee0701/cdl2sym cdl2sym]&lt;br /&gt;
&lt;br /&gt;
분석된 소스 파일과 함께 [[롬]]을 다시 빌드할 수 있도록 [[Makefile]]을 함께 출력한다.&lt;br /&gt;
&lt;br /&gt;
[[분류:디스어셈블러]]&lt;br /&gt;
[[분류:게임보이]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=DiztinGUIsh&amp;diff=139</id>
		<title>DiztinGUIsh</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=DiztinGUIsh&amp;diff=139"/>
		<updated>2025-10-01T03:26:18Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
[[분류:토막글]]&lt;br /&gt;
[https://github.com/IsoFrieze/DiztinGUIsh GitHub]&lt;br /&gt;
&lt;br /&gt;
실시간 코드 분석을 지원하는 [[슈퍼패미컴]] [[디스어셈블러]].&lt;br /&gt;
&lt;br /&gt;
== 기능 ==&lt;br /&gt;
[[BSNES]]와 연동되어 게임을 구동하는 동시에 [[CDL]] 분석 및 [[디스어셈블리]] 코드 생성을 수행한다.&lt;br /&gt;
&lt;br /&gt;
생성된 어셈블리 코드는 일괄로 내보낼 수 있으며, [[asar]] 어셈블러로 다시 빌드할 수 있다.&lt;br /&gt;
&lt;br /&gt;
[[분류:디스어셈블러]]&lt;br /&gt;
[[분류:슈퍼패미컴]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8F%B0%ED%8A%B8_%ED%99%95%EC%9E%A5&amp;diff=138</id>
		<title>폰트 확장</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8F%B0%ED%8A%B8_%ED%99%95%EC%9E%A5&amp;diff=138"/>
		<updated>2025-10-01T03:25:51Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
주로 1바이트 [[문자 코드]]를 사용하는 고전게임에서 2바이트 이상의 문자 코드를 사용할 수 있도록 프로그램을 수정하는 작업.&lt;br /&gt;
&lt;br /&gt;
== 필요성 ==&lt;br /&gt;
== 작업 과정 - NES/FC ==&lt;br /&gt;
# 대사 출력 루틴 분석&lt;br /&gt;
# [[매퍼 컨버전]]&lt;br /&gt;
# [[롬 확장]]&lt;br /&gt;
# 대사 출력 루틴 개조 혹은 추가&lt;br /&gt;
# 폰트 삽입(타일 데이터)&lt;br /&gt;
# ([[대사 확장]])&lt;br /&gt;
&lt;br /&gt;
== 관련 문서 ==&lt;br /&gt;
* [[대사 확장]]&lt;br /&gt;
&lt;br /&gt;
[[분류:한글화 작업]][[분류:토막글]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=Asar&amp;diff=137</id>
		<title>Asar</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=Asar&amp;diff=137"/>
		<updated>2025-10-01T03:23:13Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
&lt;br /&gt;
[https://github.com/RPGHacker/asar GitHub]&lt;br /&gt;
&lt;br /&gt;
[[슈퍼패미컴]]용 [[어셈블러]]. 기존 롬 이미지에 [[패치]]를 적용하거나 [[소스 코드]]로부터 새로운 롬을 만들어낼 수 있다.&lt;br /&gt;
&lt;br /&gt;
[[분류:어셈블러]]&lt;br /&gt;
[[분류:슈퍼패미컴]][[분류:토막글]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8C%A8%EB%AF%B8%EC%BB%B4&amp;diff=136</id>
		<title>패미컴</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8C%A8%EB%AF%B8%EC%BB%B4&amp;diff=136"/>
		<updated>2025-10-01T03:22:41Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
=== 콘솔 하드웨어 ===&lt;br /&gt;
* [[CPU]]/[[APU]] : [[2A03]] (6502 프로세서)&lt;br /&gt;
* [[PPU]]&lt;br /&gt;
* 입력 장치&lt;br /&gt;
* 핀아웃(Pinout)&lt;br /&gt;
* 사이클 레퍼런스&lt;br /&gt;
* Memory Map&lt;br /&gt;
&lt;br /&gt;
=== 카트릿지 하드웨어 ===&lt;br /&gt;
* Mapper&lt;br /&gt;
* PRG-ROM&lt;br /&gt;
* CHR-ROM&lt;br /&gt;
* IRQ&lt;br /&gt;
* Nametable mirroring&lt;br /&gt;
* Audio&lt;br /&gt;
* PRG(CHR) RAM(ROM) window&lt;br /&gt;
* PRG-RAM&lt;br /&gt;
* CHR-RAM&lt;br /&gt;
&lt;br /&gt;
=== FC/NES 기본 처리 방법 ===&lt;br /&gt;
# NMI&lt;br /&gt;
# 메모리&lt;br /&gt;
# DMA&lt;br /&gt;
# OAM(Sprite)&lt;br /&gt;
# 스캔라인&lt;br /&gt;
[[분류:토막글]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%EB%AC%B8%EC%9E%90_%EC%BD%94%EB%93%9C&amp;diff=135</id>
		<title>문자 코드</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%EB%AC%B8%EC%9E%90_%EC%BD%94%EB%93%9C&amp;diff=135"/>
		<updated>2025-10-01T03:22:11Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
각 문자를 나타내는 고유 코드(번호).&lt;br /&gt;
&lt;br /&gt;
== 원리 ==&lt;br /&gt;
== 관련 문서 ==&lt;br /&gt;
* [[고유번호표]]&lt;br /&gt;
&lt;br /&gt;
[[분류:데이터]][[분류:토막글]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%EB%AC%B8%EC%9E%90_%EC%BD%94%EB%93%9C&amp;diff=132</id>
		<title>문자 코드</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%EB%AC%B8%EC%9E%90_%EC%BD%94%EB%93%9C&amp;diff=132"/>
		<updated>2025-10-01T03:21:44Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{토막글}}&lt;br /&gt;
각 문자를 나타내는 고유 코드(번호).&lt;br /&gt;
&lt;br /&gt;
== 원리 ==&lt;br /&gt;
== 관련 문서 ==&lt;br /&gt;
* [[고유번호표]]&lt;br /&gt;
&lt;br /&gt;
[[분류:데이터]]&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=128</id>
		<title>틀:알림 상자</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=128"/>
		<updated>2025-10-01T03:20:11Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{| style=&amp;quot;clear: both; width: {{{폭|100%}}}; margin: 0 auto; border-collapse: collapse; background: {{{배경색|#fbfbfb}}}; border: {{{경계선|1px solid #aaa}}};  {{#if:{{{오른쪽색|}}}|border-right: 10px solid {{{오른쪽색|#1e90ff}}}; }}border-top: 5px solid {{{색|#1e90ff}}};&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
{{#ifeq:{{{왼쪽 그림}}}|없음| |{{!}}style=&amp;quot;width: 52px; padding: 2px 0px 2px 0.5em;&amp;quot;{{!}}{{{왼쪽 그림 예외|[[그림:{{{왼쪽 그림|information icon4.svg}}}|링크=|{{{왼쪽 그림 크기|45px}}}|{{{왼쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|style=&amp;quot;padding: {{{간격|8px}}}; font-size:130%;&amp;quot;|{{#if:{{{제목|}}}|&amp;lt;span style=&amp;quot;color:{{{제목색|#000000}}};&amp;quot;&amp;gt;&#039;&#039;&#039;{{{제목}}}&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;}}&amp;lt;span style=&amp;quot;color:{{{본문색|#000000}}};font-size:70%;&amp;quot;&amp;gt;{{{본문|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
{{#if:{{{오른쪽 그림|}}}|{{!}}style=&amp;quot;width: 52px; padding: 2px 4px 2px 0px;&amp;quot;{{!}}{{{오른쪽 그림 예외|[[그림:{{{오른쪽 그림| - }}}|링크=|{{{오른쪽 그림 크기|45px}}}|{{{오른쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|}{{#if: {{{분류|}}}|[[분류:{{{분류}}}]]}}{{#ifeq: {{NAMESPACE}}|틀|[[분류:알림 상자 틀]]}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 설명 || 사용&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* 폭 = 100% (기본 설정)&lt;br /&gt;
* 색 = #1e90ff (기본 설정)&lt;br /&gt;
* 배경색 = #fbfbfb (기본 설정)&lt;br /&gt;
* 경계선 = 1px solid #aaaaaa (기본 설정)&lt;br /&gt;
* 왼쪽 그림 = Info non-talk.png (기본 설정, ‘없음’으로 설정할 수도 있습니다.)&lt;br /&gt;
* 왼쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 왼쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 왼쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 오른쪽 그림 = 없어도 됨&lt;br /&gt;
* 오른쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 오른쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 오른쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 제목색 = #000000 (기본 설정)&lt;br /&gt;
* 본문색 = #000000 (기본 설정)&lt;br /&gt;
* 제목 = &lt;br /&gt;
* 본문 = &lt;br /&gt;
||&amp;lt;pre&amp;gt;{{알림 상자&lt;br /&gt;
| 폭 = &lt;br /&gt;
| 색 = &lt;br /&gt;
| 배경색 = &lt;br /&gt;
| 경계선 = &lt;br /&gt;
| 왼쪽 그림 =&lt;br /&gt;
| 왼쪽 그림 크기 =&lt;br /&gt;
| 왼쪽 그림 설명 =&lt;br /&gt;
| 왼쪽 그림 예외 =&lt;br /&gt;
| 오른쪽 그림 = &lt;br /&gt;
| 오른쪽 그림 크기 =&lt;br /&gt;
| 오른쪽 그림 설명 =&lt;br /&gt;
| 오른쪽 그림 예외 =&lt;br /&gt;
| 간격 = &lt;br /&gt;
| 제목 = &lt;br /&gt;
| 본문 = &lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=127</id>
		<title>틀:알림 상자</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=127"/>
		<updated>2025-10-01T03:19:09Z</updated>

		<summary type="html">&lt;p&gt;Root: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{| style=&amp;quot;clear: both; width: {{{폭|100%}}}; margin: 0 auto; border-collapse: collapse; background: {{{배경색|#fbfbfb}}}; border: {{{경계선|1px solid #aaa}}};  {{#if:{{{오른쪽색|}}}|border-right: 10px solid {{{오른쪽색|#1e90ff}}}; }}border-top: 5px solid {{{색|#1e90ff}}};&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
{{#ifeq:{{{왼쪽 그림}}}|없음| |{{!}}style=&amp;quot;width: 52px; padding: 2px 0px 2px 0.5em;&amp;quot;{{!}}{{{왼쪽 그림 예외|[[그림:{{{왼쪽 그림|information icon4.svg}}}|링크=|{{{왼쪽 그림 크기|45px}}}|{{{왼쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|style=&amp;quot;padding: {{{간격|8px}}}; font-size:130%;&amp;quot;|{{#if:{{{제목|}}}|&amp;lt;span style=&amp;quot;color:{{{제목색|#000000}}};&amp;quot;&amp;gt;&#039;&#039;&#039;{{{제목}}}&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;}}&amp;lt;span style=&amp;quot;color:{{{본문색|#000000}}};font-size:100%;&amp;quot;&amp;quot;&amp;gt;{{{본문|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
{{#if:{{{오른쪽 그림|}}}|{{!}}style=&amp;quot;width: 52px; padding: 2px 4px 2px 0px;&amp;quot;{{!}}{{{오른쪽 그림 예외|[[그림:{{{오른쪽 그림| - }}}|링크=|{{{오른쪽 그림 크기|45px}}}|{{{오른쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|}{{#if: {{{분류|}}}|[[분류:{{{분류}}}]]}}{{#ifeq: {{NAMESPACE}}|틀|[[분류:알림 상자 틀]]}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 설명 || 사용&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* 폭 = 100% (기본 설정)&lt;br /&gt;
* 색 = #1e90ff (기본 설정)&lt;br /&gt;
* 배경색 = #fbfbfb (기본 설정)&lt;br /&gt;
* 경계선 = 1px solid #aaaaaa (기본 설정)&lt;br /&gt;
* 왼쪽 그림 = Info non-talk.png (기본 설정, ‘없음’으로 설정할 수도 있습니다.)&lt;br /&gt;
* 왼쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 왼쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 왼쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 오른쪽 그림 = 없어도 됨&lt;br /&gt;
* 오른쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 오른쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 오른쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 제목색 = #000000 (기본 설정)&lt;br /&gt;
* 본문색 = #000000 (기본 설정)&lt;br /&gt;
* 제목 = &lt;br /&gt;
* 본문 = &lt;br /&gt;
||&amp;lt;pre&amp;gt;{{알림 상자&lt;br /&gt;
| 폭 = &lt;br /&gt;
| 색 = &lt;br /&gt;
| 배경색 = &lt;br /&gt;
| 경계선 = &lt;br /&gt;
| 왼쪽 그림 =&lt;br /&gt;
| 왼쪽 그림 크기 =&lt;br /&gt;
| 왼쪽 그림 설명 =&lt;br /&gt;
| 왼쪽 그림 예외 =&lt;br /&gt;
| 오른쪽 그림 = &lt;br /&gt;
| 오른쪽 그림 크기 =&lt;br /&gt;
| 오른쪽 그림 설명 =&lt;br /&gt;
| 오른쪽 그림 예외 =&lt;br /&gt;
| 간격 = &lt;br /&gt;
| 제목 = &lt;br /&gt;
| 본문 = &lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%ED%86%A0%EB%A7%89%EA%B8%80&amp;diff=126</id>
		<title>틀:토막글</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%ED%86%A0%EB%A7%89%EA%B8%80&amp;diff=126"/>
		<updated>2025-10-01T03:18:32Z</updated>

		<summary type="html">&lt;p&gt;Root: 새 문서: {{알림 상자 | 제목 = 이 문서는 토막글입니다. | 본문 = 이 문서는 토막글로 분류되는 450자 이하의 문서입니다. 기여자가 되어 풍성하고 좋은 문서를 만듭시다.}}&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{알림 상자 | 제목 = 이 문서는 토막글입니다. | 본문 = 이 문서는 토막글로 분류되는 450자 이하의 문서입니다. 기여자가 되어 풍성하고 좋은 문서를 만듭시다.}}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
	<entry>
		<id>https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=125</id>
		<title>틀:알림 상자</title>
		<link rel="alternate" type="text/html" href="https://hansicgu.wiki.gd/index.php?title=%ED%8B%80:%EC%95%8C%EB%A6%BC_%EC%83%81%EC%9E%90&amp;diff=125"/>
		<updated>2025-10-01T03:11:42Z</updated>

		<summary type="html">&lt;p&gt;Root: 새 문서: &amp;lt;onlyinclude&amp;gt;{| style=&amp;quot;clear: both; width: {{{폭|100%}}}; margin: 0 auto; border-collapse: collapse; background: {{{배경색|#fbfbfb}}}; border: {{{경계선|1px solid #aaa}}};  {{#if:{{{오른쪽색|}}}|border-right: 10px solid {{{오른쪽색|#1e90ff}}}; }}border-top: 5px solid {{{색|#1e90ff}}};&amp;quot; |- {{#ifeq:{{{왼쪽 그림}}}|없음| |{{!}}style=&amp;quot;width: 52px; padding: 2px 0px 2px 0.5em;&amp;quot;{{!}}{{{왼쪽 그림 예외|그림:{{{왼쪽 그림|information icon4.svg}}}|링크=...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;{| style=&amp;quot;clear: both; width: {{{폭|100%}}}; margin: 0 auto; border-collapse: collapse; background: {{{배경색|#fbfbfb}}}; border: {{{경계선|1px solid #aaa}}};  {{#if:{{{오른쪽색|}}}|border-right: 10px solid {{{오른쪽색|#1e90ff}}}; }}border-top: 5px solid {{{색|#1e90ff}}};&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
{{#ifeq:{{{왼쪽 그림}}}|없음| |{{!}}style=&amp;quot;width: 52px; padding: 2px 0px 2px 0.5em;&amp;quot;{{!}}{{{왼쪽 그림 예외|[[그림:{{{왼쪽 그림|information icon4.svg}}}|링크=|{{{왼쪽 그림 크기|45px}}}|{{{왼쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|style=&amp;quot;padding: {{{간격|8px}}}; font-size:130%;&amp;quot;|{{#if:{{{제목|}}}|&amp;lt;span style=&amp;quot;color:{{{제목색|#000000}}};&amp;quot;&amp;gt;&#039;&#039;&#039;{{{제목}}}&#039;&#039;&#039;&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;}}&amp;lt;span style=&amp;quot;color:{{{본문색|#000000}}}&amp;quot;&amp;gt;{{{본문|}}}&amp;lt;/span&amp;gt;&lt;br /&gt;
{{#if:{{{오른쪽 그림|}}}|{{!}}style=&amp;quot;width: 52px; padding: 2px 4px 2px 0px;&amp;quot;{{!}}{{{오른쪽 그림 예외|[[그림:{{{오른쪽 그림| - }}}|링크=|{{{오른쪽 그림 크기|45px}}}|{{{오른쪽 그림 설명|}}}]]}}}}}&lt;br /&gt;
|}{{#if: {{{분류|}}}|[[분류:{{{분류}}}]]}}{{#ifeq: {{NAMESPACE}}|틀|[[분류:알림 상자 틀]]}}&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 설명 || 사용&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
* 폭 = 100% (기본 설정)&lt;br /&gt;
* 색 = #1e90ff (기본 설정)&lt;br /&gt;
* 배경색 = #fbfbfb (기본 설정)&lt;br /&gt;
* 경계선 = 1px solid #aaaaaa (기본 설정)&lt;br /&gt;
* 왼쪽 그림 = Info non-talk.png (기본 설정, ‘없음’으로 설정할 수도 있습니다.)&lt;br /&gt;
* 왼쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 왼쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 왼쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 오른쪽 그림 = 없어도 됨&lt;br /&gt;
* 오른쪽 그림 크기 = 45px (기본 설정)&lt;br /&gt;
* 오른쪽 그림 설명 = 비우면 안 뜸&lt;br /&gt;
* 오른쪽 그림 예외 = 특수한 경우에 쓰임.&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 간격 = 8px (기본 설정)&lt;br /&gt;
* 제목색 = #000000 (기본 설정)&lt;br /&gt;
* 본문색 = #000000 (기본 설정)&lt;br /&gt;
* 제목 = &lt;br /&gt;
* 본문 = &lt;br /&gt;
||&amp;lt;pre&amp;gt;{{알림 상자&lt;br /&gt;
| 폭 = &lt;br /&gt;
| 색 = &lt;br /&gt;
| 배경색 = &lt;br /&gt;
| 경계선 = &lt;br /&gt;
| 왼쪽 그림 =&lt;br /&gt;
| 왼쪽 그림 크기 =&lt;br /&gt;
| 왼쪽 그림 설명 =&lt;br /&gt;
| 왼쪽 그림 예외 =&lt;br /&gt;
| 오른쪽 그림 = &lt;br /&gt;
| 오른쪽 그림 크기 =&lt;br /&gt;
| 오른쪽 그림 설명 =&lt;br /&gt;
| 오른쪽 그림 예외 =&lt;br /&gt;
| 간격 = &lt;br /&gt;
| 제목 = &lt;br /&gt;
| 본문 = &lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Root</name></author>
	</entry>
</feed>