WDC 65C02
WDC 65C02![]() PDIP-40 패키지의 W65C02S 마이크로프로세서. | |
일반 정보 | |
---|---|
개시. | 전 |
공통 제조원 | |
성능 | |
최대 CPU 클럭 속도 | 1MHz~14MHz |
역사 | |
전임자 | MOS 테크놀로지 6502 |
Western Design Center(WDC) 65C02 마이크로프로세서는 널리 사용되는nMOS 기반의 8비트 MOS 테크놀로지 6502의 확장 CMOS 버전입니다.65C02는 원래의 6502에서 몇 가지 문제를 수정하고 몇 가지 새로운 명령을 추가했지만, 주요 기능은 동일한 [1]속도로 작동하는 원래의 6502보다 10~20배 적은 전력 소비량을 대폭 줄였습니다.전력 소비량이 감소했기 때문에 65C02는 산업 환경에서 휴대용 컴퓨터의 역할과 마이크로컨트롤러 시스템에 유용하게 쓰였습니다.일부 가정용 컴퓨터 및 의료용 이식 장치를 포함한 임베디드 애플리케이션에 사용되고 있습니다.
WDC 65C02의 개발은 1981년에[a] 시작되었으며 [b]샘플은 1983년 초에 공개되었다.65C02는 [2]얼마 지나지 않아 공식적으로 출시되었습니다.WDC는 Synertek, NCR, GTE 및 Rockwell Semiconductor에 설계를 라이선스했습니다.Rockwell의 주된 관심사는 임베디드 시장이었고, 이 역할을 지원하기 위해 몇 가지 새로운 명령어를 추가해 줄 것을 요청했습니다.이러한 명령어는 나중에 베이스라인 버전으로 복사되어 WDC에서 새로운 명령어를 2개 추가하여 W65C02를 만듭니다.산요도 나중에 이 디자인을 허가받았고 세이코엡손은 HuC6280으로 더 수정된 버전을 생산했다.
초기 버전에서는 40핀 DIP 패키징이 사용되었으며, 원래 nMOS 버전의 속도와 동일한 1, 2, 4MHz 버전으로 제공되었습니다.이후 버전은 PLCC 및 QFP 패키지와 PDIP로 제작되었으며 클럭 속도 정격도 훨씬 더 높았습니다.WDC의 최신 버전인 W65C02S-14는 완전 정적 코어를 갖추고 있으며 5V에서 전원을 공급하면 최대 14MHz의 속도로 작동합니다.
개요 및 기능
65C02는 저비용 범용8비트 마이크로프로세서(8비트 레지스터 및 데이터 버스)로 16비트 프로그램카운터와 주소 버스를 갖추고 있습니다.레지스터 세트는 1개의 8비트 어큐뮬레이터(A), 2개의 8비트 인덱스 레지스터(X 및 Y), 8비트 상태 레지스터(P) 및 16비트 프로그램 카운터(PC)를 포함하는 소형입니다.단일 어큐뮬레이터에 더해 RAM의 첫 번째 256바이트인 "제로 페이지" ()$0000
로.$00FF
)를 사용하면 16비트주소가 아닌8비트 메모리주소를 사용하는 어드레싱 모드를 통해 보다 고속으로 액세스 할 수 있습니다.스택은 다음 256바이트(페이지 1)($0100~$01FF)에 존재하며 이동 또는 확장할 수 없습니다.스택은 스택 포인터(S)가 $01FF부터 시작하여 스택이 [3]증가함에 따라 감소하는 역방향으로 성장합니다.이 명령어에는 가변 길이 명령어 세트가 있으며 [1]명령어마다 1~3바이트씩 다릅니다.
65C02의 기본 아키텍처는 원래 6502와 동일하며, 이 설계의 저전력 구현으로 간주할 수 있습니다.기존 6502에서 가장 인기 있는 속도인 1MHz에서 65C02는 20mW만 필요한 반면, 기존 65C02는 20배 [4]이상 줄어든 450mW를 사용합니다.수동으로 최적화된 코어 및 저전력 사용은 65C02를 저전력 시스템 온 칩([1]SoC) 설계에 적합하도록 설계되었습니다.
Verilog 하드웨어 기술 모델은 W65C02S 코어를 Application-Specific Integrated Circuit(ASIC; 특정 용도 집적회로) 또는 Field-Programmable Gate Array(FPGA;[5] 필드 프로그래밍 가능 게이트 어레이)로 설계하기 위해 사용할 수 있습니다.반도체 업계에서 일반적으로 WDC는 개발자 보드, ICE(In-Circuit Emulator) 및 소프트웨어 개발 시스템을 포함하는 개발 [6]시스템을 제공합니다.
W65C02S–14는 2020년 현재[update] 생산 버전이며 PDIP, PLCC 및 QFP 패키지로 제공됩니다.공식적으로 지원되는 최대 Ø2(기본) 클럭 속도는 5V에서 작동 시 14MHz이며, 이는 –14 부품 번호 접미사로 나타납니다(취미주의자들은 공식 정격보다 빠르게 작동하는 65C02 홈브루 시스템을 개발했습니다)."S"는 부품에 완전 정적 코어가 있음을 나타냅니다. 이 기능은 데이터 [7]손실 없이 하이 또는 로우 상태에서 Ø2를 감속 또는 완전히 정지시킬 수 있는 기능입니다.CMOS에 실장되어 있지 않은 일반적인 마이크로프로세서는 다이내믹코어를 가지고 있기 때문에 지정된 최소값과 최대값 사이의 속도로 연속적으로 클럭되지 않으면 내부 레지스터의 내용이 손실됩니다(따라서 크래시됩니다).
|
일반적인 로직 기능
- 8비트 데이터 버스
- 16비트 주소 버스(64KB 주소 공간 제공)
- 8비트 산술 논리 유닛(ALU)
- 8비트 프로세서 레지스터:
- 16비트 프로그램 카운터
- 69개의 명령, 212개의 동작 코드로 구현
- 제로 페이지 어드레싱을 포함한 16개의 어드레싱 모드
로직 기능
- 벡터 풀(
VPB
)의 출력은 인터럽트 벡터의 어드레싱을 나타내고 있습니다. - 메모리 잠금(
MLB
)의 출력은 읽기-수정-쓰기 명령이 처리 중일 때 다른 버스 마스터에 대한 표시입니다. - 인터럽트용 웨이트(
WAI
및 SToP(STP
) 명령으로 소비전력을 줄이고 인터럽트 레이텐시를 줄이며 외부 이벤트와의 동기화를 가능하게 합니다.
전기적 특징
- 1.71V~5.25V로 지정된 공급 전압
- 소비전류(코어)는 1.89V, 5.25V에서 각각 MHz당 0.15mA 및 1.5mA
- 가변 길이 명령어 세트를 통해 고정 길이 명령어 세트 프로세서에 대한 코드 크기 최적화를 실현하여 전력 절약 실현
- 완전 정적 회로로 클럭을 정지하여 전력 절약 가능
크로킹 기능
W65C02S는 1.8~5V(±5%) 사이의 편리한 공급 전압(VDD)으로 작동할 수 있습니다.데이터 시트 AC 특성 표에는 14MHz에서 5V, 8MHz에서 3.3V 또는 3V, 4MHz에서 2.5V, 2MHz에서 1.8V의 작동 특성이 나열되어 있습니다.그래프는 일반적인 장치가 AC 특성 표에서 제안하는 것보다 더 빠른 속도로 작동할 수 있음을 나타내므로 이 정보는 이전 데이터 시트의 아티팩트일 수 있으며, 지원 하드웨어가 이를 허용한다고 가정하면 20MHz에서 V로 즉시DD 안정적인 작동이 가능해야 한다는 것을 나타냅니다.
임의의 시계률에 대해 그 W65C02S 지원한다는 것은 시스템의 13.5MHz(디지털 디지털 표준 텔레비전 luma 표본화 속도), 14.31818 MHz(NTSC색상 반송파 4×), 14.75 MHz(PAL정사각형 픽셀), 14.7456(전송 속도 결정)등 한 VDD은 freque를 지원하기에 충분 같은 일부 다른 부분에 대한 비율 이상에 달릴 수 있는 시계를 이용할 수 있습니다.nc디자이너 Bill Mensch는 F가 마이크로프로세서 핀의 용량 부하와 같은 오프칩 요인에 의해 영향을 받는다고MAX 지적했습니다.짧은 신호 트랙과 가장 적은 장치를 사용하여 부하를 최소화하면 F를MAX 올리는 데 도움이 됩니다.PLCC 및 QFP 패키지는 PDIP 패키지에 비해 핀 투 핀 캐패시턴스가 적어 프린트 기판 공간을 사용하는 데 더 경제적입니다.
WDC는 W65C02S의 FPGA 실현이 200MHz로 정상적으로 동작하고 있다고 보고했습니다.
NMOS 6502와의 비교
기본 아키텍처
65C02는 대부분 저전력 6502로 생각할 수 있지만 원본에서 발견된 몇 가지 버그를 수정하고 프로그래머가 더 작고 더 빠른 실행 프로그램을 쓸 수 있도록 새로운 명령, 주소 지정 모드 및 기능을 추가합니다.65C02에서는 평균 6502의 어셈블리 언어 프로그램을 10~15% 작게 만들 수 있으며, [1]특정 작업을 수행하기 위한 명령을 적게 사용하여 메모리 액세스를 회피함으로써 유사한 성능 향상을 볼 수 있을 것으로 예상됩니다.
문서화되어 있지 않은 지시가 삭제되었습니다.
원래의 6502에는 56개의 명령어가 있어 다른 어드레싱 모드와 조합하면 256개의 8비트 opcode 패턴 중 총 151개의 opcode가 생성되었습니다.나머지 105개의 미사용 opcode는 정의되지 않았습니다.하위 4비트가 3, 7, B 또는 F인 코드 세트는 완전히 사용되지 않고 하위 2인 코드에는 opcode가 [8]1개만 있습니다.
6502는 이러한 잔여 코드 중 일부가 실제로 동작을 수행하는 방식으로 유명했습니다.6502의 명령 디코더가 작동하는 방식 때문에 opcode에 특정 비트를 설정하는 것만으로 명령 처리의 일부가 발생합니다.이러한 opcode 중 일부는 즉시 프로세서를 크래시하고 다른 일부는 유용한 기능을 수행하며 [9]사용자로부터 비공식적인 어셈블러 니모닉을 제공받기도 했습니다.
65C02는 이전에 문서화되어 있지 않았던 명령어 슬롯을 많이 사용한 새로운 opcode를 추가했습니다.예를 들어 $FF는 새로운 opcode에 사용되었습니다.BBS
설명(아래 참조)을 참조해 주세요.실제로 사용되지 않은 채로 남아 있는 사람들은NOP
s. 이 코드를 [1]이용한 프로그램은 65C02에서는 동작하지 않습니다.
버그 수정
원래 6502는 처음 출시되었을 때 몇 가지 에러타가 있었습니다.이전 버전의 CPU에는 결함이 있었다.ROR
(오른쪽 회전) 명령. 이 명령어를 문서화하지 않음으로써 대처된 MOS 테크놀로지를 발행합니다. ROR
는, 생산 초기에 수정되어 [10]프로세서를 사용하는 대부분의 머신에서는 문제가 되지 않았습니다.
이와는 대조적으로 6502의 모든 NMOS 모델에 존재하는 악명 높은 버그는 간접 어드레싱을 사용할 때 점프 명령을 수반합니다.이 어드레싱 모드에서는, 의 타겟주소JMP
명령어는 오퍼랜드가 아닌 메모리, 점프 벡터로부터 취득됩니다.JMP
설명.예를들면,JMP ($1234)
메모리 위치에서 값을 가져옵니다.$1234(최소 유효 바이트)와 $1235(최소 유효 바이트)를 프로그램카운터에 로드하면 프로세서가 벡터에 저장된 주소로 실행을 계속합니다.
이 버그는 벡터 주소가 메모리 페이지의 경계인 $FF로 끝날 때 나타납니다.이 경우,JMP
는 새 페이지의 $00이 아닌 원래 페이지의 $00에서 대상 주소의 가장 중요한 바이트를 가져옵니다.이런 이유로JMP ($12FF)
타깃 주소의 최하위 바이트는 $12FF, 타깃 주소의 최상위 바이트는 $1300이 아닌 $1200에서 가져옵니다.65C02는 이 [1]문제를 수정했습니다.
NMOS 6502의 상태 레지스터의 (D)에치멀 플래그 상태는 버그라기 보다는 리셋 또는 인터럽트 후에 정의되지 않는다.이는 프로그래머가 산술 연산에 관련된 버그를 피하기 위해 플래그를 알려진 값으로 설정해야 함을 의미합니다.그 결과, 을 찾을 수 있다.CLD
6502 인터럽트 핸들러의 거의 모든 명령(CLEAR Decimal)과 리셋코드 초기.65C02는 인터럽트 또는 하드웨어 리셋에 대한 응답으로 상태 레지스터를 스택에 푸시한 후 이 플래그를 자동으로 지우고 프로세서를 바이너리 산술 [11]모드로 되돌립니다.
10진수 모드 연산 중에 NMOS 6502는 (N)egative, o(V)erflow 및 (Z)ero 플래그를 갱신하여 기본 2진수 연산 결과를 반영하도록 한다. 즉, 플래그는 프로세서가 10진수 보정을 실행하기 전에 계산된 결과를 반영하고 있다.반면 65C02는 연산 [11]명령당 추가 클럭 사이클의 비용으로 10진수 연산 결과에 따라 이들 플래그를 설정한다.
다음과 같은 Read-Modify-Write(R-M-W; 읽기 수정 쓰기) 명령을 실행하는 경우INC addr
모든 NMOS 바리안트는 주소에서 더블 쓰기를 수행합니다.먼저 주소에서 발견된 현재 값을 다시 쓴 후 변경된 값을 씁니다.addr이 하드웨어 레지스터인 경우 이 동작으로 인해 해결이 어려운 버그가 발생할 수 있습니다.이 문제는 하드웨어가 레지스터의 값 변경을 감시한 후 액션을 수행할 때 발생할 수 있습니다.이 경우 원래 값으로 두 가지 액션을 수행한 후 새 값으로 다시 수행합니다.대신 65C02는 주소의 더블 판독과 싱글 쓰기를 수행합니다.
인덱스 어드레싱을 실행할 때 인덱스가 페이지 경계를 넘으면 모든 NMOS 변형은 올바른 주소에 액세스하기 전에 비활성 주소에서 읽습니다.R-M-W 명령과 마찬가지로 이 동작은 인덱싱을 통해 하드웨어 레지스터에 액세스할 때 문제를 일으킬 수 있습니다.65C02에서는 인덱스가 페이지 경계를 넘을 때 명령어opcode를 더미 판독함으로써 이 문제를 수정했습니다.그러나 이 수정에서는 베이스 주소가 짝수 페이지 경계에 있을 때 발생하는 새로운 버그가 도입되었습니다(즉, 인덱스는 다음 페이지로 넘어가지 않습니다).새로운 버그에서는 인덱스 작성 전에 베이스 주소로 더미 판독이 실행됩니다.LDA $1200,X
는 1200달러에 X값이 추가되기 전에 1200달러에 대해 더미 판독을 수행합니다.하드웨어 레지스터 주소로 인덱스를 작성하면 이 버그로 인해 정의되지 않은 동작이 발생할 수 있습니다.
NMOS 6502가 하드웨어 인터럽트 발생과 동시에 BRK(소프트웨어 인터럽트) opcode를 취득하고 있는 경우, 프로세서가 하드웨어 인터럽트에 응답할 때 BRK는 무시됩니다.65C02는 인터럽트를 수리한 후 BRK를 실행하여 이 상황을 올바르게 처리합니다.
새로운 어드레싱 모드
6502 에는, 다음의 2개의 간접 어드레싱 모드가 있습니다.이 모드는 페이지0에 저장되어 있는 16비트주소를 통해 참조 해제됩니다.
- 인덱스 간접(예:
LDA ($10,X)
는 16비트 벡터를 읽기 전에 지정된 페이지0 주소에 X 레지스터를 추가합니다.이 예에서는 X가 5일 경우 로케이션 $15/$16에서 16비트주소를 읽습니다.이것은 0페이지에 포인터의 배열이 있는 경우에 편리합니다. - 간접 색인화
LDA ($10),Y
는 지정된 페이지0 주소에서 읽은16비트 벡터에 Y 레지스터를 추가합니다.예를 들어 Y가 5이고 $10/$11에 $1000이라는 벡터가 포함되어 있는 경우 $1005에서 값을 읽습니다.이것에 의해, 포인터 오프셋의 어드레싱이 실행됩니다.
이 모델의 단점은 인덱스가 필요하지 않지만 주소가 0 페이지에 있는 경우 인덱스 레지스터 중 하나를 0으로 설정하고 이러한 명령 중 하나로 사용해야 한다는 것입니다.65C02에서는 인덱스가 없는 간접 주소 지정 모드가 추가되었습니다.LDA ($10)
인덱스된 간접 및 간접 인덱스 모드를 사용한 모든 명령으로 이동하여 인덱스 [12]레지스터를 개방합니다.
6502의JMP
명령에는 "절대 간접"으로 알려진 고유한 주소 지정 모드가 있습니다. 이 모드는 지정된 메모리 주소에서 16비트 값을 읽은 다음 해당 16비트 값의 주소로 점프합니다.예를 들어 메모리 위치 $A000이 $34, $A001이 $12를 보유하고 있다면,JMP ($A000)
이 두 바이트를 읽고 $1234 값을 작성한 후 해당 위치로 이동합니다.
간접 주소 지정의 일반적인 용도는 인덱스를 사용하여 액세스할 수 있는 서브루틴의 진입점 목록인 분기 테이블을 작성하는 것입니다.예를 들면, 디바이스 드라이버는, 다음의 엔트리를 리스트 할 수 있습니다.OPEN
,CLOSE
,READ
, 등 테이블에서 $A000. READ
세 번째 엔트리로 인덱스는 제로이며 각 주소는 16비트를 필요로 하기 때문에READ
비슷한 것을 사용하다JMP ($A004)
드라이버가 업데이트되고 서브루틴 코드가 메모리 내에서 이동해도 포인터 테이블이 $A000으로 유지되는 한 기존 코드는 계속 작동합니다.
65C02에는 브랜치테이블 사용을 용이하게 하는 새로운 "인덱스 절대 간접" 모드가 추가되었습니다.이 모드에서는 X 레지스터 값이 절대 주소에 추가되어 결과 위치에서 16비트주소가 취득됩니다.예를 들면,READ
위의 표에서 4를 X에 저장합니다.JMP ($A000,X)
이러한 접근 방식은 단일 기본 주소가 8비트 [12]오프셋과 함께 사용되므로 브랜치 테이블에 쉽게 액세스할 수 있습니다.NMOS 버전에서도 인덱스 간접 모드를 사용하여 동일한 작업을 수행할 수 있지만 테이블이 제로 페이지(제한된 리소스)에 있는 경우에만 가능합니다.이것들을 제로 페이지 외부에 구축할 수 있게 함으로써 이 자원에 대한 수요를 줄일 수 있을 뿐만 아니라 테이블을 ROM으로 구성할 수 있게 되었습니다.
새 지침 및 수정된 지침
새로운 어드레싱 모드와 더불어 "기본 모델" 65C02는 일련의 새로운 [13]명령도 추가했습니다.
INC
그리고.DEC
이제 매개 변수가 없는 경우 축전지 증가 또는 감소합니다.이것은 원래 명령어 집합에서 이상한 실수였다.INX
/DEX
,INY
/DEY
그리고.INC addr
/DEC addr
일부 어셈블러는 대체 형식을 사용합니다.INA
/DEA
또는INC A
/DEC A
를 클릭합니다.[13]STZ addr
, 주소의 STORE ZERO.다음 요구를 대신합니다.LDA #0;STA addr
축전지의 값을 변경할 필요가 없습니다.이 태스크는 대부분의 프로그램에서 일반적이기 때문에 STZ를 사용하면 LDA뿐만 아니라 어큐뮬레이터의 값을 저장하기 위해 필요한 모든 코드(일반적으로 어큐뮬레이터)를 제거함으로써 코드 크기를 줄일 수 있습니다.PHA
PLA
쌍으로 [14]하다PHX
,PLX
,PHY
,PLY
, X 레지스터와 Y 레지스터를 스택에서 밀어서 꺼냅니다.이전에는 누름판 및 상태 레지스터에만 푸시 및 풀 명령이 있었습니다.X와 Y를 먼저 축전지로 이동해야만 쌓을 수 있습니다.TXA
또는TYA
이를 통해 축전지의 내용을 변경한 후,PHA
를 클릭합니다.[15]BRA
, 브랜치는 항상.와 같이 동작합니다.JMP
단, 다른 브랜치처럼1 바이트의 상대 주소를 사용하여 바이트를 절약할 수 있습니다.속도는 종종 3 사이클 절대값과 동일합니다.JMP
페이지를 넘기지 않는 한BRA
버전 1의 사이클이 길어집니다(4 사이클).[16]주소는 상대적이기 때문에 메모리 관리 유닛 이전 시대의 일반적인 작업인 재배치 가능한 코드를 [14]쓸 때도 유용합니다.
비트 조작 명령
WDC와 Rockwell은 모두 65C02의 비트 테스트 및 조작 기능을 개선하는 데 기여했습니다.WDC는 6502의 BIT 명령어에 새로운 어드레싱 모드를 추가하고 디바이스 드라이버의 일반적인 동작인 비트필드의 편리한 조작을 위한 2개의 새로운 명령어를 추가했습니다.
65C02의 BIT는 즉시 모드, X에 의한 제로 페이지 및 X 어드레싱에 [13]의한 절대 인덱스를 추가합니다.즉시 모드 어드레싱은 특히 완전 비파괴적이라는 점에서 편리합니다.예를 들어 다음과 같습니다.
LDA $1234
BIT #%00010000
다음 대신 사용할 수 있습니다.
LDA $1234
AND #%00010000
그AND
작업을 수행하면 축전지 값이 변경되므로 $1234에서 로드된 원래 값이 손실됩니다.사용.BIT
는 어큐뮬레이터의 값을 변경하지 않고 그대로 두기 때문에 후속 코드는 원래 값과 비교하여 추가 테스트를 수행할 수 있으므로 메모리에서 값을 다시 로드할 필요가 없습니다.
BIT 명령의 기능 강화에 더해 WDC는 비트 필드를 편리하게 조작할 수 있도록 설계된 두 가지 명령을 추가했습니다.
TSB addr
그리고.TRB addr
, 비트 테스트 및 설정, 비트 테스트 및 리셋.
- 축적기의 마스크(
.A
)는 논리적으로 메모리와 AND화되어 있으며, 이 위치는 제로 페이지 또는 절대 페이지일 수 있습니다.상태 레지스터의 Z 플래그는 논리 AND 결과에 따라 조정되며 다른 상태 레지스터 플래그는 영향을 받지 않습니다.또, 주소내의 비트는, 다음의 마스크에 따라서 설정(TSB) 또는 클리어(TRB)된다..A
간결하게 말하면, TSB는 논리 AND 다음에 논리 OR을 실행하고 논리 OR의 결과를 주소에 저장하는 반면, TRB는 논리 AND의 결과를 주소에 저장합니다.두 경우 모두 상태 레지스터의 Z 플래그는 다음 결과를 나타냅니다..A AND addr
addr의 내용이 변경되기 전.따라서 TRB와 TSB는 일련의 명령어를 대체하여 BIT 명령어와 계산 변경을 저장하기 위한 추가 단계를 결합하지만 변경 [1]전에 영향을 받는 값의 상태를 보고하는 방식으로 합니다.
Rockwell의 변경사항에는 비트 조작 명령어가 추가되어 어떤 비트도 직접 설정 및 테스트하고 테스트, 클리어 및 분기를 하나의 opcode로 결합할 수 있게 되었습니다.새로운 명령어는 Rockwell의 R65C00 [17]패밀리에서 처음부터 사용할 수 있었지만 원래 65C02 사양의 일부가 아니었고 WDC 또는 다른 라이센스 계약자가 만든 버전에서는 찾을 수 없었습니다.이것들은 나중에 베이스라인 설계에 카피되어 이후 WDC 버전에서 사용할 수 있게 되었습니다.
Rockwell 고유의 지침은 다음과 같습니다.
SMBbit# zp
/RMBbit# zp
. 0 페이지 바이트 zp로 비트 번호 bit#을 설정 또는 재설정(클리어)합니다.
- RMB 및 SMB는 비트필드의 개별 비트를 클리어(RMB) 또는 설정(SMB)하기 위해 사용됩니다.각 비트는 3개의 명령의 시퀀스를 대체합니다.RMB와 SMB는 제로 페이지 주소 지정일 뿐이므로 이러한 명령은 유용성이 제한되며 주로 제로 페이지에 디바이스 레지스터가 존재하는 시스템에서 유용합니다.명령어의 bit# 컴포넌트는 다음과 같은 니모닉의 일부로 작성되는 경우가 많습니다.
SMB1 $12
비트 1을 0 페이지주소 $12로 설정합니다.일부 어셈블러는 bit#을 명령어 오퍼랜드의 일부로 취급합니다.SMB 1,$12
변수 이름 또는 계산된 [14]숫자로 대체할 수 있는 장점이 있습니다.
BBR bit#,offset,addr
그리고.BBS bit#,offset,addr
, Bit Set/Reset의 브랜치.
- RMB 및 SMB와 같은 제로 페이지 주소 지정 및 제한이지만 선택한 비트가 클리어(BBR) 또는 세트(BBS)인 경우 주소로 분기합니다.RMB와 SMB의 경우와 마찬가지로 BBR과 BBS는 3개의 [14]명령 시퀀스를 대체합니다.
저전력 모드
위의 새로운 명령어 외에 WDC에서는STP
그리고.WAI
를 참조해 주십시오.
STP
, 프로세서를 STOP 하고, 하드웨어 리셋이 발행될 때까지 모든 처리를 정지했습니다.이를 통해 시스템을 "sleep" 상태로 만든 후 리셋으로 빠르게 웨이크업할 수 있습니다.일반적으로 메인 메모리를 유지하려면 외부 시스템이 필요하기 때문에 널리 사용되지 않았습니다.
WAI
t는 저전력 모드로 이행했을 때도 같은 영향을 미쳤지만, 이 명령은 인터럽트 수신 시 프로세서를 다시 기동시킵니다.지금까지 인터럽트를 처리하는 것은 일반적으로 인터럽트가 수신되었는지 확인하기 위한 루프를 실행하여 인터럽트가 수신되었을 때 유형을 확인한 후 처리 코드로 점프하는 것을 포함했습니다.이것은, 인터럽트가 발생하지 않는 경우에서도, 프로세스 전체에서 프로세서가 동작하고 있는 것을 의미합니다.
이와는 대조적으로 65C02에서는 인터럽트 코드는 다음과 같이 기술될 수 있습니다.WAI
바로 뒤에 가 있다JSR
또는JMP
핸들러에 접속합니다.언제?WAI
이 검출되어 처리가 정지되어 프로세서가 저전력 모드가 되었습니다.인터럽트가 수신되었을 때, 그 인터럽트는 즉시JSR
요청을 처리했습니다.
이로 인해 성능이 약간 향상된다는 이점이 추가되었다.회전하는 경우 인터럽트는 루프의 명령 중 하나에 도달하여 핸들러에서 복귀한 후 재시작할 수 있도록 프로세서는 1 사이클에 걸쳐 위치를 저장합니다.와 함께WAI
프로세서는 모든 명령의 완료를 보증하는 기존의 장소에서 저전력 상태가 됩니다.따라서 인터럽트가 도착했을 때 명령을 중단할 수 없으며 프로세서는 사이클 세이브 상태를 소비하지 않고 안전하게 계속할 수 있습니다.
65SC02
65SC02는 [18]비트 명령이 없는 WDC 65C02의 변형입니다.
65C02의 주요 용도
가정용 컴퓨터
- Apple 컴퓨터에서 Apple IIc 휴대용(NCR 1.023MHz)
- 확장 Apple IIe by Apple Computer (1.023MHz)
- BBC 마스터 홈/교육용 컴퓨터, Acon Computers Ltd (2MHz 65SC12 + 옵션4MHz 65C102초 프로세서)
- Replica 1 by Briel Computers, Apple I 취미용 컴퓨터(1MHz)의 복제품
- Apple II의 레이저 128 시리즈 클론
- KIM-1 Briel Computing의 MOS/CBM KIM-1 최신 복제품
비디오 게임 콘솔
- Atari Lynx 핸드헬드 (65SC02 @ ~4MHz)
- NEC PC 엔진, 일명 TurboGrafx-16 (HuC6280 @ 7.16MHz)[19]
- Timetop별 GameKing 핸드헬드(6MHz)
- Watara 감시 핸드헬드 (65SC02 @ 4MHz)
기타 제품
- Commodore 64 가정용 컴퓨터용 TurboMaster 액셀러레이터 카트리지(65C02 @ 4.09MHz)
- Acon BBC Micro 가정용 컴퓨터용 튜브 연결 세컨드 프로세서 (65C02 @ 3MHz)
- 많은 전용 체스 컴퓨터.Mephisto MMV, Novag Super Constellation, Fidelity Elite 등 (4~20MHz)
「 」를 참조해 주세요.
- 65xx 프로세서의 인터럽트
- CSG 65CE02(65C02의 확장 버전)
메모들
레퍼런스
인용문
- ^ a b c d e f g 바그너 1983, 페이지 204
- ^ "Softalk". Softalk Publishing. Vol. 3, no. 10. June 1983. p. 199. Retrieved 24 May 2022.
- ^ Koehn, Philipp (2 March 2018). "6502 Stack" (PDF).
- ^ 테일러 & 왓포드 1984, 페이지 174
- ^ "6502 CPU Projects in HDL (for FPGA)".
- ^ "W65C02DB Developer Board".
- ^ "W65C02S-14".
- ^ Parker, Neil. "The 6502/65C02/65C816 Instruction Set Decoded". Neil Parker's Apple II page.
- ^ Vardy, Adam (22 August 1995). "Extra Instructions Of The 65XX Series CPU".
- ^ Steil, Michael (2010-09-28). "Measuring the ROR Bug in the Early MOS 6502".
- ^ a b "Differences between NMOS 6502 and CMOS 65c02". Retrieved 27 February 2018.
N, V, and Z flags were incorrect after decimal operation (but C was ok).
- ^ a b Clark, Bruce. "65C02 Opcodes".
- ^ a b c 바그너 1983, 페이지 200
- ^ a b c d 바그너 1983, 페이지 203
- ^ 바그너 1983, 200-201페이지
- ^ "W65C02S Datasheet" (PDF).
- ^ 바그너 1983, 199페이지
- ^ Zaks, Rodnay (1983). Programming the 6502. Sybex. p. 348. ISBN 0895881357.
- ^ "HuC6280 - Archaic Pixels".
참고 문헌
- Wagner, Robert (June 1983). "Assembly Lines". Softtalk. pp. 199–204.
- Taylor, Simon; Watford, Bob (July 1984). "6502 revival". Personal Computer World. pp. 174–175.
추가 정보
- 65C02 데이터시트, 웨스턴 디자인 센터, 32페이지, 2018.
- 65816 프로그래밍 - 6502, 65C02, 65802, 제1판, David Eyes 및 Ron Lichty, 프렌티스 홀, 636페이지, 1986, ISBN 978-0893037895 포함 (아카이브)
외부 링크
- 65C02 웹페이지 - 웨스턴디자인센터
- 65xx/65Cxx/65SCxx의 차이점 - CPU 월드
- 6502/65C02/65C816 명령 세트 디코딩– Neil Parker의 Apple II 페이지에서