명령어 집합 | |
CISC | AMD64 ● x86 ● · M68K · 68xx · Z80 · 8080 · MOS 65xx · VAX |
RISC |
AArch64
ARM ·
RISC-V
● ·
MIPS
● ·
DEC Alpha ·
POWER
PowerPC ·
CELL-BE LoongArch · OpenRISC · PA-RISC · SPARC · Blackfin · SuperH · AVR32 AVR |
VLIW EPIC |
E2K · IA-64 · Crusoe |
MOS Technology 6502 | |
출시 연도 | 1975년 |
연산 단위 | 8비트 |
주소 범위 | 16비트 |
[clearfix]
1. 개요
모스 테크놀로지[1] 사에서 1975년 출시한 8비트 마이크로프로세서[2]이다.애플 1~2, 코모도어 64, 닌텐도 패밀리 컴퓨터, 아타리 2600등 수많은 명작을 만들어냈다.
2. 역사
모토로라에서 척 페들(Chuck Peddle, 1937~2019)과 여러 엔지니어들은 8비트 마이크로프로세서 모토로라 6800을 만들었으나, 지나치게 비싸서 바이어들이 구매하지 않는 것을 알게 되었다. 가격을 낮추기 위해선 칩 크기를 줄여야 했고, 그러려면 모토로라 6800보다 명령어 세트를 간소화하고 소비 전력을 절감할 수 있었던 새로운 반도체 공정 기술이었던 NMOS(Depletion-load n-type metal-oxide semiconductor, 디플리션 부하 N형 금속 산화물 반도체)로 만들어야 한다고 모토로라 경영진에 주장했다. 그러나 모토로라는 마침 텍사스 오스틴에 건설한 반도체 공장에서 생산에 어려움을 겪고 있었기에 이를 거절했다.결국 이들은 1974년 모토로라를 퇴사한 후 MOS 테크놀로지로 이직했고, 1975년 8월 모토로라 6800의 저비용 대체품 6501를 개발하게 되는데 6501는 모토로라 6800과 동일한 핀 배치 및 하드웨어 사양을 가지고 있었기에 모토로라 6800에 맞게 설계된 프로그램은 약간의 수정만 하면 정상적으로 동작할 수 있었다.
하지만 이러한 유사성으로 인해 6501는 모토로라 6800의 설계를 바탕으로 만들어졌다는 의혹이 들었고 결국 모토로라는 모스 테크놀로지를 상대로 특허 침해 및 영업 기밀 도용 혐의로 소송을 제기했다. 결국 모스 테크놀로지는 모토로라 측과 합의하여 6501 판매 중단 및 회수 조치를 해야만 했다. 이후 핀 배치를 변경하고 일부 기능의 추가와 개선이 이루어진 6502 프로세서를 출시하였으며 본격적으로 다양한 전자제품에 탑재되기 시작한다.
3. 내부 구조
레지스터는 총 6개로 8비트 A, X, Y, P, S와 16비트 프로그램 카운터를 가지고 있다. 8비트 레지스터만으로 구성되어 있지만 16비트의 메모리를 다룰 수 있었다. 이 시기에 다른 8비트 CPU는 8080, Z80 정도가 있었는데 범용 레지스터만 해도 7개를 가지고 있었다. 6502의 모든 레지스터는 7개 안에 전부 들어가는 셈.8비트 | ||
누산기 | A | |
인덱스 레지스터 | X | Y |
상태 레지스터 | P : [N] [V] x [B] [D] [I] [Z] [C] | |
스택 포인터 | S | |
16비트 | ||
프로그램 카운터 | PC |
명령어 세트는 작고 간결했지만 대신 많은 주소 지정 모드를 지원하므로 적은 수의 레지스터를 효율적으로 이용할 수 있었다. 13가지의 주소 지정 모드가 있었으며 다음과 같다.
- Accumulator : A 레지스터가 연산 대상이 된다. 시프트 연산같이 연산 대상이 하나인 명령어에서 주로 사용할 수 있다.
- Absolute : 명령어 다음으로 2바이트의 주소값이 뒤따라오며 이를 포인터로 사용한다.
- Absolute, X-Indexed : Absolute와 비슷하나 2바이트 주소값에 X 레지스터의 값과 현재 캐리 플래그의 값을 더한다. 결과값을 포인터로 사용한다. X 레지스터를 16비트로 부호 확장하지 않기 때문에 범위는 0 ~ 255까지 지정 가능하다.
- Absolute, Y-Indexed : Absolute, X-Indexed와 비슷하나 X 레지스터 대신 Y 레지스터를 이용한다.
- Immediate : 명령어 다음으로 1바이트의 데이터가 뒤따라오며 이 데이터를 그대로 연산에 사용한다.
- Implied : 연산 대상이 필요하지 않은 경우, CLC, BRK 같이 하는 일은 있으나 아무런 데이터도 필요하지 않은 명령어에서 사용된다.
- Indirect : 명령어 다음으로 2바이트의 주소값이 뒤따라온다. 이 주소를 이용해서 메모리에서 2바이트 주소를 읽는다. 이 주소를 포인터로 사용한다. (뭔가 반복되는거 같지만 잘못되지 않았습니다.)
- X-Indexed, Indirect : 명령어 다음으로 1바이트의 데이터가 뒤따라온다. 이 값에 X 레지스터의 값을 더한다. 8비트 범위를 넘어가는건 무시하고 결과값을 주소로 이용하여 메모리에서 16비트 데이터를 읽고 주소값으로 사용한다.
- Indirect, Y-Indexed : 명령어 다음으로 1바이트의 주소값이 뒤따라온다. 이 주소를 이용해서 메모리에서 2바이트 데이터를 읽는다. 이 값에 Y 레지스터의 값을 더하고 포인터로 사용한다.
- Relative : 명령어 다음으로 1바이트의 데이터가 뒤따라오며 이를 16비트로 부호 확장한 다음, 프로그램 카운터의 값을 더한다. 결과값이 주소가 된다.
- Zeropage : 명령어 다음으로 1바이트의 주소값이 뒤따라오며 이 주소를 포인터로 사용한다.
- Zeropage, X-Indexed : Zeropage와 비슷하나 X 레지스터의 값을 더한다. 8비트 범위를 벗어나는건 무시한다.
- Zeropage, Y-Indexed : Zeropage, X-Indexed와 비슷한데 X 레지스터 대신 Y 레지스터를 더한다. 8비트 범위를 벗어나는건 무시한다.
연산 대상으로 X, Y 레지스터를 사용할 수 없는데 그 이유는 거의 모든 연산을 메모리하고만 한다. 간혹 X, Y 레지스터를 이용하여 연산하는 명령어가 있긴 하나 증가 연산, 비교 연산 정도로 간단한 것들뿐이다. 레지스터의 개수가 적은 대신 메모리를 대상으로 하는 다양한 주소 지정 모드를 지원했기에 큰 문제는 아니었지만 복잡해서 다루기 어려웠다.
명령어 세트가 간결해 어셈블리어만 보고 바로 기계어 코드를 만들 수 있는 사용자들이 많다.
4. 특징
트랜지스터 개수가 약 3천개 중반으로 동시대 프로세서에 비하면 절반 밖에 안되는 칩 크기를 가졌고 이 덕에 칩 가격이 저렴해 수많은 기기에 채용될 수 있었다. 지금은 트랜지스터 겨우 몇천 개 줄이는게 의미가 없을 수도 있지만 이 시절에는 CPU는 물론이고 DRAM도 트랜지스터를 겨우 수천 개만 넣을 수 있었던 시절이었다. 8비트 프로세서가 접근 가능한 최대 용량인 64 kiB를 기본적으로 전부 사용할 수 있는 컴퓨터가 나온건 프로세서가 나온지 7년의 세월이 흐른 코모도어 64 시절 이야기이고 그 전에는 메모리의 용량을 측정하는 단위는 바이트가 아닌 비트였을 정도다. 아타리 2600은 단 128바이트의 메모리만 가지고 있었다.또 6502는 위에 서술한 이유로 수많은 기기에 채용된 덕에 소프트웨어 환경이 풍부했다. 특히 1977년에 나온 게임기 아타리 2600과 개인용 컴퓨터 Apple II가 큰 성공을 거두었기 때문이었다.
역공학을 통해 트랜지스터 각각의 회로구조가 밝혀져 이를 이용한 에뮬레이터가 존재한다. #
5. 파생형
- WDC 65C02: 웨스턴 디자인 센터의 개량판.
- WDC 65816: 기존의 6502와 호환성을 유지하면서 16비트로 확장된 CPU.
- 6507: 메모리 주소 접근 기능을 간소화 해 원가를 절감한 칩.
- 6510: 주소 버스 컨트롤러에 3상 상태(Tri-state) 논리 회로를 넣어 64 kiB의 DRAM을 사용할 수 있게 하면서 입출력 컨트롤러를 8비트에서 6비트로 간소화한 칩.
6. 사용
6.1. 컴퓨터
- 애플의 8비트 컴퓨터들. 애플 IIGS부터는 웨스턴 디자인 센터 65C816이 들어갔다.
- 코모도어 인터내셔널의 8비트 컴퓨터들과 주변기기들. 1976년 모스 테크놀로지를 코모도어가 인수하면서 코모도어의 8비트 컴퓨터를 중심으로 다양한 제품에 사용했다.
- 일부 전자 계산기.
- PET
- VIC-20
- 코모도어 64 : 6510을 사용함.
- 코모도어 128 : 인텔 H-MOS 공정에서 위탁 생산한 8502를 사용했다. 공정이 개선되어 칩셋 크기도 작아지고 발열도 덜해졌다.
- 코모도어의 플로피 디스크 드라이브들.
- 8050 : 코모도어 PET 컴퓨터의 병렬 포트에 연결해 사용하는 듀얼 5.25인치 2배 밀도(Double-Density) 플로피 디스크 드라이브이며, 데이지 체인 방식으로 플로피 디스크 드라이브 하나에 여러대의 코모도어 PET 컴퓨터를 연결할 수 있다. 다만 성능을 위해 별도의 프로세서를 장착한것은 좋았으나 읽기 쓰기를 본체의 CPU가 처리하는 방식이 프로그램 실행 등에서 호환성이 훨씬 좋았고 비용 등의 문제도 있어서 사장된다.
- 1540 : 코모도어 VIC-20 플로피 디스크 드라이브
- 1541: 코모도어 64 플로피 디스크 드라이브
- 1570, 1571: 코모도어 128 플로피 디스크 드라이브. 1570과 1571은 외부 하우징을 제외하면 같은 구조이다.
- 1551: 코모도어 Plus/4 플로피 디스크 드라이브. 6510을 사용한다.
- 에이콘 8비트 컴퓨터 시리즈
- 아타리 8비트 컴퓨터 시리즈
6.2. 게임기
6.3. 아케이드 기판
- 닌텐도
- 펀치 아웃!!(아케이드)
- 닌텐도 vs 보드: 패미컴을 아케이드 기판으로 개조한 것으로 닌텐도를 비롯한 남코, 코나미에서도 수많은 게임들을 이식해 오락실에 판매했다.
- 데이터 이스트
- DECO 카세트 시스템
- 일부 8비트 기판들: 포켓 걸 등
- 아이렘
- 아이렘 M10: IPM 인베이더
- 아이렘 M27
- 아타리
- 주 CPU로 사용: 아타리 6502 흑백/컬러/벡터
- 사운드 CPU로 사용: 아타리 시스템 1, 시스템 2, 시스템 IV, G1, G42, GX 보드 등
- SNK: SNK 6502
[1]
MOS Technology, 1970년대 중반부터 1980년대 초반까지 날렸던 메모리 제조업체 모스텍(Mostek)과는 별개의 회사다.
[2]
1.023MHz
[N]
Negative, 연산 결과가 음수일 경우 1이 된다.
[V]
Overflow, 연산 범위를 초과할 경우 1이 된다.
[B]
Break, 디버거에서 사용한다.
[D]
Decimal, BCD 모드일 경우 1.
[I]
Interrupt Mask, 0이면 인터럽트를 허용한다.
[Z]
연산 결과가 0일 경우 1이 된다.
[C]
올림 또는 빌림이 발생할 경우 1이 된다.
[10]
6502를 기반으로 한
RICOH의 2A03(NTSC), 2A07(PAL, SECAM)이 들어갔다. 자세한 것은 해당 문서를 참고.
[11]
6502 기반으로 독자적인 명령어와 메모리 관리 유닛을 추가한 허드슨-세이코 엡손 HuC6280. 문서 참고.
[12]
2001~2008년 적외선 통신 모델. 해킹 결과 6502 기반 프로세서가 들어갔음을 밝혀냈다.
#
[13]
저가형인 6507을 사용.
[14]
커스텀 버전인 6502C를 사용
[15]
커스텀 버전인 6502C를 사용
[16]
웨스턴 디자인 센터의 65C02를 사용.