COP400

COP400
내셔널 세미컨덕터 COP400
NationalSemiCOP420-JLA-N.jpg
National Semiconductor COP420 28핀 플라스틱 DIP.1982년 말 날짜 코드.
일반 정보
개시.1977년; 45년 전 (연방)
공통 제조원
성능
최대 CPU 클럭 속도250KHz까지
데이터 폭4(RAM), 8(ROM)
주소 폭7(RAM), 11(ROM)
아키텍처 및 분류
어플내장
명령 집합COP400
지침들40
물리 사양
패키지
역사
전임자MM5799(PMOS COP)
후계자COP8

COP400 또는 COP II는 1977년 National Semiconductor가 원래PMOS COP 마이크로컨트롤러의 [1]후속 제품으로 선보인 4비트 마이크로컨트롤러 패밀리입니다.COP400 패밀리는 전용 컨트롤러를 [2]구현하기 위해 필요한 내부 타이밍, 논리, ROM, RAM 및 I/O를 포함하는 완전한 마이크로컴퓨터입니다.일부 COP400 디바이스는 Western Digital에서 WD4200 [3][4]패밀리로 세컨드 소싱되었습니다.

COP400은 CMOS 또는 N채널 실리콘 게이트 MOS 테크놀로지로 구현되어 있습니다.일반적으로 24핀 및 28핀 DIP 패키지로 포장되어 있습니다.더 빠른 패밀리 구성원의 명령 주기 시간은 4마이크로초입니다.COP400 패밀리는 몇 가지 메모리 및 핀 배치 구성을 제공했습니다.

기억

COP400은 ROM과 RAM에 별도의 메모리 공간을 사용합니다.ROM 주소는 최대 11비트, 데이터 주소는 최대 7비트입니다.

ROM

프로그램 메모리는 512, 1024 또는 2048 x 8 ROM으로 구성됩니다.ROM 바이트는 프로그램 명령, 프로그램 데이터 또는 점프 주소 포인터일 수 있습니다.JP 및 JSRP 명령과 관련된 특수 특성 때문에 ROM은 64바이트의 페이지로 구성되는 경우가 많습니다.또, LQID 및 JID 명령에 의해서 실행되는 일의의 조작에 의해, ROM 페이지는 256 바이트의 블록으로 편성되어 있다고 생각할 수 있습니다.

들이받다

데이터 메모리는 32, 64 또는 128 x 4 RAM으로 구성되어 있으며 16개의 4비트 자릿수의 데이터 레지스터로 구성되어 있습니다.RAM 어드레싱은 포인터로 사용되는 6비트 또는 7비트 B 레지스터에 의해 구현됩니다.B 레지스터의 상위 2비트 또는 3비트(Br)는 4비트 또는 8개의 데이터 레지스터 중 하나를 선택하고 하위 4비트(Bd)는 선택한 데이터 레지스터의 16개의 4비트 자리 중 하나를 선택합니다.B 레지스터가 가리키는 RAM 디짓의 4비트 콘텐츠는 보통 A 레지스터에 로드, 교환 또는 동작합니다.

CPU 레지스터

COP400 레지스터
10 09 08 07 06 05 04 03 02 01 00 (비트 위치)
A 어큐뮬레이터
브르 Bd B(포인트)
PC(높음) PC(페이지) 프로그램 카운터
SA 스택 레지스터
SB
SC
상태 플래그
C 깃발 운반

그림에서 나타내는 레지스터 설정은 최대 ROM(2048 x 8)과 RAM(128 x 4)을 갖춘 COP400 패밀리용입니다.512바이트 또는 1024바이트의 ROM만 있는 패밀리 구성원은 9비트 또는 10비트 PC만 보유하게 됩니다.64 또는 32개의 RAM 위치를 가진 사용자에게는 2비트 Br 레지스터만 있습니다.일부 로우엔드 패밀리멤버는 SC 스택레지스터를 [5]생략합니다.

4비트 A 레지스터(어큐뮬레이터)는 대부분의 산술, 논리 및 데이터 메모리 액세스 작업에 대한 소스 및 수신처 레지스터입니다.또한 B 레지스터의 Br 및 Bd 부분을 로드하고, 8비트 Q 래치 데이터의 4비트를 로드 및 입력하며, 8비트 L 포트의 4비트를 입력하며, SIO 레지스터와의 데이터 교환을 수행하는 데 사용할 수 있습니다.

4비트 ALU는 연산 및 논리 함수를 실행하여 결과를 A에 격납한다.ASC 및 CASC 연산은 캐리어를 1비트 C 레지스터로 출력합니다.대부분은 산술 오버플로를 나타내기 위해 사용됩니다.

모든 ROM 어드레싱은 9, 10, 또는 11비트 PC 레지스터를 통해 이루어집니다.이 바이너리 값은 ROM에 포함된 바이트 중 하나(일반적으로 다음 프로그램 명령)를 선택합니다.현재 명령이 제어 명령의 전송이 아닌 한 PC 값은 현재 명령이 실행되기 전에 다음 순차 ROM 위치를 가리키도록 자동으로 1씩 증가합니다.후자의 경우, 제어 동작의 전송을 실시하기 위해서, PC에 적절한 비순차치가 로드된다.PC는 자동으로 다음 64바이트 페이지 또는 256바이트 메모리 블록을 가리키도록 롤오버됩니다.PC의 상위 1, 2, 또는 3비트는 JID 및 LQID 명령에서도 사용됩니다.

서브루틴 저장 레지스터 SA, SB 및 SC는 3가지 수준의 서브루틴을 구현하여 Last-In, First-Out(LIFO; 라스트인 퍼스트아웃) 하드웨어 서브루틴 스택을 제공합니다.일부 구현에는 SC가 없습니다.

I/O 레지스터 및 포트

COP400 I/O 디바이스와 관련된 포트 번호 또는 메모리 주소는 없습니다.모든 물리적 I/O 레지스터 및 포트는 COP400 어셈블리 언어로 직접 이름으로 참조됩니다.

베이스라인

거의 모든 COP400 패밀리 디바이스는 다음을 [5]구현합니다.

  • 4개의 범용 입력 IN-IN이03 제공됩니다.24핀 패키지에는 IN-IN이03 없습니다.
  • D 레지스터는 4개의 범용 출력을 제공하며 Bd의 4비트 콘텐츠의 수신처 레지스터입니다.D 레지스터는 B 레지스터가 가리키는 RAM과 관련된 최대 16개의 외부 디바이스를 동기화할 때 유용합니다.
  • G 레지스터에는 4개의 범용 양방향 I/O 포트가 있습니다.
  • Q 레지스터는 RAM(B) 및 A에서 로드된 데이터와 ROM에서 로드된 8비트 프로그램 데이터를 유지하는 데 사용되는 래칭된 내부 8비트 레지스터입니다.그 내용은 프로그램 제어 하에 L 드라이버가 활성화 되어 있을 때 L 포트로 출력됩니다.또, L의 내용을 A, RAM(B)에 직접 읽어 들일 수도 있다.
  • SIO 레지스터는 EN 레지스터의 내용에 따라 4비트 직렬 입력/직렬 출력 시프트 레지스터 또는 이진 카운터로 작동합니다.그 내용은 A와 교환할 수 있어 연속적인 시리얼 데이터 스트림을 입력 또는 출력할 수 있습니다.
  • EN 레지스터는 LEI 명령에 의해 프로그램 제어 하에 로드되는 내부 4비트 레지스터입니다.이 레지스터의 각 비트 상태는 EN 레지스터의 각 비트와 관련된 특정 기능을 선택하거나 선택 취소합니다.
  • 10비트 타임베이스 카운터는 소프트웨어로 직접 액세스할 수는 없지만 명령 사이클 주파수를 1,024로 나누어 오버플로 시 펄스를 제공합니다.SKT 명령은 이 펄스의 발생을 테스트하여 프로그래머가 타이머 루틴을 구현할 수 있도록 합니다.일부 로우엔드 COP400 패밀리멤버들은 이 타임베이스 카운터도 SKT 명령도 가지고 있지 않습니다.일부 하이엔드 COP400 디바이스는 타이머의 상위8비트를 읽고 쓸 수 있습니다.

하이엔드

COP440이나 COP2440 등 40핀을 가진 COP400 패밀리의 하이엔드 멤버가 몇 명 있습니다.여기에는 추가 레지스터와 [6]포트가 있습니다.

  • R 포트는 Q와 마찬가지로 추가 8비트 양방향 I/O 포트입니다.R 포트에는 래치와 드라이버가 포함되어 있다.출력되는 데이터는 R 레지스터에 래치된다.입력 경로는 핀에서 축전지 및 RAM까지입니다.R 핀의 입력 데이터는 외부 신호에 의해 R 레지스터에 래치되지 않습니다.이 작업은 프로그램에 의해 간접적으로 수행되어야 합니다.R 드라이버는 L 드라이버와 마찬가지로 고임피던스 상태가 될 수 있습니다.
  • 이들 디바이스에는 H 포트라는 추가 양방향4비트 포트가 있습니다.H 포트를 직접 테스트할 수 없다는 점을 제외하고 H 포트는 기본적으로 G 포트의 복제입니다.
  • 4개의 추가 입력(IN-IN47)이 제공됩니다.IN-IN처럼03 읽을 수는 없지만 다른 용도로 읽습니다.N-IN은45 인터럽트 소스를 선택합니다.IN은6 T 카운터의 소스를 선택합니다.IN7 은, R 포토의 출력 드라이버를 제어합니다.

명령 집합

COP400 패밀리는 매우 콤팩트한 코드를 사용하도록 설계되어 있습니다.가장 자주 사용되는 명령은 1바이트입니다.경우에 따라서는 2바이트 명령의 특수한 1바이트 형식이 있습니다.오브젝트 코드를 보다 컴팩트하게 하기 위해 사용할 수 있는 기능은 다음과 같습니다.

  • LBI 명령은 즉시 값을 사용하여 7비트 B 레지스터를 로드합니다.일반 형식의 명령어는 2바이트가 소요됩니다.1바이트 형식의 LBI는 Br을 0, 1, 2, 3으로만 설정할 수 있으며 Bd를 9, 10, 11, 12, 13, 14, 15 및 0(10진수)으로 설정할 수 있습니다.1바이트 LBI는 32개의 RAM 위치에만 액세스할 수 있습니다.
  • 여러 LBI 명령을 직렬로 쌓을 수 있습니다.첫 번째 LBI만 실행됩니다.이후의 LBI 명령은 NOP로 실행됩니다.이것에 의해, 다른 개시 주소를 가지는 복수의 엔트리 포인트를 공유 루틴에 사용할 수 있습니다.
  • JSR은 일반적인 서브루틴 브랜치 형식에서 2바이트이며 모든 메모리 위치에 직접 액세스할 수 있습니다.JSRP는 서브루틴 브랜치의 1바이트 형식이며, 3번째 64바이트 페이지 내의 위치에만 액세스할 수 있습니다.이 페이지는 서브루틴 페이지 또는 페이지2 라고 불리며 0부터 번호가 매겨집니다.JSRP는 내부 페이지2 또는 3에서 코드화할 수 없습니다.
  • JMP는 일반적인 브랜치 형식으로 2바이트이며 모든 메모리 위치에 직접 액세스할 수 있습니다.JP는 현재 64바이트 페이지의 모든 위치에 액세스할 수 있는 단일 바이트 형식의 브랜치입니다.PC의 상부 비트는 변경되지 않습니다.JP 명령이 2페이지 또는 3페이지 내에서 실행되면 2페이지와 3페이지의 128개 주소 중 하나에 액세스할 수 있습니다.이것은 2페이지에 1바이트의 JSRP 엔트리 포인트를 작성할 때 유용합니다.이 엔트리 포인트는 1바이트의 JP를 사용하여 3페이지의 서브루틴으로 분기할 수 있습니다.
  • B 레지스터는 오버헤드가 거의 없는 최대 4개의 RAM 스트링을 가리키기 위해 사용할 수 있습니다.LD, X, XIS 및 XDS 메모리 액세스 명령은 배타적 또는 2비트 즉시로 Br의 하위 2비트를 사용할 수 있습니다.이것에 의해, B(Br)의 레지스터 부분을, 같은 디짓(Bd) 주소를 공유하는 다른 디짓스트링 중 하나로 플립 할 수 있습니다.
  • Bd 레지스터 부분은 메모리 포인터와 루프 카운터로 동시에 사용할 수 있습니다.증가 후 Bd가 0으로 오버플로하여 루프를 통과하면 XIS 명령은 건너뜁니다.마찬가지로 Bd가 감소 후 15(10진수)까지 언더플로우가 되면 XDS 명령은 건너뜁니다.

코드 예시

다음 코드 예시는 명령 집합의 몇 가지 공간 절약 기능을 보여 줍니다.

  • 싱글 바이트 LBI 명령
  • 여러 개의 LBI 명령을 직렬로 사용하여 여러 개의 진입점 생성
  • 싱글 바이트 JP
  • LD XORing Br을 통해 B가 대상으로 플립되고 XIS가 B를 소스로 플립합니다.
  • XIS의 스킵 기능을 통해 포인터와 루프 카운터의 의무를 공유하는 BD
            040 09 041 19 042 2F043 15044 14 045 C3 046 48
; 메모리 블록을 한 위치에서 다른 위치로 복사합니다. ; ; copyA, copyB, copyC의 3가지 엔트리 포인트가 있습니다. ; LBI 명령의 값은 다음과 같습니다. ; LBI Br, Bd. ; 복사 A:      LBI     0,10        0,10에서 1,10으로 시작하는 6개의 니블 복사 카피 B:      LBI     1,10        1,10에서 0,10까지 6개의 니블을 복사합니다. copyC:      LBI     2,0         2.0에서 3.0까지 16 NYBL 복사  루프:       LD      1           A. XOR Br에 src를 로드하고 1을 사용하여 수신처를 얻습니다.             XIS     1           A를 대상에 저장합니다.Inc. Bd. XOR Br(src를 얻기 위해 1 포함)             JP      고리        ;Bd가 마지막 자리 위치를 지날 때까지 루프합니다.             리트 

방해하다

28핀 이상의 COP400 디바이스는 모두 1개의 인터럽트를 지원합니다.IN 1 행은 인터럽트 입력으로 사용됩니다.인터럽트는 EN 레지스터의 비트 1을 LEI 명령으로 1로 설정하면 활성화됩니다.IN1에서 적어도 2개의 명령 사이클이 긴 저진행 펄스에 응답하여 JP 등의 모든 제어 명령 전송을 완료하고 모든 순차 LBI 명령을 실행한다.다음으로 PC가 서브루틴스택에 푸시되고 제어가 주소 0xFF의 인터럽트 핸들러로 전송됩니다.인터럽트 서비스 [5]루틴에서는 서브루틴을 호출할 수 없습니다.

아키텍처 확장

COP400 디바이스의 대부분은 로우엔드 애플리케이션을 대상으로 하고 있었지만, 보다 요구가 까다로운 애플리케이션에 대응하기 위해 아키텍처의 몇 가지 확장이 작성되었습니다.1985년까지 [6]일부 디바이스에 듀얼 CPU, RAM의 더 깊은 스택 및 더 큰 주소 공간이 추가되었습니다.

듀얼 CPU

COP400의 "듀얼 CPU" 버전은 1981년에 내셔널 세미컨덕터에 의해 발표되었습니다.이러한 싱글 칩 디바이스에는 명령, 메모리 및 대부분의 IO 디바이스를 공유하는 표면상 독립된2개의 CPU가 포함되어 있습니다.실제로 CPU는 완전히 독립되어 있지 않고 하이퍼스레딩 테크놀로지(HTT)를 탑재한 인텔 프로세서와 유사한 하드웨어 자원을 공유하고 있습니다.HTT와 마찬가지로 듀얼 CPU 버전은 프로세서의 특정 섹션(아키텍처 스테이트를 저장하는 섹션)을 복제하는 것으로 동작하지만 ALU, 버스, 메모리 등의 주요 실행 리소스는 복제하지 않습니다.2개의 가상 프로세서의 아키텍처 상태는 각각 중복된A(어큐뮬레이터), B(포인트) 레지스터, C(캐리 플래그), N(스택 포인터) 및 PC([5]프로그램 카운터)로 확립됩니다.

리셋이 해제되면 두 프로세서가 CLRA 명령을 포함하는 위치 0에서 시작하여 위치 401(16진수)으로 점프한 후 위치 1을 실행하는 두 번째 프로세서에 의해 나중에 명령 사이클이 실행됩니다.다음으로 프로세서는 각각 1바이트의 코드를 번갈아 실행합니다.

최대 클럭 주파수에서는 각 프로세서의 명령 실행 시간(1바이트 명령)은 4마이크로초이므로 어느 프로세서의 명령 사이클 시간은 그 2배인 8마이크로초이다.

듀얼 CPU 버전에는 40핀 COP2440N, 28핀 COP2441N 및 24핀 COP2442N이 있습니다.

RAM 내의 반환 스택

이전의 COP400 디바이스에는 2~3레벨의 전용 하드웨어 리턴 스택이 포함되어 있었습니다.COP440 등의 최신 디바이스는 2비트스택 포인터와 RAM을 탑재한4 레벨 리턴 스택을 갖추고 있습니다.듀얼 CPU 버전에는 2개의 2비트스택 포인터와 2개의 서로 다른 RAM 영역이 실장된2개의 독립된4 레벨 리턴 스택이 있습니다.

주소 공간 확대

기본 COP400 명령 세트는 최대 11비트(2,048바이트)의 ROM 주소를 지원하며, 데이터 주소는 최대 7비트(128개 위치)입니다.이른바 그룹4 디바이스는 주소 비트가 늘어난3 바이트의 JMP, JSR 및 LBI 명령을 추가함으로써 메모리 제한을 확장했습니다.이것들은, 최대 15 비트(32,768 바이트)의 ROM 주소를 서포트하고 있습니다만, 데이터 주소는 최대 9 비트(512 로케이션)입니다.이러한 지침을 지원하는 장치에는 COP408, COP484, COP485, C0P409가 있습니다.이들 4그룹 디바이스 중 어떤 것이 생산되었는지는 불분명하다.

적용들

  • Apple Lisa는 COP421을 사용하여 키보드, 마우스, RTC 및 소프트 파워 스위치를 제어했습니다.제2COP421은 Widget 하드디스크 [7]드라이브의 스핀들 모터를 제어한다.
  • 일부 제조업체는 초기 전자 [8]게임에 COP400을 사용했습니다.
    • COP410 및 COP411, 512 바이트 ROM, 32 x 4 RAM: Mattel의 Funtronics Jacks, Red Light Green Light, Tag 및 Plus One.
    • COP420 및 COP421, 1024 바이트 ROM, 64 x 4 RAM: Milton Bradley Lightfight, Einstein 및 Electronic Battleship 1982.콜레코 대 헤드 농구.전국 반도체 퀴즈 키즈 레이서.
    • COP444, 2048 바이트 ROM, 128 x 4 RAM: Entex Space Invader.Mattel Dalla$.
  • Western Digital은 WD2412 시각 [9]클럭의 베이스로 WD4200(COP420)을 사용했습니다.
  • Grundy Newbrain 컴퓨터는 COP420을 사용하여 키보드, 테이프 I/O 및 내장된 16자 VF 영숫자 [10]디스플레이를 관리합니다.

에뮬레이터

COP400 패밀리용 오픈 소스 MAME 에뮬레이터와 여러 개의 휴대용 게임 및 특수 [11][12]계산기가 있습니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ "National Semiconductor: The COP before the COPS". The CPUSHACK Museum. Retrieved 23 December 2021.
  2. ^ "COP400 Microcontroller Family". National Semiconductor. Retrieved 24 December 2021.
  3. ^ "Western Digital and the COP". The CPUSHACK Museum. Retrieved 22 December 2021.
  4. ^ "WD4200/WD4210 Single-Chip N-Channel Microcontroilers". Retrieved 23 December 2021.
  5. ^ a b c d "COPS Microcontrollers Data Book". National Semiconductor. Retrieved 19 January 2022.
  6. ^ a b "The COPS Programming Manual (1985)" (PDF). Vintage Technology Digital Archive. National Semiconductor. Retrieved 23 December 2021.
  7. ^ "Apple Lisa 341-0064A (COP421)". Visual6502. Retrieved 24 December 2021.
  8. ^ "National Semiconductor COP400". Sean Riddle. Retrieved 24 December 2021.
  9. ^ "1983 Components Catalog, page 621" (PDF). Western Digital. Retrieved 24 December 2021.
  10. ^ "COP420 4-Bit Processor - Newbrain". Retrieved 30 December 2021.
  11. ^ "COP400 libmame respository". Github. Retrieved 23 April 2022.
  12. ^ "Funjacks (example emulated game)". Arcade Database. Retrieved 23 April 2022.