Nintendo Entertainment System
NesDev Wiki1μ Nintendo Entertainment System Documentation2 λ¬Έμλ₯Ό κΈ°λ°μΌλ‘ NES μμ€ν μ μ 리 νκ³ μ ν©λλ€. ν΄λΉ λ¬Έμμμλ νλμ¨μ΄ λ° νλ‘μΈμμ λν λ΄μ©μ λ§μ΄ λ΄κ³ μμ΄μ μ΄ν΄λ₯Ό μν΄μλ κΈ°λ³Έμ μΈ λ§μ΄ν¬λ‘ νλ‘μΈμμ λν μ§μμ΄ μꡬλ©λλ€.
λ¬Έμ κ° λ°μν κ²½μ° ν΄λΉ ν¬μ€νΈλ μμ λλ λΉκ³΅κ° μ²λ¦¬ λ©λλ€.
CPU μ€λ²λ·°
λ©μΈ CPUλ Richo 2A033 8λΉνΈ νλ‘μΈμλ‘ BCD λͺ¨λλ₯Ό μ κ±°ν 6502 μ½μ΄μ 22κ°μ λ©λͺ¨λ¦¬ 맡 I/O λ μ§μ€ν°λ₯Ό κ°μ§κ³ μμΌλ©° PSG(Programmable Sound Generator) μ¬μ΄λ, DMA, κ²μ 컨νΈλ‘€λ¬ ν΄λ§ λ±μ κΈ°λ₯μ μΆκ° ν CPU μ λλ€.
λμμ NTSC λͺ¨λμμ 1.79MHz, PAL λͺ¨λμμλ 1.66 MHz μλλ‘ λμνλ©°, 리νμλμμ μ¬μ©ν©λλ€.
2kBμ μ¨λ³΄λ λ¨μ ν¬ν¨νκ³ μμΌλ©°, μΉ΄νΈλ¦¬μ§λ₯Ό ν΅ν΄μ μ΅λ 8k ~ 1MB κΉμ§ νμ₯λ λ¨μ μ¬μ©ν μ μμΌλ©° λλΆλΆ 128 ~ 384kBλ₯Ό μ¬μ©ν©λλ€.
κ·Έλν½ μ²λ¦¬λ₯Ό μν΄μ λ³λμ PPU(Picture Processing Unit)μ μ¬μ©νλ©° 2kBμ λΉλμ€λ¨, 256Bμ OAM(Object Attribute Memory)λ‘ μ΅λ 64κ° μ€νλΌμ΄νΈ μμΉ, μμ λ° νμΌ μΈλ±μ€λ₯Ό μ μ₯νκ³ , 28 λ°μ΄νΈμ μ¨-λ€μ΄ νλ νΈ λ¨μ λ°°κ²½κ³Ό μ€νλΌμ΄νΈ μμ μ νν μ μμ΅λλ€.
μ½μμ 2kB μ¨λ³΄λ λ¨μ νμΌ λ§΅ λ° μμ±μ μ¬μ©λ μ μμΌλ©°, 8kBμ νμΌ ν¨ν΄ 둬 λλ λ¨μ΄ μΉ΄νΈλ¦¬μ§μ ν¬ν¨ λ μ μμ΅λλ€.
μμ€ν
μ 48κ° μμκ³Ό 6κ°μ κ·Έλ μ΄ νλ νΈλ₯Ό μ¬μ©ν μ μμΌλ©°, μ€κ° νλ μμ μ κ°μ μ°μ§ μκ³ μ΅λ 25κ° μμ μ¬μ©ν μ μμ΅λλ€.
(λ°°κ²½μ, 3κ°μ§ νμΌ μμ 4μΈνΈ, 3κ°μ§ μ€νλΌμ΄νΈ μμ 4μΈνΈ)
NESμ νλ νΈλ RGBκ°μλ NTSCλ₯Ό κΈ°λ°μΌλ‘ νλ©°, νλ©΄ μ€κ°μ μ€νλΌμ΄νΈλ₯Ό λ€μ λ‘λνμ§ μκ³ μ΄ 64 κ°μ μ€νλΌμ΄νΈλ₯Ό νλ©΄μ νμ ν μ μλ€. NESμ νμ€ λμ€νλ μ΄ ν΄μλλ 256 x 240 ν½μ λ‘ κ΅¬μ±λ©λλ€.
CPU λ©λͺ¨λ¦¬ 맡
2A03μ 16λΉνΈ μ΄λλ μ€ λ²μ€λ₯Ό κ°μ§κ³ μκ³ , $0000-$ffffμ μ£Όμλ‘ 64kB λ©λͺ¨λ¦¬λ₯Ό μ§μν μ μμ΅λλ€.
Zero Pageλ $0000-$00FFλ₯Ό μ°Έμ‘° ν©λλ€. μ΄ μμμ λ©λͺ¨λ¦¬μ 첫 νμ΄μ§μ΄μ λΉ λ₯Έ μ€νμ μν λͺ νν μ΄λλ μ± λͺ¨λμ μν΄ μ¬μ©λ©λλ€. λ©λͺ¨λ¦¬ μμ μ€ $0000-$07FFλ $0800-$1FFFμμ μΈλ² λ―Έλ¬λ§ λ©λλ€. μ΄κ²μ $0000 μ μ΄λ€ λ°μ΄ν°λ₯Ό κΈ°λ‘νλ©΄ $0800, $1000, $1800 μλ κΈ°λ‘μ΄ λλ€λ μλ―Έμ΄λ©° $2000-$401Fμ μμΉν I/O λ μ§μ€ν°λ 8k λ§λ€ $2008-$3FFFμ΄λ λ¨μ λ μ§μ€ν° μμμ λ―Έλ¬λ§ λ©λλ€. SRAM(WRAM)μ Save RAMμ΄κ³ , μΉ΄νΈλ¦¬μ§ λ΄ κ²μ μ μ₯μ μν RAMμ μμΈμ€ νκΈ° μν΄ μ¬μ© λ©λλ€.
$8000 λΆν°λ μΉ΄νΈλ¦¬μ§ PRG-ROMμ μμΉν μ΄λλ μ€ μ λλ€. PPG-ROM 16KB λ± ν¬κ° μ€μ§ νλμΈ κ²μμ $8000κ³Ό $C000μ λͺ¨λ λ‘λ λκ³ , 2κ°μ PPG-ROM 16KB λ± ν¬λ₯Ό κ°μ§ κ²μμ νλλ $8000, λλ¨Έμ§λ $C000μ λ‘λ λ©λλ€. 2κ° μ΄μμ λ± ν¬λ₯Ό κ°μ§ κ²μμ μ΄λ λ± ν¬μ λ‘λ ν κ²μΈ κ²°μ νκΈ° μν΄μ λ©λͺ¨λ¦¬ 맀νΌλ₯Ό μ΄μ©ν©λλ€. λ©λͺ¨λ¦¬ 맀νΌλ νΉμ μ£Όμ(λλ λ²μ)μ λ©λͺ¨λ¦¬κ° κΈ°λ‘λλ κ²μ κ°μνκ³ λ©λͺ¨λ¦¬κ° κΈ°λ‘ λ λ λ± ν¬λ₯Ό μ€μμΉ ν©λλ€.
// CPU λ©λͺ¨λ¦¬ 맡
+--------------------+ $10000 +--------------------+ $10000
| | | |
| | | PPG-ROM |
| | | Upper Bank |
| | | |
| PPG-ROM | +--------------------+ $C000
| | | |
| | | PPG-ROM |
| | | Lower Bank |
| | | |
+--------------------+ $8000 +--------------------+ $8000
| SRAM | | SRAM |
+--------------------+ $6000 +--------------------+ $6000
| Expansion ROM | | Expansion ROM |
+--------------------+ $4020 +--------------------+ $4020
| | | I/O Registers |
| | +--------------------+ $4000
| | | |
| I/O Registers | | Mirrors |
| | | $2000-$2007 |
| | | |
| | +--------------------+ $2008
| | | I/O Registers |
+--------------------+ $2000 +--------------------+ $2000
| | | |
| | | Mirrors |
| | | $0000-$07FF |
| | | |
| RAM | +--------------------+ $0800
| | | RAM |
| | +--------------------+ $0200
| | | Stack |
| | +--------------------+ $0100
| | | Zero Page |
+--------------------+ $0000 +--------------------+ $0000
- λ©λͺ¨λ¦¬ 맡 ν μ΄λΈ4
Address range | Size | Device |
---|---|---|
$0000-$07FF | $0800 | 2KB internal RAM |
$0800-$0FFF | $0800 | Mirrors of $0000-$07FF |
$1000-$17FF | $0800 | Mirrors of $0000-$07FF |
$1800-$1FFF | $0800 | Mirrors of $0000-$07FF |
$2000-$2007 | $0008 | NES PPU registers |
$2008-$3FFF | $1FF8 | Mirrors of $2000-2007 (repeats every 8 bytes) |
$4000-$4017 | $0018 | NES APU and I/O registers |
$4018-$401F | $0008 | APU and I/O functionality that is normally disabled. See CPU Test Mode. |
$4020-$FFFF | $BFE0 | Cartridge space: PRG ROM, PRG RAM, and mapper registers (See Note) |
- μΉ΄νΈλ¦¬μ§ κ³΅κ° λ§μ§λ§ λΆλΆμ μΈν°λ½νΈ λ²‘ν° μμΉ
$FFFA-$FFFB = NMI vector
$FFFC-$FFFD = Reset vector
$FFFE-$FFFF = IRQ/BRK vector
λ μ§μ€ν°
6502λ μ μ¬ν νλ‘μΈμλ³΄λ€ μ μ μμ λ μ§μ€ν°λ₯Ό κ°μ§κ³ μμ΅λλ€. μΈ κ°μ§ νΉμ λͺ©μ λ μ§μ€ν°, μ¦ νλ‘κ·Έλ¨ μΉ΄μ΄ν°, μ€ν ν¬μΈν° λ° μν λ μ§μ€ν°κ° μμΌλ©° κ°κ° νΉμ μ©λλ₯Ό κ°μ§κ³ μμ΅λλ€. λν 3κ°μ λ²μ© λ μ§μ€ν°, λμ°κΈ° λ° μΈλ±μ€ λ μ§μ€ν° X, Yκ° μμ΅λλ€. λ°μ΄ν°λ₯Ό μμλ‘ μ μ₯νκ±°λ μ 보λ₯Ό μ μ΄νλ λ° μ¬μ©ν μ μμ΅λλ€.
νλ‘κ·Έλ¨ μΉ΄μ΄ν°(PC)
νλ‘κ·Έλ¨ μΉ΄μ΄ν°λ λ€μμ μ€νν λͺ λ Ήμ΄μ μ£Όμλ₯Ό μ μ₯νλ 16λΉνΈ λ μ§μ€ν°μ λλ€. λͺ λ Ήμ΄κ° μ€νλλ©΄ νλ‘κ·Έλ¨ μΉ΄μ΄ν°μ κ°μ΄ μ λ°μ΄νΈλλ©° μΌλ°μ μΌλ‘ μνμ€μ λ€μ λͺ λ Ήμ΄λ‘ μ΄λν©λλ€. κ°μ λΆκΈ° λ° μ ν λͺ λ Ή, νλ‘μμ νΈμΆ λ° μΈν°λ½νΈμ μν₯μ λ°μ μ μμ΅λλ€.
μ€ν ν¬μΈν°(SP)
μ€νμ $0100-$01FF λ©λͺ¨λ¦¬ μμΉμ μμ΅λλ€. μ€ν ν¬μΈν°λ $0100μμ μ€νμ μν μ νλ 8λΉνΈ λ μ§μ€ν°μ λλ€. μ€νμ νν₯μμΌλ‘ μλνλ―λ‘ λ°μ΄νΈκ° μ€νμ νΈμλλ©΄ μ€ν ν¬μΈν°κ° κ°μνκ³ μ€νμμ λ°μ΄νΈλ₯Ό κ°μ Έμ€λ©΄ μ€ν ν¬μΈν°κ° μ¦κ°ν©λλ€. μ€ν μμμ μ΄κ³Όνλ κ²½μ° λ³λλ‘ μ€λ²νλ‘μ°κ° κ°μ§λμ§ μκ³ μ€ν ν¬μΈν°κ° $00μμ $FFλ‘ μν λ©λλ€.
λμ°κΈ°(A)
λμ°κΈ°λ μ°μ λ° λ Όλ¦¬ μ°μ°μ κ²°κ³Όλ₯Ό μ μ₯νλ 8λΉνΈ λ μ§μ€ν°μ λλ€. λμ°κΈ°λ λ©λͺ¨λ¦¬μμ μ‘°νλ κ°μΌλ‘ μ€μ ν μλ μμ΅λλ€.
μΈλ±μ€ λ μ§μ€ν° X(X)
X λ μ§μ€ν°λ μΌλ°μ μΌλ‘ νΉμ μ£Όμ μ§μ λͺ¨λμ λν μΉ΄μ΄ν° λλ μ€νμ μΌλ‘ μ¬μ©λλ 8λΉνΈ λ μ§μ€ν°μ λλ€. X λ μ§μ€ν°λ λ©λͺ¨λ¦¬μμ μ‘°νλ κ°μΌλ‘ μ€μ ν μ μμΌλ©° μ€ν ν¬μΈν°μ κ°μ κ°μ Έμ€κ±°λ μ€μ νλ λ° μ¬μ©ν μ μμ΅λλ€.
μΈλ±μ€ λ μ§μ€ν° Y(Y)
Y λ μ§μ€ν°λ X λ μ§μ€ν°μ κ°μ λ°©μμΌλ‘ μΉ΄μ΄ν°λ‘ μ¬μ©λκ±°λ μ€νμ μ μ μ₯νλ λ° μ¬μ©λλ 8λΉνΈ λ μ§μ€ν°μ λλ€. X λ μ§μ€ν°μ λ¬λ¦¬ Y λ μ§μ€ν°λ μ€ν ν¬μΈν°μ μν₯μ μ€ μ μμ΅λλ€.
μν λ μ§μ€ν° (P)
μν λ μ§μ€ν°λ μ°μ°μ΄ μ€ν λ λλ§λ€ μΈνΈ λλ ν΄λ¦¬μ΄ λλ λΉνΈ νλκ·Έλ€μ μ§ν©μΌλ‘ ꡬμ±λλ λ μ§μ€ν° μ λλ€.
-
Carry Flag (C) - λ§μ§λ§ λͺ λ Ήμ΄κ° λΉνΈ 7μμ μ€λ²νλ‘μ°(overflow) λλ λΉνΈ 0μμ μΈλνλ‘μ°(underflow)κ° λ°μν κ²½μ° μΊλ¦¬ νλκ·Έκ° μΈνΈλ©λλ€. μλ₯Ό λ€μ΄ 255 + 1μ μννλ©΄ κ²°κ³Όλ 0μ΄ λκ³ μΊλ¦¬ λΉνΈλ μΈνΈκ° λ©λλ€. μ΄λ₯Ό ν΅ν΄ μμ€ν μ 첫 λ²μ§Έ λ°μ΄νΈμμ κ³μ°μ μννκ³ μΊλ¦¬λ₯Ό μ μ₯ν λ€μ λ λ²μ§Έ λ°μ΄νΈμμ κ³μ°μ μνν λ ν΄λΉ μΊλ¦¬λ₯Ό μ¬μ©νμ¬ 8λΉνΈλ³΄λ€ κΈ΄ μ«μμ λν κ³μ°μ μνν μ μμ΅λλ€. μΊλ¦¬ νλκ·Έλ SEC(Set Carry Flag) λͺ λ ΉμΌλ‘ μ€μ νκ³ CLC(Clear Carry) λͺ λ ΉμΌλ‘ Clearν μ μμ΅λλ€.
-
Zero Flag(Z) - λ§μ§λ§ λͺ λ Ήμ΄μ κ²°κ³Όκ° 0μΈ κ²½μ° μ λ‘ νλκ·Έκ° μΈνΈλ©λλ€. μλ₯Ό λ€μ΄ 128 - 127μ 0 νλκ·Έλ₯Ό μΈνΈ λμ§ μλ λ°λ©΄ 128 - 128μ μΈνΈν©λλ€.
-
Interrup Disable (I) - μΈν°λ½νΈ λΉνμ±ν νλκ·Έλ μμ€ν μ΄ IRQμ μλ΅νλ κ²μ λ°©μ§νλ λ° μ¬μ©ν μ μμ΅λλ€. μ΄κ²μ SEI(Set Interrupt Disable) λͺ λ Ήμ μν΄ μ€μ λκ³ IRQλ CLI(Clear Interrupt Disable) λͺ λ Ήμ΄ μ€νλ λκΉμ§ 무μλ©λλ€.
-
Decimal Mode (D) - 10μ§μ λͺ¨λ νλκ·Έλ 6502λ₯Ό BCD λͺ¨λλ‘ μ ννλ λ° μ¬μ©λ©λλ€. μ΄ νλκ·Έλ SED(Set Decimal Flag) λͺ λ ΉμΌλ‘ μ€μ νκ³ CLD(Clear Decimal Flag)μ μν΄ ν΄λ¦¬μ΄ ν μ μμ΅λλ€. (NESμ© 6502μμλ μ¬μ©λμ§ μμ΅λλ€)
-
Break Command (B) - BRK(Break) λͺ λ Ήμ΄ μ€νλμ΄ IRQκ° λ°μνμμ λνλ΄λ λ° μ¬μ©λ©λλ€.
-
Overflow Flag (V) - μ΄μ λͺ λ Ήμ΄μμ μλͺ»λ 2μ 보μ κ²°κ³Όλ₯Ό μ»μ κ²½μ° μ€λ²νλ‘μ° νλκ·Έκ° μΈνΈ λ©λλ€. μ΄κ²μ μμκ° μμλμμ λ μμλ₯Ό μ»μκ±°λ κ·Έ λ°λμ κ²½μ°λ₯Ό μλ―Έν©λλ€. μλ₯Ό λ€μ΄, λ κ°μ μμλ₯Ό λνλ©΄ κ²°κ³Ό λν μμκ° λμ΄μΌ ν©λλ€. κ·Έλ¬λ 64 + 64λ sign bitλ‘ μΈν΄ -128 κ²°κ³Ό μ 곡ν©λλ€. λ°λΌμ μ΄ κ²½μ° μ€λ²νλ‘μ° νλκ·Έκ° μΈνΈλ©λλ€. μ€λ²νλ‘μ° νλκ·Έλ λΉνΈ 6κ³Ό 7 μ¬μ΄μ λΉνΈ 7κ³Ό μΊλ¦¬ νλκ·Έ μ¬μ΄μμ μΊλ¦¬μ λ°°νμ λ Όλ¦¬ν©μ μ·¨νμ¬ κ²°μ λ©λλ€. μμΈν μ¬νμ λ¬Έμμ Appedix Aλ₯Ό μ°Έκ³ νμκΈ° λ°λλλ€.
-
Negative Flag (N) - λ°μ΄νΈμ λΉνΈ 7μ ν΄λΉ λ°μ΄νΈμ λΆνΈλ₯Ό λνλ΄λ©° 0μ μμμ΄κ³ 1μ μμμ λλ€. μ΄ λΆνΈ λΉνΈκ° 1μ΄λ©΄ μμ νλκ·Έ(λΆνΈ νλκ·ΈλΌκ³ λ ν¨)κ° μΈνΈλ©λλ€.
// μν λ μ§μ€ν°
7 6 5 4 3 2 1 0
+-------------------------------+
| N | V | | B | D | I | Z | C |
+-------------------------------+
// 5λΉνΈλ unused
μΈν°λ½νΈ
μΈν°λ½νΈλ μ½λμ μμ°¨ μ€νμ μ€μ§νκ³ μΈν°λ½νΈμ μ§μ€νλλ‘ ν©λλ€. μΈν°λ½νΈλ μΌλ°μ μΌλ‘ νΉμ μν©μ μν΄ νλμ¨μ΄μ μν΄ λ°μνμ§λ§, μννΈμ¨μ΄μ μν΄ νΈλ¦¬κ±°λ μ μμ΅λλ€. NESμλ μΈ κ°μ§ μ νμ μΈν°λ½νΈ NMI, IRQ, resetμ΄ μμ΅λλ€. μΈν°λ½νΈκ° λ°μν λ μ νν μ£Όμλ $FFFA-$FFFFμ λ²‘ν° ν μ΄λΈμ μ μ₯λ©λλ€. μΈν°λ½νΈκ° λ°μνλ©΄ μμ€ν μ λ€μ μμ μ μνν©λλ€.
- μΈν°λ½νΈ μμ²μ΄ λ°μ μΈμ
- νμ¬ λͺ λ Ήμ μ€νμ μλ£
- νλ‘κ·Έλ¨ μΉ΄μ΄ν°μ μν λ μ§μ€ν°λ₯Ό μ€νμ νΈμν©λλ€.
- λ μ΄μμ μΈν°λ½νΈλ₯Ό λ°©μ§νκΈ° μν΄ μΈν°λ½νΈ λΉνμ±ν νλκ·Έ μ€μ
- λ²‘ν° ν μ΄λΈμμ νλ‘κ·Έλ¨ μΉ΄μ΄ν°λ‘ μΈν°λ½νΈ μ²λ¦¬ 루ν΄μ μ£Όμλ₯Ό λ‘λ
- μΈν°λ½νΈ μ²λ¦¬ 루ν΄μ μ€ν
- RTI(Return From Interrupt) λͺ λ Ήμ μ€νν ν μ€νμμ νλ‘κ·Έλ¨ μΉ΄μ΄ν°μ μν λ μ§μ€ν° κ°μ κ°μ Έμ΄
- νλ‘κ·Έλ¨ μ€ν μ¬κ°
IRQ λλ maskable μΈν°λ½νΈλ νΉμ λ©λͺ¨λ¦¬ 맀νΌμ μν΄ μμ±λ©λλ€. μΈν°λ½νΈ λΉνμ±ν νλκ·Έκ° μ€μ λ κ²½μ° νλ‘μΈμμμ 무μλ©λλ€. IRQλ BRK(μ€λ¨) λͺ λ Ήμ μ¬μ©νμ¬ μννΈμ¨μ΄μμ νΈλ¦¬κ±°ν μ μμ΅λλ€. IRQκ° λ°μνλ©΄ μμ€ν μ $FFFE λ° $FFFFμ μλ μ£Όμλ‘ μ νν©λλ€.
NMI(Non-Maskable Interrupt)λ κ° νλ μμ λμμ V-Blankκ° λ°μν λ PPUμμ μμ±νλ μΈν°λ½νΈ μ νμ λλ€. NMIλ μν λ μ§μ€ν°μ μΈν°λ½νΈ λΉνμ±ν λΉνΈμ μν₯μ λ°μ§ μμΌλ―λ‘ λ°μ μ νμ μ€νμ΄ μ€λ¨λ©λλ€]. κ·Έλ¬λ PPU μ μ΄ λ μ§μ€ν° 1($2000)μ λΉνΈ 7μ΄ μ§μμ§λ©΄ NMI νΈλ¦¬κ±°λ₯Ό λ°©μ§ν μ μμ΅λλ€. NMIκ° λ°μνλ©΄ μμ€ν μ $FFFA λ° $FFFBμ μλ μ£Όμλ‘ μ νν©λλ€.
Reset μΈν°λ½νΈλ μμ€ν
μ΄ μ²μ μμλ λμ μ¬μ©μκ° λ¦¬μ
λ²νΌμ λλ₯Ό λ νΈλ¦¬κ±°λ©λλ€. μ¬μ€μ μ΄ λ°μνλ©΄ μμ€ν
μ $FFFC λ° $FFFDμ μλ μ£Όμλ‘ μ νν©λλ€.
μμ€ν
μ μ¬μ€μ μμ²μ κ°μ₯ λμ μ°μ μμλ₯Ό λΆμ¬νκ³ NMIμ λ§μ§λ§μΌλ‘ IRQκ° λ€λ°λ¦
λλ€.
NESλ 7 μ¬μ΄ν΄μ μ ν°λ½νΈ λ μ΄ν΄μλ₯Ό κ°μ§λλ°, μ΄κ²μ μΈν°λ½νΈ μ²λ¦¬λ₯Ό μ€ννκΈ° μν΄μλ 7 CPU μ¬μ΄ν΄μ΄ νμνλ€λ κ²μ μλ―Έν©λλ€.
// NMI(Non-Maskable Interrupt) μ²λ¦¬
Memory
+---------+
+---------+ -----> | P | $0100 + SP - 2
| P | +---------+
+---------+ | PC | $0100 + SP - 1
| A | +---------+
+---------+ /| PC | $0100 + SP
| X | / +---------+
+---------+ / | |
| Y | / +---------+
+---------+ / | |
| SP | / +---------+
+---------+ / | |
| PC |/ +---------+
+---------+ | |
+---------+ --+
+--> | | bbaa |
| +---------+ |
| | | |--- Interrupt Handler
| +---------+ |
Interrupt | | | |
Handler | +---------+ --+
Address | | |
| +---------+
| | |
| +---------+
| +-| aa | $FFFA
+--| +---------+
+-| bb | $FFFB
+---------+
| |
+---------+
μ΄λλ μ± λͺ¨λ
6502μλ λ©λͺ¨λ¦¬μ μ‘μΈμ€νκΈ° μν λͺ κ°μ§ λ€λ₯Έ μ£Όμ μ§μ λͺ¨λκ° μμ΅λλ€. λν λ©λͺ¨λ¦¬κ° μλ λ μ§μ€ν° 컨ν μΈ μμμ μλνλ μλλ μ± λͺ¨λλ μμ΅λλ€. 6502μλ μ΄ 13κ°μ λ€λ₯Έ μ£Όμ μ§μ λͺ¨λκ° μμΌλ©°, μΌλΆ λͺ λ Ήμ΄λ λ μ΄μμ λ€λ₯Έ μ£Όμ μ§μ λͺ¨λλ₯Ό μ¬μ©ν μ μμ΅λλ€. μ£Όμ μ§μ λͺ¨λμ λν μμΈν λ΄μ©μ λ¬Έμμ Appendix Eμμ νμΈ κ°λ₯ν©λλ€.
λͺ λ Ήμ΄ μ§ν©
6502λ 56κ°μ λͺ
λ Ήμ΄κ° μμ§λ§ μΌλΆλ λ€λ₯Έ μ£Όμ μ§μ λͺ¨λλ₯Ό μ¬μ©νμ¬ μ¬λ¬ λ³νμ΄ μμ΄ κ°λ₯ν 256κ° μ€ μ΄ 151κ°μ μ ν¨ν opcodeλ₯Ό μμ±ν©λλ€.
λͺ
λ Ήμ μ£Όμ μ§μ λͺ¨λμ λ°λΌ 1λ°μ΄νΈ, 2λ°μ΄νΈ λλ 3λ°μ΄νΈμ
λλ€. 첫 λ²μ§Έ λ°μ΄νΈλ opcodeμ΄κ³ λλ¨Έμ§ λ°μ΄νΈλ νΌμ°μ°μμ
λλ€.
-
λ‘λ/μ μ₯ μμ - λ©λͺ¨λ¦¬μμ λ μ§μ€ν°λ₯Ό λ‘λνκ±°λ λ μ§μ€ν°μ λ΄μ©μ λ©λͺ¨λ¦¬μ μ μ₯ν©λλ€.
-
λ μ§μ€ν° μ μ‘ μμ - X λλ Y λ μ§μ€ν°μ λ΄μ©μ λμ°κΈ°μ 볡μ¬νκ±°λ λμ°κΈ°μ λ΄μ©μ X λλ Y λ μ§μ€ν°λ‘ 볡μ¬ν©λλ€.
-
μ€ν μμ - μ€νμ νΈμ λλ ννκ±°λ X λ μ§μ€ν°λ₯Ό μ¬μ©νμ¬ μ€ν ν¬μΈν°λ₯Ό μ‘°μν©λλ€.
-
λ Όλ¦¬ μ°μ° - λμ°κΈ° λ° λ©λͺ¨λ¦¬μ μ μ₯λ κ°μ λν λ Όλ¦¬ μ°μ°μ μνν©λλ€.
-
μ°μ μ°μ° - λ μ§μ€ν°μ λ©λͺ¨λ¦¬μ λν μ°μ μ°μ°μ μνν©λλ€.
-
μ¦κ°/κ°μ - X λλ Y λ μ§μ€ν° λλ λ©λͺ¨λ¦¬μ μ μ₯λ κ°μ μ¦κ° λλ κ°μμν΅λλ€.
-
Shifts - λμ°κΈ° λλ λ©λͺ¨λ¦¬ μμΉμ λΉνΈλ₯Ό μΌμͺ½μ΄λ μ€λ₯Έμͺ½μΌλ‘ 1λΉνΈ μ΄λν©λλ€.
-
μ ν/νΈμΆ - μ§μ λ μ£Όμμμ λ€μ μμνμ¬ μμ°¨μ μ€ν μνμ€λ₯Ό μ€λ¨ν©λλ€.
-
λΆκΈ° - μ‘°κ±΄μ΄ μΆ©μ‘±λλ©΄ μ§μ λ μ£Όμμμ λ€μ μμνμ¬ μμ°¨μ μ€ν μνμ€λ₯Ό μ€λ¨ν©λλ€. 쑰건μλ μν λ μ§μ€ν°μ νΉμ λΉνΈ κ²μ¬κ° ν¬ν¨λ©λλ€.
-
μν λ μ§μ€ν° μμ - μν λ μ§μ€ν°μμ νλκ·Έλ₯Ό μ€μ νκ±°λ μ§μλλ€.
-
μμ€ν κΈ°λ₯ - κ±°μ μ¬μ©νμ§ μλ κΈ°λ₯μ μνν©λλ€.