์๋ ํ์ธ์?ย
๋๋ฒ์งธ ๊ธ๋ก ์ธ์ฌ๋๋ฆฝ๋๋ค. ์คํ์์์ ์์ฃผ ๋ค๋ค์ง๋ ์ฃผ์ ์๋ ๋ง์ด ๋๋จ์ด์ ธ ์์ง๋ง, ๊ทธ๋๋ ๊พธ์คํ ํํ ๋ฆฌ์ผ์ ์ด์ด๋๊ฐ๋ ค ํฉ๋๋ค. ๋์ค์๋ผ๋ ํ์ํ ๋ถ๋ค์๊ฒ ์ข์ ์๋ฃ๋ก ์ฌ์ฉ๋์ด์ก์ผ๋ฉด ์ข๊ฒ ์ด์ ^^&
ํจ๋ฏธ์ปด (or NES) ๊ฒ์ ํ๊ธํ ํํ ๋ฆฌ์ผ #01
์ค๋์ ํํ ๋ฆฌ์ผ์์๋ ๋กฌ์ ํ์ฅ๋ฐฉ๋ฒ์ ๋ณธ๊ฒฉ์ ์ผ๋ก ์์๋ณด๊ฒ ์ต๋๋ค.
ํจ๋ฏธ์ปด๋กฌ์ ํ์ฅ์ ์ํด์ ๋จผ์ iNES ํค๋๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ ํ๋์ด์ผ ํฉ๋๋ค. ์ด ์ดํ์ ๊ธ์์ 16์ง์์ ๊ฐ์๋ (h)๋ฅผ 10์ง์์ ๊ฐ์๋ (d) ๋ฅผ ๋ถ์ฌ ๊ตฌ๋ถํ๊ฒ ์ต๋๋ค.ย
iNES ํค๋๋ 10(h) Byte์ ๋ฐ์ดํ Set ์ผ๋ก ๋กฌ์ ๊ดํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ต๋๋ค. ํจ๋ฏธ์ปด ์นดํธ๋ฆฌ์ง (=์ฐ๋ฆฌ๊ฐ ํํ๋ถ์ด ์ฌ์ฉํ๋ ํฉ)์๋ PRG ROM and/or CHR ROM + Mapper ๊ฐ ์์ ๋ฟ iNES ํค๋๋ ํฌํจ๋์ด์์ง ์์ต๋๋ค. ์ฆ, ์ด 10(h) Byte์ iNES ํค๋๋ *.nes ํ์ผ์๋ง ์กด์ฌํ๋ ํ ์ดํ๋ก ํ์ฌ๋ ๊ท๊ฒฉํ ๋์ด nes ํ์ผ์ ๊ฐ์ฅ ์๋ถ๋ถ์ ํฌํ ๋์ด์์ต๋๋ค.ย
*.nes File = 10(h) Byte iNES ํค๋ + PRG ROM + (CHR ROM, ๋งตํผ์ ๋ฐ๋ผ ์๋ต๊ฐ๋ฅ)
์์ ๊ฐ์ด nes ํ์ฅ์๋ฅผ ๊ฐ์ง๋ ๋กฌํ์ผ๋ค์ด ๊ฐ์ ๊ท๊ฒฉ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ NES ์๋ฎฌ๋ ์ดํฐ๋ค์ iNES ํค๋์ ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ๋ค์ํ ๋งตํผ๋ฅผ ์ฌ์ฉํ๋ ๋กฌ๋ค์ ์ค๊ธฐ์ ๋น์ทํ๊ฒ ๊ตฌ๋ํ ์ ์๋ ๊ฒ์ด์ฃ . ์๋ฎฌ๋ ์ดํฐ ๋ง๋ค ์ง์ํ๋ ๋งตํผ๊ฐ ๋ค๋ฅด๋ฏ๋ก ๋ช๋ช ๊ฒ์๋ค์ ํน์ ์๋ฎฌ๋ ์ดํฐ์์๋ง ์คํ๋๊ธฐ๋ ํฉ๋๋ค๋ง, ์์ฆ์ ์๋ฎฌ๋ ์ดํฐ๋ง๋ค ๋น์ทํ ๊ฒ์ ๊ตฌ๋๋ฅ ์ ๋ณด์ ๋๋ค...์ธ์ ์ ํจ๋ฏธ์ปด์ ๋๊น.. ใ ใ ใ
์์ ๋ก ์ผ์ "์ค์ํธ ํ"์ ์ฒซ 10(h) Byte (=iNES ํค๋) ๋ฅผ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
00000(h): ย 4E ย 45 ย 53 ย 1A ย *10 ย *00 ย 12 ย 00 ย 00 ย 00 ย 00 ย 00 ย 00 ย 00 ย 00
์ผ์ชฝ๋ถํฐ ์ฐจ๋ก๋ก 0๋ฒ Byte ~ 15๋ฒ Byte๋ผ ํ๋ฉฐ ๋ํ ์ผํ iNES ํค๋ ์ ๋ณด๋ ์ด๊ณณ ๋งํฌ์์ ํ์ธํ์ค ์ ์์ต๋๋ค. ๋ค๋ง, ํฐํธํ์ฅ์์ ํ์ํ ๋ถ๋ถ์ ๋ณดํต์ 4๋ฒ Byte์ 5๋ฒ Byte๋ก ๊ฐ๊ฐ์ ๋ค์์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค,
์์ ํค๋์ ๋ณด๋ฅผ ๋ถ์ํด๋ณด๋ฉด, ์ค์ํธํ์ 10(h)๊ฐ์ 16 KB PRG ROM, ์ฆ 16(d) x 16 KB = 256 KB ์ PRG ROM์ ๊ฐ์ง๋ฉฐ 0๊ฐ์ 8KB CHR ROM(=CHR ROM ์ด ์๋ค๋ ๊ฒ์ ์ด ๊ฒ์์ด CHR RAM์ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์๋ฏธ)์ ๊ฐ์ง๋๋ค. "์ค์ํธํ.NES" ๋กฌํ์ผ์ ์ฉ๋์ด 256KB๊ฐ๋ ๋์ค๋ ์ด์ ๊ฐ ์ด๊ฒ ๋๋ฌธ์ด์ฃ .ย
iNES ํค๋์ 5๋ฒ Byte์์ ์ ์ ์๋ฏ์ด, ์ค์ํธํ์ ๊ฒฝ์ฐ CHR ROM์ ์ฌ์ฉํ์ง ์๊ณ CHR RAM์ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ์ค์ํธํ ๋กฌํ์ผ์ 512KB๋ก ํ์ฅ ํ๊ณ ์ ํ๋ ค๋ฉด 10(h)๊ฐ์ 16 KB PRG ROM์ด ๋ ํ์ํ๊ฒ ๋๋ ๊ฒ์ด์ฃ .
์ฆ, ๋ค์๊ณผ ๊ฐ์ด iNES ํค๋์ 4๋ฒ Byte๋ฅผ 20(h)์ผ๋ก ๊ต์ฒดํด ์ฃผ๋ ๊ฒ์ด ๋กฌ ํ์ฅ์ ์ฒซ ๊ณผ์ ์ด ๋ฉ๋๋ค. ์ฌ๊ธฐ๊น์ง ์๋ฃํ๋ฉด ์๋ฎฌ๋ ์ดํฐ๋ "์... ์ด ๋กฌ์ 32(d)๊ฐ์ 16KB PRG ROM ์ ๊ฐ์ง๊ณ ์๊ตฌ๋..." ๊ณ ์๊ฐํ๊ณ ์ฒ๋ฆฌํ๊ฒ ๋๋๊ฒ์ด์ฃ .
ย 00000(h): ย 4E ย 45 ย 53 ย 1A ย *20 ย 00 ย 12 ย 00 ย 00 ย 00 ย 00 ย 00 ย 00 ย 00 ย 00
์์ ๊ณผ์ ์ ์๋ฃํ๊ณ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ํตํด์ ๋กฌ์ ์คํ์ํค๋ฉด ๊ฐ์ข ์๋ฌ๋ฅผ ๋ฟ์ผ๋ฉด์ ๋ฉ์ถฐ๋ฒ๋ฆฝ๋๋ค. ์๋ฎฌ๋ ์ดํฐ๋ 32(d)๊ฐ์ 16KB PRG ROM์ ๊ฐ์ง๊ณ ์์๊ฑฐ๋ผ๊ณ ์๊ฐํ์ง๋ง ์ค์ ๋ก ๋กฌ์ 16(d)๊ฐ์ PRG ROM์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ HEX์๋ํฐ๋ฅผ ํตํด์ ๋๋ฏธ๋ฐ์ดํ (=FF)๋ฅผ 40000(h)๊ฐ ๋งํผ ์ถ๊ฐ์์ผ ์ฃผ์ด์ผํฉ๋๋ค. ์ฆ 256KB ๋งํผ์ FF ๋๋ฏธ๋ฐ์ดํ๋ฅผ ์ถ๊ฐ์์ผ ์ฃผ๋ ๊ฒ์ด์ฃ . ์ด ๊ณผ์ ์ ์๋์ผ๋ก ์ํํ๋ ํ๋ก๊ทธ๋จ์ ์ด๊ธ์ ๋ง์ง๋ง ๋ถ๋ถ์ ๋ค๋ค์ง ์์ ์ ๋๋ค.
40000(h) = ย 262144(d) bytes = 256 KB (1024 bytes = 1KB)
2.3.1 NES CPU ๋ฉ๋ชจ๋ฆฌ ๋งต
์ด ๋ถ๋ถ์ ์ดํดํ๋ ค๋ฉด NES ํ๋์จ์ด์ CPU ๋ฉ๋ชจ๋ฆฌ ๋งต์ ์ ๋ฐ์ ์ผ๋ก ์ดํดํ๊ณ ์์ด์ผ ํฉ๋๋ค.ย
Fig 1 - NES CPU ๋ฉ๋ชจ๋ฆฌ ๋งต
์์ ๊ทธ๋ฆผ์์ ์ ์ ์๋ฏ์ด NES CPU๋ $0000~$7FFF ๊น์ง์ RAM/Register ์์ญ๊ณผ $8000~$FFFF๊น์ง์ ROM ์์ญ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค. ์ฌ๊ธฐ์ ROM ์์ญ์ PRG ROM ํน์ CHR ROM์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ ๊ฐ๊ฐ 16KB (์ด 32KB)์ ํ ์ดํ๊ฐ ๋ ๋ถ๋ถ ($8000~$BFFF, $C000~$FFFF) ์ผ๋ก ๋๋์ด์ CPU์ ๋ก๋๋ฉ๋๋ค. ย
์ค์ํธ ํ nes ๋กฌ์ 256KB (= $3FFFF)์ ๋ฐ์ดํ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ NES CPU๋ ๊ทธ ์ค 32KB์ ๋ฐ์ดํ๋ง ํ๋ฒ์ ๋ก๋ํ๊ณ ์์ธ์ค ํ ์ ์๋๊ฒ์ด์ฃ . ์ฌ๊ธฐ์ 16KB ๋ฐ์ดํ ๋ญ์น๋ฅผ ๋ฑ ํฌ(Bank)๋ผ๊ณ ํฉ๋๋ค.ย
๋งตํผ์ ์ญํ ์ ์ ์ฌ์ ์์ ๋กฌ ๋ด๋ถ์ ๋ฐ์ดํ๋ฅผ CPU๋ฉ๋ชจ๋ฆฌ๋ก ๋ก๋ํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋ฐ์ดํ ์์ ์ฝ๋(=๋ฑ ํฌ๊ตํ ๋ฃจํด)๋ ์ฃผ๋ก $C000~$FFFF (Upper Bank)๋ถ๋ถ์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์ด ๋ถ๋ถ์ ๊ฒ์์ด ๋ก๋๋ ์ดํ ๋ฑ ํฌ๊ตํ ์์ด ๊ณ์ CPU์ ์์ฃผํ๊ฒ ๋ฉ๋๋ค.
์ฆ Upper Bank์ ๊ฒ์ ๊ตฌ๋์ ํ์ํ ํ์ ์ฝ๋(๋ฉ์ธ ๋ฃจํด, NMI, etc.) ๋ค์ ๋ฃ์ด๋๊ณ , Lower Bank ๋ง ํ์์ ๋ฐ๋ผ ๊ตํํ๋ฉด์ ๊ฒ์์ด ์งํ๋๋ ๊ฒ์ด์ฃ .
2.3.2 SUROM (512KB) ๊ตฌ๋ ๋ฐฉ์
์์ ์ฑํฐ์์ NES ํ๋์จ์ด๋ 256KB์ ๋กฌ์ ๊ตฌ๋ ํ ๋ ๊ทธ ์ค 16KB๋ Upper Bank ์ ๊ณ ์ ํ๊ณ ๋๋จธ์ง 16KB๋ฅผ ์ํฉ์ ๋ฐ๋ผ ๋ฒ๊ฐ์ ๊ฐ๋ฉด์ Lower Bank ์ ๋ก๋ํจ์ผ๋ก์จ ๊ฒ์์ ๊ตฌ๋ํ๋ค๊ณ ๋ฐฐ์ ์ต๋๋ค. ๊ทธ๋ผ ์ฐ๋ฆฌ๊ฐ ๋กฌ์ 512KB๋ก ํ์ฅ์ ํ๋ฉด ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ตฌ๋๋ ๊น์?
์.๋.๋.๋ค ย - ย ์ด ๊ณ ์ ๊ฒ์๊ธฐ์ ์ฑ๋ฅ์ ๊ณผ๋ํ๊ฐ ํ๋ฉด ์๋์!
์ด ๊ฒฝ์ฐ์ NES ํ๋์จ์ด๋ 512KB์ ๋กฌ์ ๋๊ฐ์ 256KB ๋กฌ์ด ํฉ์ณ์ง ์ํ๋ก ์ธ์ํฉ๋๋ค. ์ฆ ๋๊ฐ์ ๊ฐ๋ณ์ ์ธ 256KB์ ๊ฒ์๋ค์ด ํ ์นดํธ๋ฆฌ์ง์ ์๋ ๊ฒ์ผ๋ก ์ธ์ํ์ง์. ๋ฐ๋ผ์ 1๋ฒ 256KB๊ฐ ๊ตฌ๋๋๊ณ ์์ ๋ 2๋ฒ 256KB์ ์๋ ๋ฐ์ดํ๋ ์ ๊ทผ์ด ์๋ฉ๋๋ค (๋ฐ์ดํ๋ฑ ํฌ ๊ตํ์ด ์๋ฉ๋๋ค). ย ๋จผ์ 1๋ฒ 256KB๋ฅผ 2๋ฒ 256KB๋ก ๋ฐ๊พผ ํ์์ผ ๋น๋ก์ 2๋ฒ 256KB์ ์๋ ๋ฐ์ดํ์ ์ ๊ทผ ํ ์ ์๋ ๊ฒ์ด์ฃ .
์์์ ๊ฐ์ข ํ์ ํ๋ก๊ทธ๋จ์ฝ๋๊ฐ ๋ค์ด์๋ 16KB์ ๋ฐ์ดํ๋ Upper Bank ์ ๊ณ ์ ๋๋ค๊ณ ํ์ผ๋๊น, 1๋ฒ 256KB ย (00~0F๋ฒ ๋ฑ ํฌ)๋ฅผ 2๋ฒ 256KB (10~1F๋ฒ ๋ฑ ํฌ)๋ก ๋ฐ๊พธ๋ ์ฝ๋๋ ๋ง์ง๋ง ๋ฑ ํฌ์ ์ ์ฅ๋์ด ์๊ฒ ์ฃ . ๊ฒ์์ ๋ถํ ํ๋ฉด 1๋ฒ 256KB๊ฐ ์ฒ์์ผ๋ก ๋ก๋๊ฐ ๋๋ฏ๋ก Upper Bank ์ ๊ณ ์ ๋๋ ๋ง์ง๋ง ๋ฑ ํฌ๋ 0F๋ฒ ๋ฑ ํฌ์ ๋๋ค (1๋ฒ 256KB๋ 00~0F๋ฒ 16KB ๋ฑ ํฌ๋ก ๊ตฌ์ฑ). ์ฆ 0F๋ฒ ๋ฑ ํฌ์๋ ๊ฐ์ข ํ๋ก๊ทธ๋จ ์ฝ๋๊ฐ ๋ด๊ฒจ์ ธ ์๋ ๊ฒ์ด์ฃ . ์ฌ๊ธฐ์ 2๋ฒ 256KB (2๋ฒ 256KB๋ 10~1F๋ฒ 16KB ๋ฑ ํฌ๋ก ๊ตฌ์ฑ)๋ก ๋ณ๊ฒฝํ๋ ํ๋ก๊ทธ๋จ์ ์ํํ๋ฉด ์ด์ ๋ง์ง๋ง ๋ฑ ํฌ๊ฐ 1F ๋๋๋ฐ ์ฌ๊ธฐ์๋ ์์ง ์๋ฌด ์ ๋ณด๊ฐ ์๋ด๊ฒจ์์ฃ .ย
๊ฒ์์ด ๋ฉ์ถฅ๋๋ค.ย
์ด๋ฐ ์ด์ ๋ก ๋ง์ง๋ง ๋ฑ ํฌ (0F) ๋ฅผ (1F)๋ก ๋ณต์ฌํ๋ ๊ณผ์ ์ด ํ์ํ ๊ฒ์ด์ฃ . ์ฆ, $3C000~$3FFFF๊น์ง์ ๋ฐ์ดํ๋ฅผ ๋๋ฏธ๋ฅผ ์ถ๊ฐํด ํ์ฅ๋ ๋กฌ์ $7C000~$7FFFF ๋ถ๋ถ์ผ๋ก ๋ณต์ฌํ์๋ฉด ๋ฉ๋๋ค.
2.4.1 ROM Expander Pro.txt ํ์ผ ์์ฑ ๋ฐฉ๋ฒ
๊ทธ๋ ์ต๋๋ค. ์ด ๊ณผ์ ์ ์๋์ผ๋ก ์ํํ ์ ์๋ ํ๋ก๊ทธ๋จ์ด ์์ง์. ์ด๊ณณ ์์ ๋ค์ด๋ก๋ ๋ฐ์ผ์ค ์ ์์ต๋๋ค. ์ด ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ๋ฐฉ๋ฒ์ ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ์์ธํ๊ฒ ๋์์์ต๋๋ค๋ง, ๊ฐ๋จํ ์ค๋ช ํ๋ฉด,
์์ ์ค๋ช ๋ ๋ชจ๋ ๊ณผ์ ์ ํ๋ฒ์ ์๋ฃํ๋ ํ ์คํธํ์ผ์ ์์ ๋ฅผ ์ฒจ๋ถํ๋ฉด์ ์ค๋ช ์ ๋ง๋ฌด๋ฆฌ ํ๊ฒ ์ต๋๋ค. ์๊ฐ๋ณด๋ค ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ์ค๋ช ์๋ฅผ ์์ธํ ์ฝ์ด๋ณด์ ์ผ ํ ๊ฒ ๊ฐ๋ค์.
Fig.2 - Rom expander ์์
์๋ฌดํผ ์ฌ๊ธฐ๊น์ง ํด์ ๋กฌ์ ํ์ฅ์ ๋ง์ณค๋ค์. ์ค๋์ ์ค๋ช ์ด ๋๋ฌด ๊ธธ์์ต๋๋ค. ์ผ๋จ ์ ๋ก๋ ํ๊ณ ๋ช๋ฒ ์์ ์ ๊ฑฐ์ณ์ผ ๋ค๋ฅธ๋ถ๋ค์ด ์ฝ๊ณ ์ ์ฉํ์๊ธฐ๊ฐ ์ฌ์์ง ๋ฏ ์ถ๋ค์.ย
์กฐ๋ง๊ฐ, 3ํธ์ผ๋ก ์ฐพ์๋ต๊ฒ ์ต๋๋ค.ย