모스 테크놀로지 6502
[image]
1. 개요
모스 테크놀로지[1] 사에서 1975년 출시한 8비트 마이크로프로세서이다.
애플 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과 6502를 개발했다.
모토로라 6800과 동일한 핀 배치로 하드웨어적 호환성[2] 을 갖춘 6501이 모토로라의 소송으로 인해 판매 중지 및 회수를 당하면서 핀 배치 변경 및 일부 기능의 추가와 개선이 이루어진 6502 프로세서가 출시되었다.
3. 내부 구조
레지스터는 총 6개로 8비트 A, X, Y, P, S와 16비트 프로그램 카운터를 가지고 있다. 8비트 레지스터 만으로 구성되어 있지만 16비트의 메모리를 다룰 수는 있었다. 이 시기에 다른 8비트 CPU는 8080, Z80 정도가 있었는데 범용 레지스터만 해도 7개를 가지고 있었다. 6502의 모든 레지스터는 7개 안에 전부 들어가는 셈.
전체 메모리의 첫 256바이트 가량은 제로 페이지 레지스터 구역으로 사용하여 6502의 적은 수의 레지스터를 커버했다. 그 다음 256바이트는 스택 메모리 공간으로 예약되어 있다.
명령어 세트는 작고 간결했지만 대신 많은 주소 지정 모드를 지원하기 때문에 적은 수의 레지스터를 효율적으로 이용할 수 있었다. 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비트 범위를 벗어나는건 무시한다.
명령어 세트가 간결해 어셈블리어만 보고 바로 기계어 코드를 만들 수 있는 사용자들이 많다.
4. 특징
트랜지스터 개수가 약 3천개 중반으로 동시대 프로세서에 비하면 절반 밖에 안되는 칩 크기를 가졌고 이 덕에 칩 가격이 저렴해 수많은 기기에 채용될 수 있었다. 지금은 트랜지스터 겨우 몇천 개 줄이는게 의미가 없을 수도 있지만 이 시절에는 CPU는 물론이고 DRAM도 트랜지스터를 겨우 수천 개만 넣을 수 밖에 없었던 시절이었다. 8비트 프로세서가 접근 가능한 최대 용량인 64kiB를 기본적으로 전부 사용할 수 있는 컴퓨터가 나온건 프로세서가 나온지 7년의 세월이 흐른 코모도어 64 시절 이야기이고 그 전에는 수 KB 밖에 안됐다. 아타리 2600은 128바이트의 메모리만 가지고 있을 정도였다.
또 6502는 위에 서술한 이유로 수많은 기기에 채용된 덕에 소프트웨어 환경이 풍부했다. 특히 1977년에 나온 게임기 아타리 2600과 개인용 컴퓨터 Apple II가 큰 성공을 거두었기 때문이었다.
5. 호환되는 칩들
- 6502: 오리지널 버전.
- WDC 65C02: 웨스턴 디자인 센터의 개량판.
- WDC 65816: 기존의 6502와 호환성을 유지하면서 16비트로 확장된 CPU.
- 6507: 메모리 주소 접근 기능을 간소화 해 원가를 절감한 칩.
- 6510: 메모리 영역 제어 기능을 추가해 64kiB의 메모리를 그대로 사용할 수 있게 한 칩.
6. 사용
6.1. 컴퓨터
- 애플의 8비트 컴퓨터들. 애플 IIGS부터는 WDC 65816이 들어갔다.
- 코모도어의 8비트 컴퓨터들. 1976년 모스 테크놀로지를 코모도어가 인수하면서 코모도어의 8비트 컴퓨터를 중심으로 다양한 코모도어 제품에 사용했다.
- BBC 마이크로
- 아타리 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년대 중반부터 80년대 초반까지 날렸던 메모리 제조업체 모스텍(Mostek)과는 별개의 다른 회사다.[2] 약간의 차이점으로 인해 소프트웨어는 수정을 해야 사용이 가능하다.[N] Negative, 연산 결과가 음수일 경우 1이 된다.[V] Overflow, 연산 범위를 초과할 경우 1이 된다.[B] Break, 디버거에서 사용한다.[D] Decimal, BCD 모드일 경우 1.[I] Interrupt Mask, 0이면 인터럽트를 허용한다.[Z] 연산 결과가 0일 경우 1이 된다.[C] 올림 또는 빌림이 발생할 경우 1이 된다.[3] 메모리 영역 제어 기능을 추가한 6510을 사용.[4] 코모도어 PET 컴퓨터의 병렬 포트에 연결해 사용하는 듀얼 5.25인치 2배 밀도(Double-Density) 플로피 디스크 드라이브이며, 데이지 체인 방식으로 플로피 디스크 드라이브 하나에 여러대의 코모도어 PET 컴퓨터를 연결할 수 있다. 오늘날 서버 컴퓨터를 통해 여러 사람이 자료를 공유하는 것처럼 당시에는 플로피 디스크 드라이브를 여러 컴퓨터에 연결해 서로 자료를 공유했다. 플로피 디스크 드라이브를 여러 컴퓨터에 연결하기 위해 코모도어는 플로피 디스크 드라이브를 아예 컴퓨터로 만들었다. 다만 6510이 들어간 본체와는 달리 6502가 들어갔으며 그 자체로도 독립된 컴퓨터의 기능을 할 수 있었다.[5] VIC-20과 코모도어 64에 연결해서 사용하는 플로피 디스크 드라이브[6] 인텔 H-MOS 공정에서 위탁 생산한 8502를 사용했다. 공정이 개선되어 칩셋 크기도 작아지고 발열도 덜해졌다.[7] 6502를 기반으로 한 리코#s-2.2의 2A03(NTSC), 2A07(PAL, SECAM)이 들어갔다.[8] 2001~2008년 적외선 통신 모델. 해킹 결과 6502 기반 프로세서가 들어갔음을 밝혀냈다.#[9] 저가형인 6507을 사용.[10] 커스텀 버전인 6502C를 사용[11] 커스텀 버전인 6502C를 사용[12] 웨스턴 디자인 센터의 65C02를 사용.