안티키
ANTIC![]() |
Alphanumeric Television Interface Controller(ANTIC; 영숫자 텔레비전 인터페이스 컨트롤러[1])는 텔레비전 화면 또는 컴퓨터 디스플레이에 표시되는 2D 컴퓨터 그래픽스를 생성하는 LSI ASIC입니다.이 칩은 Jay Miner의 지시 하에 1979년에 처음 출시된 Atari 8비트 가정용 컴퓨터를 위해 1977-1978년에 Joe Decuir, Francois Michel 및 Steve[2] Smith에 의해 설계되었으며 1981년에 [3]Atari, Inc.에 의해 특허를 받았습니다.ATIC는 1982년에 출시된 아타리 5200 비디오 게임 시스템에도 사용되고 있으며, 아타리 5200은 8비트 컴퓨터와 대부분의 하드웨어를 공유하고 있다.
ATCI는 플레이필드 그래픽의 생성을 담당하며, 플레이필드 그래픽은 관련 CTIA/GTIA 칩에 데이터 스트림으로 전달됩니다.CTIA/GTIA는 플레이필드 그래픽의 컬러링을 제공하며 Atari가 "Player/Missile Graphics"라고 부르는 오버레이 스프라이트를 추가하는 역할을 합니다.
Atari는 데이터를 처리하는 프로그램(디스플레이 리스트라고 함)을 실행하는 명령 세트를 가지고 있다는 점에서 진정한 마이크로프로세서라고 광고했습니다.안티크는 메모리에 계산된 값을 다시 쓸 수 있는 용량이 없습니다. 메모리에서 데이터를 읽고 화면에 출력하기 위해 데이터를 처리할 뿐이므로 튜링이 완전하지 않습니다.
특징들
아래 목록은 CPU가 제공하는 인터럽트나 레지스터 변경을 자주 실행하는 디스플레이 커널에 의해 달성되는 결과를 포함하지 않고 하드웨어 자체의 의도된 기능을 의미하는 ATCI의 고유한 하드웨어 기능을 설명합니다.
안티크는 DMA를 사용하여 다음 플레이필드 기능을 제어하는 "표시 목록"이라는 프로그램을 읽습니다.
- 14가지 Playfield 그래픽스 모드
- 6 문자 모드
- 4종류의 폰트/하이퍼 렌더링
- 8 맵 모드
- 6 문자 모드
- 가변 개수의 빈 스캔 라인 출력
- Playfield Text 모드와 Map 모드를 화면에서 혼재시킬 수 있습니다.
- 수직 오버스캔까지 화면 높이 가변
- 수평 및 수직의 거친 스크롤
- 수평 또는 수직 미세 스크롤이 적용되는 디스플레이 섹션을 식별합니다.
- 특정 스캔 라인에서 CPU 서비스 인터럽트 루틴(다른 시스템에서는 "래스터 인터럽트" 또는 "수평 블랭크 인터럽트"라고도 함)을 트리거합니다.
- 디스플레이 프레임의 끝에서 "수직 블랭크 인터럽트"라고 하는 CPU 서비스 인터럽트 루틴을 트리거합니다.
기타 레지스터 기반 함수:
- 가로 오버스캔까지 화면 폭 가변
- 수평 및 수직 미세 스크롤을 위한 이동 거리 정의
- 전자빔의 수직 화면 위치에 대한 실시간 정보를 제공합니다.
- 라이트 펜 수평/수직 좌표 읽기(CRT만 해당)
- 소프트하고 재정의 가능한 문자 세트.
- 반전 비디오 문자의 조정 가능한 표시.
- 글자는 세로 방향으로 반영될 수 있습니다.
- 디스플레이 지향 Vertical Blank 및 Display List 인터럽트 및 Reset 키 인터럽트를 제어합니다.
- CTIA/GTIA용 DMA를 실행하여 플레이어/미사일 그래픽(스프라이트라고도 함)을 생성합니다.
- 비고정 RAM이것에 의해, 그래픽스 기능용의 RAM은, 16비트 메모리 주소 범위내의 거의 모든 장소에 배치할 수 있습니다.이는 다음 항목에 적용됩니다.
- 목록을 표시합니다.
- Playfield 그래픽스 데이터
- 문자 집합 글꼴
- 플레이어/미사일 그래픽스 데이터
버전
부품 번호별로
- C012296 - NTSC: Atari 400,[4] 800 및 1200XL 컴퓨터에서 사용됩니다.
- C014887 - PAL/SECAM : Atari 400 및 800 컴퓨터에서 사용됩니다.
- C021697 - NTSC : Atari 600XL, 800XL 및 XE 모델에서 사용됩니다.
- C021698 : PAL/SECAM : Atari XL 및 XE 모델에서 사용됩니다.
Atari, Inc.는, Atari 컴퓨터와 5200 콘솔의 생산 코스트를 삭감하기 위해서, ATIC와 GTIA의 칩의 기능을 1개의 집적 회로에 결합하는 것을 목적으로 하고 있습니다.두 개의 시제품 회로가 개발되고 있었지만, 어느 쪽도 생산에 들어가지 않았습니다.
핀 배치
핀 이름 | 핀 번호 | 묘사 |
---|---|---|
A0 - A15 | 13, 12, 11, 10, 28, 27, 26, 25, 24, 23, 16, 22, 17, 18, 19, 20 | 메모리 주소 I/O |
AN0 - AN2 | 2, 3, 5 | CTIA/GTIA에 대한 안티키 인터페이스 |
D0 - D7 | 30, 31, 32, 33, 40, 39, 38, 37 | 데이터 버스 I/O |
Fö0 | 35 | 고속 위상 0 입력 클럭 |
정지하다 | 9 | 출력을 정지하고, 안티C가 메모리를 읽는 동안 CPU를 정지합니다. |
LP | 4 | 라이트 펜 입력 |
NMI | 7 | CPU에 대한 NMI 인터럽트 출력 |
RDY | 15 | Ready Output (준비완료)ATCI가 핀을 낮게 당겨 수평 블랭크 동기(WSYNC)용 CPU를 정지합니다. |
참조 | 8 | RAM 리프레시 출력 |
RNMI | 6 | NMI 인터럽트 입력 |
RST | 36 | ACTIUS 입력 리셋 |
R/W | 14 | 읽기/쓰기 I/O 방향 |
브이cc | 21 | +5 볼트 전원 |
브이ss | 1 | 땅 |
ø0 | 34 | 단계 0 클럭 출력 |
ø2 | 29 | 단계 2 입력 클럭 |
레지스터
Atari 8비트 컴퓨터와 Atari 5200 콘솔은 ATIC 칩을 $4xxhex 페이지에 매핑합니다.
안티크는 플레이필드 디스플레이 파라미터, 플레이어/미스 그래픽용 DMA, 미세 스크롤, 라이트 펜 입력 및 인터럽트를 제어하는 15개의 읽기/쓰기 레지스터를 제공합니다.하드웨어 레지스터는 판독 시 기입된 값을 반환하지 않습니다.이 문제는 레지스터에 마지막으로 기록된 값을 저장하는 장소로 일반 RAM에 구현된 운영 체제 섀도 레지스터에 의해 해결됩니다.OS 섀도우 레지스터는 수직 공백 중에 RAM에서 하드웨어 레지스터로 복사됩니다.따라서 대응하는 섀도 레지스터가 있는 하드웨어 레지스터에 대한 쓰기는 다음 수직 공백 중에 섀도 레지스터의 값에 의해 덮어씁니다.
일부 쓰기 하드웨어 레지스터에는 해당하는 섀도 레지스터가 없습니다.이러한 값은 수직 공백 중에 덮어쓰지 않고 응용 프로그램에서 안전하게 쓸 수 있습니다.출원인이 등록부의 마지막 상태를 알 필요가 있는 경우, 출원인이 기입한 내용을 기억하는 것은 출원의 책임이다.
또한 일부 읽기 레지스터에는 디스플레이 사이클의 알 수 없는 단계에서 하드웨어에서 직접 값을 읽으면 일관성 없는 결과가 반환될 수 있습니다.
이름. | 묘사 | 읽기/쓰기 | 16진수 주소 | 12월 주소 | 섀도 이름 | 섀도 16진수 주소 | 섀도 데크 어드레스 |
---|---|---|---|---|---|---|---|
DMACTL | 다이렉트 메모리 액세스 제어 | 기입하다 | D400달러 | 54272 | SDMCTL | $022F | 559 |
챠쿠토 | 문자 제어 | 기입하다 | D401달러 | 54273 | 차트 | 02F3달러 | 755 |
리스트 | 목록 포인터 표시(낮은 바이트) | 기입하다 | D402달러 | 54274 | SDLSTL | $0230 | 560 |
DLISH | 목록 포인터 표시(하이바이트) | 기입하다 | D403달러 | 54275 | SDLSTH | $0231 | 561 |
HSCROL | 수평 미세 스크롤 | 기입하다 | D404달러 | 54276 | |||
VSCROL | 세로 방향 미세 스크롤 | 기입하다 | D405달러 | 54277 | |||
PMBase | 플레이어/미사일 기본 주소 | 기입하다 | D407달러 | 54279 | |||
CHBASE | 문자 집합 기본 주소 | 기입하다 | D409달러 | 54281 | CHBAS | 02F4달러 | 756 |
동기 | 수평 동기화 대기 | 기입하다 | D40A달러 | 54282 | |||
카운트 | 세로줄 카운터 | 읽어주세요 | 400억달러 | 54283 | |||
펜 | 라이트 펜 수평 위치 | 읽어주세요 | D40C달러 | 54284 | LPENH | $0234 | 564 |
PENV | 라이트 펜 수직 위치 | 읽어주세요 | D40D달러 | 54285 | LPENV | $0235 | 565 |
NMIEN | Non-Maskable Interrupt(NMI; 마스크 불가능 인터럽트) 활성화 | 기입하다 | D40E달러 | 54286 | |||
NMires | Non-Maskable Interrupt(NMI; 마스크 불가능 인터럽트 | 기입하다 | D40F달러 | 54287 | |||
NMIST | Non-Maskable Interrupt(NMI; 마스크 불가능 인터럽트) 상태 | 읽어주세요 | D40F달러 | 54287 |
아래의 개별 레지스터 목록에는 다음과 같은 범례가 적용됩니다.
비트값 | 묘사 |
---|---|
0 | 비트는 0이어야 합니다. |
1 | 비트는 1이어야 합니다. |
? | 비트는 0 또는 1 중 하나이며 목적에 사용됩니다. |
- | 비트가 사용되지 않았거나 특정 값이 될 것으로 예상되지 않습니다. |
라벨. | 비트의 목적에 대해서는, 이후의 설명을 참조해 주세요. |
DMACTL $D400 쓰기
섀도: SDMCTL $022F
다이렉트 메모리 액세스(DMA) 제어
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
- | - | 목록 표시 DMA | 플레이어 미사일 해상도 | 플레이어 DMA | 미사일 DMA | 플레이필드 폭 | 플레이필드 폭 |
DMACTL은 Playfield 그래픽 및 Player-Missile(스프라이트) 그래픽에 대한 안티크의 DMA 동작을 제어합니다.
플레이필드 폭 비트 값:
플레이필드 폭 비트 [1:0] | 묘사 | 크기 |
---|---|---|
0 0 = $00 | 플레이필드 비활성화 | |
0 1 = $01 | 좁은 운동장 | 128컬러클럭/256고해상도 |
1 0 = $02 | 일반 플레이필드 | 160 컬러 클럭/320 고해상도 픽셀 |
1 1 = $03 | 넓은 운동장 | 192 색 클럭/384 고해상도 픽셀 |
Playfield 디스플레이에 대한 Display List DMA 비트도 참조하십시오.
플레이어/미사일 DMA 비트 값:
플레이어/미사일 DMA 비트 [3:2] | 묘사 |
---|---|
0 0 = $00 | 플레이어 및 미사일 DMA 비활성화 |
0 1 = $04 | 미사일 DMA를 유효하게 하다 |
1 0 = $08 | Player DMA를 유효하게 하다 |
1 1 = $0C | 플레이어 및 미사일 DMA 사용 |
ATIC의 Player/Missile DMA 기능은 메모리에서 바이트를 읽어 데이터를 전송하고 CTIA/GTIA의 GRAFP0, GRAFP1, GRAFP2, GRAFP3, GRAFM 그래픽 패턴 레지스터를 업데이트하여 CPU가 Player/Missile DMA(그래픽스프라이트)를 생성하지 않도록 합니다.이 비트는 플레이어 데이터와 비산물 데이터를 CTIA/GTIA로 전송하는 ATCI의 전원을 켭니다.또한 플레이어/Missile DMA가 예상대로 작동하려면 CTIA/GTIA가 GRACTL 레지스터를 통해 데이터를 수신하도록 구성해야 합니다.
플레이어 DMA를 활성화하면 DMA 타이밍을 일관되게 유지하기 위해 Missile DMA가 자동으로 발생하지만 데이터는 Masile의 GRAFM 레지스터로 전달되지 않습니다.
활성화되면 플레이어/미사일 DMA가 스캔 라인 8부터 247까지 가시 디스플레이의 모든 스캔 라인에서 발생합니다.따라서 스캔 라인 수 위아래 메모리 맵의 플레이어/미사일 데이터(ANTIC의 PMBASE 참조)는 사용되지 않고 표시되지 않습니다.
플레이어/미사일 해상도 비트 값:
- $00 - 더블 라인 해상도.ATCI는 다른 스캔 라인마다 DMA 가져오기 주소를 업데이트하고 CTIA/GTIA Player/Missile Graphics 패턴을 업데이트하여 각 플레이어/Missile 바이트 패턴의 높이가 두 스캔 라인 높이가 되도록 합니다.Double line resolution이 활성화된 경우 CTIA/GTIA 레지스터hex VDELAY($D01C/5327dec)는 짝수 스캔 라인의 업데이트를 마스킹하여 작동하여 개별 플레이어 및 비산물의 비트 패턴을 스캔 라인 아래로 이동합니다.
- 10달러 - 싱글 라인 해상도DMA 가져오기 및 플레이어/Missile 레지스터 업데이트는 모든 스캔 라인에서 발생합니다.짝수 스캔 라인의 업데이트를 마스킹하는 CTIA/GTIA 레지스터 VDELAY($D01Chex/53276dec)는 단일 라인 분해능을 이중 라인 분해능으로 효과적으로 낮춥니다.
분해능에 관계없이 각 스캔 라인에서 ACTICT DMA 및 Player/Missile 패턴 레지스터 업데이트가 발생합니다.Double Line Resolution(더블 라인 해상도)이 유효하게 되어 있는 경우, 용장 DMA 페치간에 플레이어/Missile 메모리를 변경해, GRAF* 레지스터에 송신되는 패턴을 변경해, 외관상의 싱글 라인 해상도 플레이어/Missiles를 생성할 수 있습니다.
목록 DMA 비트 값 표시:
- $00 - 표시 목록을 비활성화합니다.
- $20 - [Enable Display]리스트를 유효하게 합니다.
Playfield 디스플레이를 사용하려면 Display List DMA를 활성화하고 Playfield 폭을 지정해야 합니다.어느 하나의 값이 0일 경우 플레이필드 디스플레이는 생성되지 않습니다.
CHACTL $D401 쓰기
그림: 차트 $02F3
문자 제어
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
- | - | - | - | - | 비디오 리플렉트 | 비디오 반전 | 비디오 블랭크 |
CHACTL은 문자 표시를 제어합니다.
문자 제어 비트 값은 다음 작업을 수행합니다.
특징 | 비트값 | 묘사 |
---|---|---|
비디오 블랭크 | $01 | 반전 비디오 문자는 공백으로 표시됩니다. |
비디오 반전 | $02 | 반전 비디오 문자는 반전 비디오로 표시됩니다.(디폴트) |
비디오 리플렉트 | $04 | 모든 문자가 수직으로 미러링되어 표시됩니다. |
CHACTL Video Inverse 비트와 Video Blank 비트는 높은 비트세트(80~FF)를 가진 ACTICT 텍스트모드 2 및3 의 문자의 표시에 영향을 줍니다.CHACTL 비트 값을 전환하면 디스플레이 전체에서 이러한 문자가 전체적으로 깜박이거나 비워집니다.
Video Inverse 와 Video Blank 를 동시에 유효하게 하면, 반전 비디오 문자가 반전 공백으로서 표시됩니다.비디오 반전 비트와 비디오 블랭크 비트는 안티콘 모드2 및 3으로 동작하며 다른 텍스트모드 4, 5, 6, 및7에는 영향을 주지 않습니다.
비디오 리플렉트 비트는 모든 텍스트 모드에 영향을 줍니다.Video Reflect는 새로운 문자 집합을 정의하지 않고 미러링 효과를 필요로 하는 경우에 유용합니다.정장을 거꾸로 한 정확한 카드 면을 보여주는 카드 게임이 이상적입니다.이는 글리프 데이터를 사용하기 전에 수직으로 미러링하기 때문에 하향 영역 하단에 글리프 바이트 6 및 7이 나타나는 ATCI Mode 3 하위 항목에 대해 일관성이 없는 것으로 보입니다.
DLISTL/DLISTH $D402/$D403 쓰기
섀도: SDLSTL/SDLSTH $0230/$0231
목록 포인터 표시
비트 15 | 비트 14 | 비트 13 | 비트 12 | 비트 11 | 비트 10 | 비트 9 | 비트 8 | 비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? | ? |
안티키는 레지스터 DLISTL/DLISTH(D402-D403hex/54274-54275dec)에서 16비트주소로 지정된 표시목록 실행을 시작합니다.주소 레지스터는 디스플레이 목록 실행 중에 ATCI의 JMP(점프) 및 JVB(점프 후 수직 공백 대기)에 의해 업데이트됩니다.주소는 섀도 레지스터 SDLSTL/SDLSTH(0230-0231hex/560-561dec)의 값을 사용하여 운영 체제의 VBI(Vertical Blank Interrupt) 루틴에서도 업데이트됩니다.
OS Vertical Blank Interrupt 가 유효하게 되어 있는 경우, CPU 에 의한 ACTIUS DLIST 레지스터에 대한 직접 갱신이나 ACTIUS Jump 명령은 섀도 레지스터의 값에 의해 다음 Vertical Blank 중에 OS 에 의해 덮어쓰게 됩니다.따라서 Vertical Blank 인터럽트가 비활성화되지 않는 한 연속적으로 다음 표시 목록을 가리키는 표시 목록에 의해 구현된 페이지 플립은 예상대로 작동하지 않습니다.
HSCROL $D404 쓰기
수평 미세 스크롤
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
— | — | — | — | ? | ? | ? | ? |
이 레지스터는 컬러 클럭에서 수평 미세 스크롤 시프트의 거리를 지정합니다.하위 4비트만 유효합니다.16개의 컬러 클럭의 값 범위를 통해 ATCI는 Mode 2 Text 4글자, Mode 6 Text 2글자는 거친 스크롤이 필요하기 전에 거친 스크롤이 필요합니다.
모드 라인에 대해 수평 스크롤이 활성화된 경우, ATCI는 수평 스크롤 제어의 대상이 되는 데이터의 버퍼를 제공하기 위해 현재 화면 폭보다 큰 다음 크기 증가를 가져옵니다.Narrow width를 표시할 때 Normal width에 필요한 화면 RAM을 가져옵니다.마찬가지로 Normal width의 경우 Wide에 필요한 화면 RAM을 가져옵니다.
안티크는 화면 메모리에서 읽은 첫 번째 몇 바이트를 버퍼링합니다.이것은 16색 클럭의 이동 범위를 커버하기에 충분한 양입니다.(디스플레이 모드에 따라 2 ~4바이트).HSCROL 값은 버퍼링된 마지막 바이트의 마지막(오른쪽 가장 오른쪽) 컬러 클럭에서 시작하여 왼쪽으로 진행하는 컬러 클럭 수를 지정합니다.HSCROL이 0인 경우 컬러 클럭은 버퍼에서 출력되지 않으므로 표시되는 첫 번째 화면 바이트는 버퍼된 데이터 이후의 첫 번째 바이트입니다.HSCROL이 증가하면 버퍼링된 데이터가 디스플레이 왼쪽 가장자리에 추가되어 미세한 스크롤 시프트가 화면 내용을 오른쪽으로 이동합니다.
안티크 모드 F(고해상도, 1/2컬러 클럭 픽셀)는 HSCROL이 컬러 클럭을 지정하기 때문에 한 번에 2픽셀만 스크롤할 수 있습니다.
대체 GTIA 색상 해석을 사용하는 안티키 모드는 전체 GTIA 픽셀(2색 클럭)로 스크롤해야 합니다.올바른 스크롤을 위해서는 짝수 값만 사용해야 합니다.HSCROL의 홀수 값은 픽셀 스트림을 GTIA가 다른 색상으로 해석하는 다른 상태로 전환합니다.
많은 플랫폼과 달리 아타리의 수평 스크롤은 시각적으로 일관성이 있고 정확한 색상에 필요한 컬러 클럭 타이밍과 일치하는 픽셀 크기 때문에 색상 "스트로핑" 아티팩트가 없습니다.
VSCROL $D405 쓰기
세로 방향 미세 스크롤
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
— | — | — | — | ? | ? | ? | ? |
이 레지스터는 스캔 라인에서 수직 미세 스크롤의 거리를 지정합니다.가장 낮은 4비트는 중요하지만 수직 스크롤 값은 0 ~ ANTIC 모드 라인의 스캔 라인 높이 - 1. ANTIC 모드의 스캔 라인 수보다 더 멀리 스크롤하면 반복된 데이터 라인이 미세한 스크롤 연속성을 방해합니다(단, 악용 가능한 동작으로도 사용될 수 있음).
수직 스크롤 영역은 표시 목록의 연속된 일련의 안티콘 모드 라인에 VS 비트($20)를 설정하여 정의합니다.VS 비트 세트가 없는 첫 번째 Mode 행은 스크롤 영역의 끝이 되며 스크롤 영역의 맨 아래까지 스크롤하기 위한 새로운 정보를 제공하기 위한 버퍼 행으로 사용됩니다.
수직 스크롤 값은 첫 번째 모드 라인에서 디스플레이를 시작할 스캔 라인 번호를 나타내며 마지막 모드 라인(VS 비트가 설정되지 않은 라인)에서 디스플레이를 종료하기 위한 스캔 라인 번호로도 사용됩니다.
예: 인접한 2개의 모드 라인에 VS 비트가 설정된 8개의 스캔 라인 안티크 모드(텍스트 모드 2, 4, 또는 6)가 있는 경우 스크롤 영역은 3개의 모드 라인으로 구성됩니다. 스크롤 영역의 세 번째 라인은 VS 비트가 설정되지 않은 첫 번째 모드 라인입니다.Display List(디스플레이 목록)에서 Vertical(수직) 스크롤이 설정되지 않은 경우 세 개의 Mode(모드) 라인에 24개의 스캔 라인이 표시됩니다.설명에 따라 VS 비트가 Display List Mode(디스플레이 목록 모드) 지침에 설정되고 VSCROL 값이 2로 설정된 경우 영역의 첫 번째 모드 라인이 스캔 라인 2에서 표시되기 시작하고(스캔 라인 6개 또는 VSCROL 8개), 두 번째 모드 라인이 완전히 표시되고(스캔 라인 8개) 최종 모드 라인이 스캔 라인 2에서 종료됩니다.스캔 라인 0 ~ 2(3개의 스캔 라인 또는 VSCROL + 1)를 표시합니다.그러면 스크롤 영역에 표시되는 총 스캔 라인은 6 + 8 + 3 = 17개 스캔 라인입니다.
미세 스크롤은 픽셀 높이가 아닌 스캔 라인을 기반으로 하며, 스크롤 영역 이동은 첫 번째 Mode 라인에서 스캔 라인을 건너뛰고 마지막 Mode 라인에 스캔 라인을 추가하는 것만으로 수행되므로 스크롤 영역 내에서 다른 그래픽 모드를 사용할 수 있습니다.따라서 스크롤 영역에서 현재 첫 번째 및 마지막 모드 라인에 대해 몇 개의 스캔 라인을 이동할 수 있는지 결정할 때 추가적인 주의가 필요합니다.
공백 모드 행 명령에는 본질적으로 수직 스크롤 수식자 비트가 없기 때문에 공백 모드 행은 스크롤 영역 내에 포함할 수 없습니다(공백 모드 행 명령에는 "일반" 플레이 필드 모드의 LMS, HS 및 VS 수식자로 기능하는 비트7 ~ 5를 사용하여 공백 행 수를 지정합니다).그러나 Blank Mode 명령을 사용하여 스크롤 영역을 종료할 수 있으며 수직 스크롤 값에 따라 예상되는 스캔 라인 높이가 변경될 수 있습니다.
PMBASE $D407 쓰기
플레이어 미사일 기지 주소
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
플레이어/Missile 그래픽의 기본 주소 페이지를 지정합니다.이중 라인 해상도 P/M 그래픽이 작동하는 경우 PMBASE 값은 1K 경계에서 시작해야 합니다.싱글 라인 해상도의 P/M 그래픽스가 동작하고 있는 경우, PMBASE 값은 2K 경계로부터 개시할 필요가 있습니다.
CHBASE $D409 쓰기
섀도: CHBAS $02F4
문자 베이스 주소
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
문자 집합의 기본 주소 페이지를 지정합니다.안티크 모드 2, 3, 4, 및5 에서는 문자 세트에 128 문자를 사용하기 때문에 CHBASE 값은 1K 경계에서 시작해야 합니다.안티크 모드6 및 7은 64자를 사용하기 때문에 CHBASE 값은 512바이트 경계에서 시작해야 합니다.
통상, 디폴트치는, ROM 의 문자 세트의 경우hex $E0dec/224 입니다.이 값은 $E000hex/57344dec 입니다.
WSYNC $D40A 쓰기
수평 동기화 대기
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
이 레지스터를 사용하면 프로그램이 디스플레이에 동기화할 수 있습니다.이 레지스터에 쓰기를 수행하면 6502 프로그램이 현재 스캔 라인의 끝에 중단됩니다.이 동작은 Display List Interrupts(표시 목록 인터럽트) 중에 스캔 라인 간에 깨끗한 전환/변경을 생성하는 데 일반적으로 사용됩니다.기재된 값은 중요하지 않습니다.
V카운트 400억 달러 읽기
세로줄 카운터
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
이 레지스터는 현재 생성되고 있는 스캔 라인을 추적합니다.반환되는 값은 실제 스캔 라인을 2로 나눈 값입니다.표시 시작 시 생성된 공백 줄이 포함됩니다.NTSC 값은 NTSC의 경우 0 ~130, PAL의 경우 0 ~155입니다이 값은 디스플레이 목록 인터럽트 중에 수직 화면 위치를 식별하는 데 유용합니다.
PENH $D40C 읽기
섀도: LPENH $0234
라이트 펜 수평 위치
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
여기에는 라이트 펜/라이트 건 트리거를 눌렀을 때의 수평 색상 시계 위치가 포함됩니다.섀도 레지스터는 수직 공백 중에 업데이트되므로 일관되고 신뢰할 수 있는 결과를 보장하므로 이 정보를 읽는 데 권장되는 소스입니다.값이 유효한 것을 보증하는 동시에 레지스터를 읽을 수 있는 것이 확실하지 않은 한 프로그램은 하드웨어 레지스터를 직접 읽지 않도록 해야 합니다.아타리용 라이트 건은 광학식 돋보기 추가와 함께 라이트 펜과 같은 기능을 하며 화면을 더 멀리서도 읽을 수 있습니다.라이트 펜/라이트 건 입력 장치에는 스캔 전자 빔을 사용하는 기존의 CRT가 필요합니다.라이트 펜/라이트 건은 최신 LCD TV 및 모니터에서는 사용할 수 없습니다.
PENV $D40D 읽기
섀도: LPENV $0235
라이트 펜 수직 위치
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
여기에는 라이트 펜/라이트 건 트리거를 누를 때 캡처되는 VCOUNT 값이 포함됩니다.섀도 레지스터는 수직 공백 중에 업데이트되므로 일관되고 신뢰할 수 있는 결과를 보장하므로 이 정보를 읽는 데 권장되는 소스입니다.값이 유효한 것을 보증하는 동시에 레지스터를 읽을 수 있는 것이 확실하지 않은 한 프로그램은 하드웨어 레지스터를 직접 읽지 않도록 해야 합니다.아타리용 라이트 건은 광학식 돋보기 추가와 함께 라이트 펜과 같은 기능을 하며 화면을 더 멀리서도 읽을 수 있습니다.라이트 펜/라이트 건 입력 장치에는 스캔 전자 빔을 사용하는 기존의 CRT가 필요합니다.라이트 펜/라이트 건은 최신 LCD TV 및 모니터에서는 사용할 수 없습니다.
NMIEN $D40E 기입
Non-Maskable Interrupt(NMI; 마스크 불가능 인터럽트) 활성화
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
DLI | VBI | 리셋 | - | - | - | - | - |
NMIEN은 Non-Maskable Interrupts를 이노블로 합니다.비트 값:
특징 | 비트값 | 묘사 |
---|---|---|
리셋 | $20 | 리셋 키 인터럽트를 유효하게 하다 |
VBI | $40 | 수직 공백 인터럽트를 유효하게 하다 |
DLI | $80 | 표시 목록 인터럽트 사용 |
작동 시스템은 전원 켜기 루틴 중에 NMIEN을 기본 $40hex/64로dec 설정합니다.NMI 서비스 루틴은 먼저 $FFFAhex/65530을dec 통해 원인을 파악한 후 인터럽트 서비스 루틴으로 제어를 전환합니다.
DLI:
안티C가 DLI 수정자 비트를 설정한 디스플레이 목록 명령을 발견한 경우 NMIEN의 DLI 비트가 설정된 경우, 안티C는 해당 디스플레이 목록 명령 모드 라인의 마지막 스캔 라인에서 DLI를 트리거합니다.
오퍼레이팅시스템은 DLI 를 사용하지 않기 때문에, DLI 벡터(VDSLST, $0200hex/512dec)의 디폴트주소는 ROM 의 RTI 명령을 나타내고 있습니다.DLI를 사용하는 애플리케이션은 DLI를 활성화하기 전에 VDSLST를 원하는 DLI 루틴을 가리키도록 변경해야 합니다.
6502 어큐뮬레이터, X 및 Y 레지스터 내용은 DLI 루틴에 들어가기 전에 보존되지 않습니다.DLI 루틴은 DLI 루틴에서 사용되는 레지스터의 상태를 저장한 다음, 마지막 액션은 RTI 명령을 사용하여 종료하기 전에 레지스터의 원래 값을 복원하는 것입니다.루틴은 일반적으로 레지스터 값을 6502 스택에 푸시합니다.
여러 DLI를 사용하는 경우 첫 번째 인터럽트는 다음 인터럽트의 주소를 가리키도록 VDSLST를 업데이트하고, 그 다음 인터럽트에 대해서도 마찬가지입니다.화면의 마지막 Display List Interrupt 루틴은 VDSLST를 첫 번째 Display List Interrupt 주소로 되돌립니다.또는 VDSLST 주소를 리셋하기 위해 Vertical Blank Interrupt 루틴을 사용하여 DLI가 화면과 동기화 상태를 유지하도록 할 수 있습니다.
VBI:
NMIEN의 VBI 비트가 설정되면 디스플레이 목록 끝에 있는 JVB(점프 수직 공백) 처리 종료 시 안티C가 수직 공백 인터럽트를 신호로 보냅니다.운영체제는 Vertical Blank를 사용하여 다양한 집안일을 수행합니다(타이머 업데이트, 컨트롤러 입력값 섀도 레지스터 복사, 섀도 레지스터 콘텐츠 커스텀 칩 하드웨어 레지스터 복사 등).
OS는 VVBLKI ($0222hexdec/546)를 통해 OS VBI 서비스 루틴을 시작하고 OS VBI 루틴은 VVBLKDhex ($0224/548dec)를 통해 종료됩니다.디폴트로는 VVBLKI는 OS 점프 벡터 SYSVBV($E45Fhexdec/58463)를 포인트로 하고 VVBLKD는 OS 점프 벡터 XITVBV($E462hex/58466dec)를 포인트로 합니다.
사용자 프로그램은 운영 체제의 Vertical Blank Interrupt 루틴 앞(즉시) 또는 뒤에(지연) 커스텀 코드 실행을 삽입할 수 있습니다.사용자 프로그램이 벡터를 업데이트하는 동안 OS Vertical Blank 인터럽트가 호출될 수 있으므로 운영체제는 새로운 루틴을 가리키도록 VVBLKI 또는 VVBLKD 벡터를 안전하게 업데이트하는 SETVBV($E45Chex/58460dec)를 제공합니다.
- VVBLKI(즉시)에 대한 새 점프 대상을 설정하려면 Y 레지스터를 대상 주소의 낮은 바이트로, X 레지스터를 대상 주소의 높은 바이트로, 누적기를 6으로 설정한 다음 JSR SETVBV로 설정합니다.VVBLKI를 통해 호출된 사용자 코드는 JMP SYSVBV($E45Fhex/58463dec)를 사용하여 OS Vertical Blank로 이동하기만 하면 됩니다.
- VVBLKD(지연)에 대한 새 점프 대상을 설정하려면 Y 레지스터를 대상 주소의 낮은 바이트로, X 레지스터를 대상 주소의 높은 바이트로, 누적기를 7로 설정한 다음 JSR SETVBV로 설정합니다.VVBLKD를 통해 호출된 사용자 코드는 JMP XITVBV($E462hex/58466dec)를 사용하여 OS Vertical Blank 종료 루틴으로 점프하여 종료해야 합니다.
CRITITION 플래그(42dec/66)가hex 0이 아닌 경우 지연 수직 공백 인터럽트의 실행은 벡터 내의 주소에 관계없이 억제됩니다.기본값인 CRITIT 0을 사용하면 즉시 및 지연된 수직 공백 인터럽트를 모두 실행할 수 있습니다.
NMIRES $D40F 쓰기
Non-Maskable Interrupt(NMI; 마스크 불가능 인터럽트
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
NMIRES에 입력된 값은 최신 Non-Maskable Interrupt의 원인을 나타내는 NMIST의 비트를 리셋합니다.이는 OS의 인터럽트 디스패치 코드에 의해 사용되며 일반적으로 사용자 프로그램이 여기에 쓸 이유는 없습니다.
NMIST $D40F 읽기
Non-Maskable Interrupt(NMI; 마스크 불가능 인터럽트) 상태
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
DLI | VBI | 리셋 | - | - | - | - | - |
운영 체제의 Non-Maskable Interrupt 디스패치 루틴은 이 레지스터를 읽고 인터럽트의 이유와 실행할 서비스 루틴을 결정합니다.
비트 값:
- $20 - 키 인터럽트 리셋
- $40 - 수직 공백 인터럽트
- $80 - 목록 표시 인터럽트
표시 목록
Display List(표시 목록)는 디스플레이 생성 방법을 안티크에게 지시하는 명령 또는 프로그램 목록입니다.이 표시 목록 "프로그램"에 의해 처리되는 데이터가 화면 메모리입니다.출력은 그래픽 디스플레이입니다.출력의 그래픽 종류(텍스트와 주소 지정 가능한 픽셀)는 표시 목록의 지침에 따라 결정됩니다.
디스플레이 리스트와 디스플레이 데이터는 CPU에 의해 RAM에 기록됩니다.ANTIC는 다이렉트메모리 액세스(DMA)라고 불리는 기술을 사용하여 RAM에서 디스플레이 리스트 명령, 화면 메모리 및 문자 세트 정보를 읽습니다.BASIC 또는 6502 기계어 프로그램의 역할은 디스플레이를 초기화하는 것입니다.표시 목록 명령을 설정하고 화면 메모리(및 해당하는 경우 문자 세트)를 구성한 다음 안티키에게 디스플레이를 시작하도록 지시합니다.그 후, 자동적으로 화면 표시를 생성한다.이를 통해 Atari 8비트 컴퓨터는 CPU의 직접적인 개입 없이 복잡한 혼합 모드 디스플레이를 생성할 수 있습니다.다른 플랫폼, 심지어 훨씬 나중에 설계된 플랫폼도 하나의 디스플레이에 그래픽 모드를 혼재시킬 수 없거나 복잡한 CPU 인터럽트 없이 혼재시킬 수 없습니다.
안티크는 디스플레이 목록의 명령을 처리하여 화면 메모리(및 해당하는 경우 문자 세트 데이터)를 읽고 이 정보를 그래픽 데이터의 실시간 스트림으로 변환하여 이 데이터 스트림을 CTIA/GTIA 칩으로 전송합니다.CTIA/GTIA 칩은 그래픽 픽셀에 색상을 적용하여 비디오를 출력합니다.2개의 칩을 조합하여 6개의 텍스트 모드와 8개의 그래픽 모드(합계 14개)를 제공합니다.고급 버전인 GTIA는 각 ATCI 그래픽 모드에 대해 3가지 색상 해석을 추가하여 총 56(14×4)의 그래픽 모드를 제공합니다.단, 반색 클럭 화소에 근거한 안티크 그래픽스 모드만이 새로운 색 해석에 의해 제공되는 완전한 색 팔레트를 표현할 수 있으며, 그 중 사용하기 쉬운 것은 안티크 모드 2(OS 그래픽스 모드 0 텍스트)와 안티크 모드 F(OS 그래픽스 모드 8)이다.따라서 안티키 + CTIA/GTIA 고유의 하드웨어 기능을 사용하여 사용할 수 있는 고유 그래픽 모드의 적절한 수는 20–14개의 안티키 모드 + 안티키 모드 2와 F 각각에 대해 3개의 추가 색상 해석입니다.
목록 표시 명령의 개요
Atari 디스플레이는 원하는 디스플레이 영역이 채워질 때까지 화면 상단에서 하단으로 텍스트 또는 그래픽 모드를 순서대로 설명하는 일련의 안티키 명령으로 구성됩니다.실제로 화면은 ACTIPS 모드 명령의 수직 스택입니다.모드에 따라 스캔 라인 수가 다르며 RAM 용량도 다릅니다.디스플레이를 설계하려면 각 Mode 명령의 스캔 라인을 카운트하고 각 Mode 라인의 메모리를 추적하여 안티키 또는 비디오 표준 제한을 초과하지 않도록 해야 합니다.('제한사항' 섹션을 참조하십시오).
화면상의 원하는 위치에 다른 문자 또는 지도 모드 명령을 제공하는 것만으로 여러 그래픽 모드를 하나의 디스플레이에 혼재시킬 수 있습니다.예를 들어, Atari 운영 체제 그래픽 모드 1 ~ 8은 전체 화면 디스플레이를 제공하거나 화면 하단의 4줄 텍스트 창을 위한 옵션을 제공합니다.이 분할 화면 기능은 CPU 인터럽트나 비디오하드웨어의 커스텀 조작 없이, ATCI와 그 표시 리스트의 고유의 기능을 사용해 실현됩니다.
안티크에는 다음 4가지 유형의 명령이 있습니다.
- 공백 행 - 1 ~ 8개의 수평 공백 행에서 8개의 명령을 표시합니다.
- 점프 명령 - 안티티의 프로그램 카운터를 다시 로드하는 2종류의 점프 명령(3바이트 명령)
- 문자 모드 - 문자 데이터를 표시하기 위한 6가지 명령
- 지도 모드 - 색칠된 픽셀을 표시하기 위한 8가지 명령
지도 및 문자 모드 명령에는 다음 명령으로 활성화할 수 있는 추가 수식어가 있습니다.
- 수평 스크롤 - 수평 미세 스크롤 가능
- 수직 스크롤 - 수직 미세 스크롤 가능
- LMS(Load Memory Scan) - 그래픽/문자 데이터의 시작 주소를 설정합니다(3바이트 명령).
- DLI - Display List Interrupt (다른 시스템에서는 "래스터 인터럽트" 또는 "수평 블랭크 인터럽트"라고 불립니다)
명령 실행
안티키는 레지스터 DLISTL/DLISTH($D402-$D403hex/54274-54275dec)에서 16비트주소로 지정된 표시목록 실행을 시작합니다.주소 레지스터는 각 명령이 실행될 때마다 자동으로 ATCI에 의해 증가합니다.ACTIUS는, 표시 리스트가 1K 주소 범위내에서 개시 및 종료하도록 제한하는 자동 증분중에 주소의 최하위 10비트만을 갱신할 수 있습니다.
또한 레지스터는 ATCI의 JMP(점프) 및 JVB(점프 후 수직 블랭크 대기)에 의해 Display List 실행 중에 업데이트됩니다.이러한 명령은 주소의 전체 16비트를 로드하므로 1K 표시 목록 제한을 회피하는 데 사용할 수 있습니다.
이 주소는 운영체제섀도 레지스터 SDLSTL/SDLSTH(0230-$0231hex/560-561dec) 값을 사용하여 운영체제의 VBI(Vertical Blank Interrupt) 루틴에서도 업데이트됩니다.OS VBI 루틴이 활성화되면 CPU에 의해 안티키 DLIST 레지스터에 직접 업데이트되거나 다음 Vertical Blank에서 안티키 점프 명령이 OS에 의해 덮어쓰게 됩니다.VBI 처리는 시스템의 통상적인 상태이기 때문에 대부분의 프로그램은 이에 의존하며 OS 섀도우 레지스터(SDLSTL/SDLSTH $0230-$0231hex/560-561dec)만 업데이트하여 표시 목록을 설정합니다.
명령 바이트
이 범례는 다음 명령 비트 다이어그램에 적용됩니다.
비트값 | 묘사 |
---|---|
0 | 비트는 0이어야 합니다. |
1 | 비트는 1이어야 합니다. |
? | 비트는 0 또는 1 중 하나이며 목적에 사용됩니다. |
— | 비트가 사용되지 않았거나 특정 값이 될 것으로 예상되지 않습니다. |
라벨. | 비트의 목적에 대해서는, 이후의 설명을 참조해 주세요. |
명령 비트:
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
DLI | LMS | 대 | HS | 모드 | 모드 | 모드 | 모드 |
비트 7:4는 비트 3:0의 Playfield Mode 명령에 대한 수정자입니다.비트 값 1 수식자를 활성화하고 0을 지정하면 수식자를 비활성화합니다.
- 비트 3:비트 0 - 플레이필드 모드 설명.
- 가치$00, $01은 특별지시입니다.
- 모드 값 $02 ~ $0F는 플레이필드 캐릭터 및 맵모드를 지정합니다.
- 비트 4 - $10 - 수평 스크롤.
- 비트 5 - 20달러 - 세로 스크롤
- 비트 6 - 40달러 - Load Memory Scan(메모리 스캔 로드).
- 비트 7 - $80 - Display List Interrupt.
모드 0 명령 - 공백 행
DLI | 줄들 | 줄들 | 줄들 | 모드 | 모드 | 모드 | 모드 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | 0 | 0 | 0 | 0 |
모드 비트가 모두 0일 때 안티키는 플레이필드 DMA를 수행하지 않고 배경색의 하나 이상의 빈 스캔 라인을 표시합니다.일반 색상 해석 모드의 경우 "배경"은 컬러 레지스터 COLBK(D01Ahex/53274dec) OS 섀도우 COLOR4(02C8hex/712dec)입니다. 단, 이는 GTIA 색상 해석 모드에 따라 다릅니다.상세한 것에 대하여는, GTIA 페이지의 「COLBK」의 설명을 참조해 주세요.
빈 스캔 라인 수는 비트 4 ~ 비트 6의 값으로 지정되며, 0 ~ 7의 범위가 허용됩니다. 안티C는 이 값에 1을 더하고 결과 스캔 라인 수를 표시합니다.명령 값:
안티키 명령 | 스캔 라인 |
---|---|
00hex/0dec | 빈 스캔 라인 1개 |
10hex/16dec | 2개의 빈 스캔 라인. |
20hex/32dec | 3개의 빈 스캔 라인. |
30hex/48dec | 4개의 빈 스캔 라인. |
40hex/64dec | 5개의 빈 스캔 라인. |
50hex/80dec | 6개의 빈 스캔 라인. |
60hex/96dec | 7개의 빈 스캔 라인. |
70hex/112dec | 8개의 빈 스캔 라인. |
빈 선은 전자 빔이 디스플레이 상단의 수직 오버스캔 영역을 벗어날 때까지 화면 디스플레이 시작을 지연시키는 데 유용합니다.Atari 운영체제는 이를 위해 70/112dec 명령 3개hex(또는 빈 스캔 라인 24개)부터 모든 그래픽 모드를 만듭니다.또한 빈 선은 다른 목적을 가진 사용자 정의 디스플레이의 일부를 분할할 때에도 유용합니다(즉, 상태 디스플레이와 메인 그래픽 사이의 경계).
Blank Mode 라인 명령에는 기본적으로 Fine Scrolling Modifier 비트가 없기 때문에 Blank Mode 라인은 스크롤 영역 내에 포함할 수 없습니다.그러나 Blank Mode 명령을 사용하여 수직 스크롤 영역을 종료할 수 있으며 여전히 수직 스크롤 값에 따라 예상되는 스캔 라인 높이가 변경됩니다.
DLI 수식 비트는 공백 행 명령에 사용할 수 있습니다.DLI 비트가 활성화되면 지시의 마지막 빈 스캔 라인 중에 Display List Interrupt가 트리거됩니다.플레이필드 DMA는 공백 라인(표시 리스트 DMA 및 플레이어/미실패 DMA(활성화된 경우)만 발생) 중에는 발생하지 않으므로 디스플레이 리스트 인터럽트 루틴이 컬러 레지스터 또는 플레이어/미실패 위치를 변경하는 데 더 많은 시간을 할애할 수 있는 플레이필드 그래픽이 필요하지 않은 경우 빈 라인을 사용할 수 있습니다.
모드 1 명령 - 점프
DLI | LMS | 대 | HS | 모드 | 모드 | 모드 | 모드 |
---|---|---|---|---|---|---|---|
0 | ? | 0 | 0 | 0 | 0 | 0 | 1 |
Mode 값이 1일 때 안티키는 프로그램(표시 목록)에서 점프를 실행합니다.표시 목록의 다음 2바이트는 안티키 레지스터 DLISTL/DLISTH($D402-$D403hex/54274-54275dec)에 로드되어 다음 명령의 실행 지점을 변경합니다.
점프에는 두 가지 종류가 있다.
- 01hex/1dec JMP - 주소로 점프.일반적으로 표시 목록이 1K 경계를 넘어야 하는 경우 표시 목록 실행 중간에 새 실행 주소를 로드하기 위해 사용됩니다.
- 41hex/65dec JVB - 점프로 이동하여 Vertical Blank(수직 블랭크)를 기다립니다.(JMP + LMS 비트 설정)이 명령을 사용하여 표시 목록을 종료합니다.사용하는 주소는 표시 목록의 시작 주소여야 합니다.
DLIST 레지스터는 섀도 레지스터 SDLSTL/SDLSTH(0230-0231hex/560-561dec)의 값을 사용하여 운영 체제의 VBI(Vertical Blank Interrupt) 루틴에 의해서도 업데이트됩니다.OS VBI 루틴이 활성화되면 CPU에 의해 안티키 DLIST 레지스터에 직접 업데이트되거나 다음 Vertical Blank에서 안티키 점프 명령이 OS에 의해 덮어쓰게 됩니다.이것은 무효 주소(또는 섀도 SDLST 값과 다른 유효한 주소)를 지정하는ANTIC JVB(Jump and wait for Vertical Blank) 명령이 디스플레이에 실제로 영향을 미치지 않음을 의미합니다.
JVB의 인수는 보통 동일한 표시 목록의 시작을 가리키지만 다른 표시 목록을 가리킬 수도 있으므로 연속된 수직 공백 후에 표시 목록의 체인이 실행됩니다.물론 다음 표시 목록의 시작에 대한 안티키 제어 권한을 부여하려면 OS Vertical Blank 인터럽트를 비활성화하여 섀도 레지스터 값으로 안티키 하드웨어 레지스터를 덮어쓰지 않도록 해야 합니다.
모드 2 ~ F 명령 - 플레이필드 문자 및 지도 모드
DLI | LMS | 대 | HS | 모드 | 모드 | 모드 | 모드 |
---|---|---|---|---|---|---|---|
? | ? | ? | ? | ? | ? | ? | ? |
다음은 ATCI 그래픽스 모드 지침 목록입니다.각 모드에 대한 자세한 내용은 "Playfield Graphics Modes" 섹션을 참조하십시오.
안티키 명령 | 모드 타입 | 모드 라인당 바이트 수(좁음/보통/넓음) | 모드 라인당 TV 스캔 라인 수 | 색. |
---|---|---|---|---|
2 | 성격 | 32/40/48 | 8 | 1.5 |
3 | 성격 | 32/40/48 | 10 | 1.5 |
4 | 성격 | 32/40/48 | 8 | 5 (멀티컬러) |
5 | 성격 | 32/40/48 | 16 | 5 (멀티컬러) |
6 | 성격 | 16/20/24 | 8 | 5 (단색) |
7 | 성격 | 16/20/24 | 16 | 5 (단색) |
8 | 지도 | 8/10/12 | 8 | 4 |
9 | 지도 | 8/10/12 | 4 | 2 |
A | 지도 | 16/20/24 | 4 | 4 |
B | 지도 | 16/20/24 | 2 | 2 |
C | 지도 | 16/20/24 | 1 | 2 |
D | 지도 | 32/40/48 | 2 | 4 |
E | 지도 | 32/40/48 | 1 | 4 |
F | 지도 | 32/40/48 | 1 | 1.5 |
모드 라인의 메모리 요건은 다음 두 가지 요인에 의해 결정됩니다.
수평 미세 스크롤 수정자는 현재 모드 라인의 메모리 요구 사항을 DMACTL 지정 너비에서 다음으로 큰 값으로 변경합니다.
명령 수식자
비트 7 | 비트 6 | 비트 5 | 비트 4 | 비트 3 | 비트 2 | 비트 1 | 비트 0 |
---|---|---|---|---|---|---|---|
DLI | LMS | 대 | HS | ? | ? | ? | ? |
비트 7:4는 비트 3:0의 Playfield Mode 명령에 대한 수정자입니다.Playfield Mode Instruction 값은 $02 ~ $0F입니다.Modifier bit value 1 수식자를 활성화하고 0을 지정하면 수식자를 비활성화합니다.
- 비트 4 - $10hex/16dec 수평 스크롤
- 비트 5 - $20hex/32dec 세로 스크롤
- 비트 6 - $40hex/64dec 메모리 스캔 로드
- 비트 7 - $80hex/128dec 디스플레이 목록 인터럽트.
HS Modifer - 수평 미세 스크롤
비트 4: 위치 값 $10, 플레이필드 모드의 수평 스크롤을 제어합니다.
수평 스크롤이 활성화된 경우, 행의 시작과 끝에 부분적으로 스크롤된 디스플레이 바이트를 표시하기 위해 안티키는 표시된 것보다 더 많은 화면 메모리 바이트를 검색합니다.디스플레이가 좁은 모드일 경우, 일반 모드에 필요한 화면 바이트 수를 가져옵니다.디스플레이가 일반 모드인 경우 ATCI는 와이드 스크린 모드에 필요한 바이트 수를 가져옵니다.와이드 스크린 모드에서는, 안티키는 추가의 스크린 바이트를 취득하지 않습니다.와이드 스크린으로 스크롤하면 공백 데이터가 스크롤된 영역으로 이동합니다.이는 일반 NTSC/PAL 디스플레이에서는 볼 수 없는 오버스캔 영역에서 발생하기 때문에 문제가 되지 않습니다.
VS 수정자 - 수직 미세 스크롤
비트 5: 위치 값 $20, Playfield 모드의 수직 스크롤을 제어합니다.
디스플레이의 수직 스크롤 영역은 디스플레이 목록에 있는 일련의 안티콘 모드 라인에 VS 비트($20)를 설정하여 정의합니다.VS 비트 세트가 없는 첫 번째 Mode 행은 스크롤 영역의 끝이 되며 스크롤 영역의 맨 아래까지 스크롤하기 위한 새로운 정보를 제공하기 위한 버퍼 행으로 사용됩니다.
LMS Modifer - Load Memory Scan(메모리 스캔 로드)
비트 6: 위치 값 $40, 현재 Playfield 모드 라인의 화면 메모리 시작을 위한 새 주소를 로드합니다.
LMS 옵션은 지침에 따라 16비트 값을 2바이트로 하여 안티크의 화면 메모리 스캔 주소를 로드합니다.지정한 문자 모드 또는 맵모드가 해당 주소에서 바이트를 표시하기 시작합니다.화면 메모리 시작 시 판독을 시작하려면 디스플레이 목록의 첫 번째 Playfield Mode Instruction 행(공백 행이 아님)에 LMS 옵션이 표시되어야 합니다.대부분의 운영체제 생성 풀스크린 모드에서는 표시목록에 표시되는 LMS 수식자는 1개뿐입니다.안티크는 각 모드 행의 끝에 LMS 주소를 자동으로 증가시켜 다음 행을 준비합니다.화면 메모리가 4K 경계를 넘지 않는 한 이후 Playfield Mode 지침에서는 LMS 수정자가 필요하지 않습니다.
Playfield Map Mode E 또는 F를 사용하는 풀스크린 디스플레이는 화면 중앙 부근의 지도 명령에서 LMS 수식자가 두 번째로 표시됩니다.풀스크린에는 4K 이상의 화면 메모리가 필요합니다.(모드 F 디스플레이에는 고해상도 320픽셀 라인이 포함되어 있으며 GTIA 디스플레이 모드 포함).
Map 및 Character Mode 명령을 LMS 비트와 결합하면 디스플레이 라인별로 독립적으로 64K 주소 공간 내에서 화면 메모리 주소를 자유롭게 설정할 수 있습니다.즉, 화면 메모리는 완전히 연속된 메모리를 상위 주소로 스캔할 필요는 없습니다.단, Mode, 디스플레이 폭 및 Scrolling 기능의 요건을 충족하기 위해 1개의 Mode 행에 적절한 시퀀셜바이트의 메모리가 필요합니다.
DLI Modifer - 목록 표시 인터럽트
비트 7: 위치 값 $80, 플레이필드 모드의 마지막 스캔 라인에서 CPU가 제공하는 인터럽트를 호출하도록 ATCI에 지시합니다.
안티키 레지스터 NMIEN(D40Ehex/54286)에dec 비트 7($80)이 설정되어 있는 경우 Mode 라인의 마지막 스캔 라인에서 주소 VDSLST(200/512dec)를hex 통해 인터럽트 루틴이 트리거됩니다.
6502 어큐뮬레이터, X 및 Y 레지스터 내용은 DLI 루틴에 들어가기 전에 보존되지 않습니다.DLI 루틴은 DLI 중에 사용된 레지스터의 상태를 저장한 후 RTI 명령을 사용하여 종료하기 전에 레지스터의 원래 값을 복원해야 합니다.루틴은 일반적으로 레지스터 값을 6502 스택에 푸시합니다.
DLI 루틴은 일반적으로 짧고 빠릅니다. 종료하기 전에 컬러 레지스터 또는 Player-Missile 위치를 변경합니다.단, 간결하게 할 필요는 없습니다.다음 DLI 루틴이 시작되기 전에 DLI 루틴이 종료되는 한 DLI 루틴은 여러 스캔 라인에서 값을 계속 업데이트할 수 있습니다.
플레이필드 그래픽스 모드
ANTIC 칩은 다양한 플레이필드 모드와 폭을 지원합니다.다만, Atari 800/400 컴퓨터에 부속되어 있는 오리지날 Atari operating system에서는, 이러한 그래픽 모드의 일부에 간단하게 액세스 할 수 있습니다.ATIC Playfield 모드는 "GRAPHICS" 명령을 통해 Atari BASIC을 통해 사용자에게 노출되며, 일부 다른 언어에도 유사한 시스템 호출을 통해 노출됩니다.이상하게도 오리지널 OS와 BASIC에서 직접 지원하지 않는 모드가 게임에 가장 유용한 모드입니다.Atari 8비트 XL/XE 컴퓨터에서 사용되는 최신 버전의 OS에서는 이러한 "실종" 그래픽 모드가 대부분 지원되게 되었습니다.
안티크 칩은 표시 목록 및 기타 설정을 사용하여 이러한 모드를 만듭니다.디폴트 GTIA 색상의 해석에서는, 표시 리스트의 순서를 변경하는 것으로, CPU 의 개입 없이 그래픽 모드를 자유롭게 혼재시킬 수 있습니다.
안티크 스크린 지오메트리는 고정되어 있지 않습니다.하드웨어 레지스터는 좁은 플레이필드(128색 클럭/고해상도 픽셀 폭 256개), 일반 폭 플레이필드(160색 클럭/고해상도 픽셀 폭 320개) 및 넓은 오버스캔 플레이필드(192색 클럭/고해상도 픽셀 폭 384개)를 표시하도록 안티크에게 지시할 수 있습니다.운영체제의 그래픽스 모드 기본 높이는 192 스캔 라인입니다만, 안티는 커스텀 디스플레이 리스트를 작성하면 최대 240개의 TV 스캔 라인 높이를 수직 오버스캔으로 표시할 수 있습니다.
Mode F는 NTSC 인공연기를 통해 색을 생성하며 Apple II의 그래픽 모드와 유사한 방식으로 작동합니다.픽셀 해상도는 가로 320이지만 색 해상도는 절반입니다.따라서 두 픽셀의 각 그룹이 함께 "혼합"되어 단일 색상을 형성하고 4가지 아티팩트 색상이 생성될 수 있습니다.전경 및 배경색을 검정/흰색/회색이 아닌 다른 색으로 설정하면 색칠됩니다.이 방법으로 생성되는 정확한 색상은 Atari 8비트모델에 따라 다르며 CTIA 칩과 GTIA 칩 사이에서도 다르므로 개발된 머신 이외의 머신에서 Mode F를 사용하는 소프트웨어를 실행함으로써 바람직하지 않은 아티팩트 색상이 발생할 수 있습니다.PAL 머신에서는 아티팩트컬러를 얻을 수 없었고 Mode F는 흑백이 됩니다.
Mode F는 높은 메모리 요건(8k)과 일관되지 않은 아티팩트 색상으로 인해 소프트웨어에서 널리 사용되지 않았습니다. 이는 Atari 8비트 컴퓨터의 모든 모델에서 동일하게 나타나지 않았습니다.이를 활용한 게임으로는 트롤스테일과 마법사, 프린세스, 로드러너, 울티마 시리즈 등의 시에라 그래픽 어드벤처가 있다.
비디오 디스플레이 시스템은 NTSC 디스플레이 방법과 제한 사항을 신중하게 고려하여 설계되었습니다.시스템 CPU 클럭과 비디오하드웨어는 NTSC 클럭 주파수의 1/2로 동기화됩니다.이것에 의해, 모든 표시 모드의 화소 출력은, 화면상의 화소의 수평 위치에 관계없이, 올바르고 일관된 색을 보증하기 위해서 필요한 최소 시간인 NTSC 칼라 클럭의 사이즈에 근거하고 있습니다.그 결과, 정확한 픽셀 사이즈와 컬러를 얻을 수 있습니다.수평으로 스크롤 했을 때, 색상의 「스트로빙」결함이 표시되지 않습니다.(컬러 스트로핑은 수평의 위치에 근거해 픽셀의 보기 흉한 색상의 변화입니다.이러한 변화는 신호 변화가 컬러 클럭과 일치하지 않기 때문에, TV/모니터의 하드웨어에 충분한 시간이 주어지지 않습니다.색상의 변화)
문자 모드
안티 텍스트 모드 | OS 모드 | 모드 라인당 문자(또는 바이트 수) (좁음/보통/넓음) | 모드 라인당 TV 스캔 라인 수 | 색상 | 문자 매트릭스당 색상 | 글꼴 문자 | 매트릭스 픽셀 크기 (컬러 클럭 x 스캔 라인) | 매트릭스 픽셀당 비트 수 | 매트릭스 맵 (컬러 클럭 x 스캔 라인) | 매트릭스 맵(픽셀×픽셀) | 메모들 |
---|---|---|---|---|---|---|---|---|---|---|---|
2 | 0 | 32/40/48 | 8 | 1.5 | 1 | 128 | 1/2 x 1 | 1 | 4 x 8 | 8 x 8 | 고해상도 픽셀문자의 높은 비트($80 ~ $FF 값)가 설정되면 CHACTL 설정에 따라 문자 데이터가 표시됩니다. |
3 | 없음 | 32/40/48 | 10 | 1.5 | 1 | 128 | 1/2 x 1 | 1 | 10년 8월 4일 | 8 x 8 | 고해상도 픽셀소문자는 하위 항목에서 사용할 수 있도록 스캔 라인 2개 아래에 표시됩니다. |
4 | 12 (XL OS) | 32/40/48 | 8 | 5 | 4 | 128 | 1 x 1 | 2 | 4 x 8 | 4 x 8 | 1픽셀당2비트로1개의문자매트릭스내4가지컬러지원문자의 높은 비트를 설정하면 다른 네 가지 색상 중 하나가 5번째 색으로 대체됩니다. |
5 | 13 (XL OS) | 32/40/48 | 16 | 5 | 4 | 128 | 1 x 2 | 2 | 4 x 16 | 4 x 8 | 색상은 위의 안티 모드 4와 동일합니다.글자의 키는 두 배입니다. |
6 | 1 | 16/20/24 | 8 | 5 | 1 | 64 | 1 x 1 | 1 | 8 x 8 | 8 x 8 | 문자 매트릭스당 한 가지 색상.각 64 문자 블록의 문자는 다른 색으로 표시됩니다.문자의 높은 비트를 설정하면 다른 네 가지 색상 중 하나가 5번째 색으로 대체됩니다. |
7 | 2 | 16/20/24 | 16 | 5 | 1 | 64 | 1 x 2 | 1 | 8 x 16 | 8 x 8 | 색상은 위의 안티 모드 6과 동일합니다.글자의 키는 두 배입니다. |
글리프 렌더링
모든 문자 집합은 문자를 나타내기 위해 8개의 순차 바이트를 사용합니다.이러한 바이트에는 4종류의 문자/글리프 렌더링을 사용할 수 있습니다.각 문자 모드는 특정 렌더링 방법에 관련되어 있습니다.
- 표준: ACTIUS Mode 2.고해상도 그래픽 모드를 기반으로 문자 글리프의 각 비트는 1/2 색상의 클럭 폭의 화면상의 1픽셀을 나타냅니다.배경색은 다른 문자 및 맵모드에서 사용되는 COLBK가 아닌 COLPF2입니다.COLBK는 플레이필드의 모든 4면 주위에 경계로 표시됩니다.문자 글리프의 0 값 비트는 배경색을 나타냅니다.1 값 비트는 배경색(COLPF2)에 근거한 COLPF1로부터의 휘도값을 나타냅니다.문자 집합에는 128자가 사용되며 1024바이트의 RAM이 필요합니다.
- 후속: ACTIUS Mode 3.표준 방법의 수정.픽셀 컬러 표시 방법은 동일합니다.각 모드 행의 높이는 10이지만 문자 글리프는 8바이트입니다.상위 8개 스캔 라인에 00/0dec ~ 5Fhex/95dec 문자가hex 표시되고 하단에 두 개의 빈 스캔 라인이 추가됩니다.60/96dec~7Fhex/127dec 문자는hex 맨 위에 두 개의 빈 스캔 라인으로 시작하여 아래 8개의 스캔 라인에 글리프 바이트를 표시합니다.글리프의 처음 2바이트는 아래쪽 2개의 스캔 라인으로 이동합니다.이렇게 하면 올바르게 설계된 문자 집합이 실제 하위 문자를 표시할 수 있습니다.문자 집합에는 128자가 사용되며 1024바이트의 RAM이 필요합니다.
- 단색: 안티크 모드 6 및 7.이러한 모드에서 문자 글리프의 각 비트는 1색 클럭 폭의 픽셀 하나를 나타냅니다.배경색은 COLBK입니다.문자는 4가지 색상 중 하나로 표시할 수 있습니다.문자 값의 6개의 낮은 비트는 글리프를 나타내고 2개의 높은 비트는 색상을 나타냅니다.문자 값이 6비트로 줄어들기 때문에 문자 집합은 64자를 사용하며 512바이트의 RAM을 필요로 합니다.문자 글리프의 0비트는 배경색을 나타냅니다.문자 데이터의 1비트는 문자 값의 2개의 높은 비트에 기초하여 가능한 4가지 색상 중 하나를 나타냅니다.문자 값 비트 7 및 6:
문자 비트 [7:6] | 문자 범위 | 글리프 픽셀 색상 |
---|---|---|
0 0 = $00 | $00 ~ $3F | COLPF0 |
0 1 = 40달러 | 40달러~7F달러 | COLPF1 |
1 0 = 80달러 | 80달러 - BF달러 | COLPF2 |
1 1 = $C0 | C0달러~FF달러 | COLPF3 |
- 멀티컬러: 안티콘 모드4 및 5이러한 문자 모드에서 문자 글리프 내의 각 비트 쌍은 1컬러 클럭 폭의 픽셀을 나타내며, 따라서 1바이트의 글리프 정보는 다른 모드의 8픽셀이 아닌 4픽셀을 나타낸다.문자 집합에는 128자가 사용되며 1024바이트의 RAM이 필요합니다.배경색은 COLBK입니다.이 모드에서는, 1 문자 매트릭스에 최대 4 색(배경 포함)을 표시할 수 있습니다.문자값의 높은 비트가 설정되어 있는 경우(즉, 반전 비디오), 통상적으로 COLPF2를 나타내는 화소 비트 패턴 「11」 대신에 제5색인 COLPF3가 표시된다.문자 글리프의 비트 쌍에 따른 색상 선택:
문자 비트 7 | 글리프 비트 쌍 | 글리프 픽셀 색상 |
---|---|---|
0/1 = $00/$80 | 0 0 | 콜백 |
0/1 = $00/$80 | 0 1 | COLPF0 |
0/1 = $00/$80 | 1 0 | COLPF1 |
0 = $00 | 1 1 | COLPF2 |
1 = 80달러 | 1 1 | COLPF3 |
맵 모드
안티 맵 모드 | OS 모드 | 모드 라인당 픽셀 수(좁음/보통/폭) | 모드 라인당 TV 스캔 라인 수 | 모드 라인당 바이트 수(좁음/보통/넓음) | 픽셀당 비트 수 | 색상 | 픽셀당 컬러 클럭 수 |
---|---|---|---|---|---|---|---|
8 | 3 | 32/40/48 | 8 | 8/10/12 | 2 | 4 | 4 |
9 | 4 | 64/80/96 | 4 | 8/10/12 | 1 | 2 | 2 |
A | 5 | 64/80/96 | 4 | 16/20/24 | 2 | 4 | 2 |
B | 6 | 128/160/192 | 2 | 16/20/24 | 1 | 2 | 1 |
C | 14 (XL OS) | 128/160/192 | 1 | 16/20/24 | 1 | 2 | 1 |
D | 7 | 128/160/192 | 2 | 32/40/48 | 2 | 4 | 1 |
E | 15 (XL OS) | 128/160/192 | 1 | 32/40/48 | 2 | 4 | 1 |
F | 8 | 256/320/384 | 1 | 32/40/48 | 1 | 11/2 | 1/2 |
GTIA 모드
GTIA 모드는 안티 모드 F 디스플레이이며 GPRIOR(026Fhex/623달러dec)에 의해 음영 처리된 GTIA 레지스터 PRIVER($D01Bhex/53275dec)를 통해 대체 색상 해석 옵션이 활성화됩니다.이러한 GTIA 모드의 풀 컬러 표현은 안티 텍스트 모드 2와 3에서도 사용할 수 있지만, 색상을 실제로 사용하려면 커스텀 문자 집합이 필요합니다.상세한 것에 대하여는, GTIA 를 참조해 주세요.
안티 맵 모드 | OS 모드 | 모드 라인당 픽셀 수(좁음/보통/폭) | 모드 라인당 TV 스캔 라인 수 | 모드 라인당 바이트 수(좁음/보통/넓음) | 픽셀당 비트 수 | 색상 | 픽셀당 컬러 클럭 수 | 메모들 |
---|---|---|---|---|---|---|---|---|
F | 9 | 64/80/96 | 1 | 32/40/48 | 4 | 16* | 2 | 배경색 16가지 색조. |
F | 10 | 64/80/96 | 1 | 32/40/48 | 4 | 9 | 2 | pixel indirection 모드: 9개의 Playfield 및 Player/Missile 컬러 레지스터를 모두 픽셀에 사용합니다. |
F | 11 | 64/80/96 | 1 | 32/40/48 | 4 | 16* | 2 | 15가지 색조 모두 배경에 의해 설정된 동일한 휘도와 배경색입니다. |
스크롤
비디오 디스플레이가 사용자 인터페이스의 일부가 되기 전에는 많은 컴퓨터가 텔레타이프를 사용했습니다.텔레타이프는 보통 연속 급지된 용지가 있는 프린터입니다.유저의 입력과 컴퓨터의 출력은, 프린터를 개입시켜 급지 된 용지에 인쇄되었습니다.사용자 입력 및 컴퓨터 출력에 대해 널리 알려진 이 인터페이스는 컴퓨터가 상상된 무한 롤 종이 위에 화면을 뷰 포트로 비유하기 때문에 비디오 디스플레이의 도입 이후에도 계속되었습니다.정보는 화면 상단에서 시작하여 화면 하부에 도달할 때까지 화면에 표시되며, 컴퓨터가 새로운 정보를 도입해야 할 경우 모든 화면 정보가 하부에 새로운 정보를 위한 빈 공간을 제공하여 결과적으로 맨 위 정보를 지웁니다.
이런 종류의 스크롤을 "저밀도 스크롤"이라고 합니다.메모리 바이트를 지정된 화면 표시 영역을 통해 이동하면 됩니다.1킬로바이트(또는 그 이상)의 메모리를 이동하는 것은 CPU를 많이 사용하는 작업이며, 느린 컴퓨터는 화면 데이터를 업데이트하는 동안 다른 작업을 수행하지 못할 수 있습니다.디스플레이의 애니메이션을 실시하는 수단으로서 CPU가 화면 메모리를 고속으로 갱신할 수 없는 경우, 결과가 불안정할 수 있다.디스플레이의 최소 이동량은 문자 전체의 크기이므로 모션 유동성이 저하됩니다.Atari 8비트를 포함한 대부분의 컴퓨터는 위와 같이 거친 스크롤을 수행합니다.일반적인 예로는 긴 BASIC 프로그램 목록이나 파일 디렉토리를 표시하는 것입니다.
데이터의 대량 이동에 의해 구현되는 거친 스크롤은 대부분의 컴퓨터에서 가능한 유일한 스크롤 방법입니다.단, ACTC는 수직 및 수평, 거칠고 미세한 스크롤을 하드웨어에서 직접 지원합니다.이는 은유적인 착각에서 문자 그대로의 구현으로 "데이터 위를 이동하는 뷰 포트"라는 개념을 채택한 것입니다.이러한 안티키 기능에 의해, CPU 의 시간을 최소한으로 억제할 필요가 있는, 신속하고 부드러운 풀스크린 이동이 가능하기 때문에, CPU 를 다른 작업에 사용할 수 있습니다.
모든 안티크 디스플레이 모드(텍스트 및 지도 모드)는 하드웨어 스크롤 기능을 사용할 수 있습니다.
세로 방향의 굵은 스크롤
세로 방향의 거친 스크롤은 운동하기 가장 쉬운 기능입니다.모든 디스플레이 목록의 첫 번째 텍스트 또는 지도 모드 명령은 항상 화면 메모리의 시작을 지정하는 LMS 명령 수정자를 포함합니다.디스플레이를 생성할 때 메모리 스캔 포인터를 Mode 라인에서 Mode 라인으로 자동으로 증가시켜 메모리를 연속적으로 표시합니다.따라서 초기 LMS 수식자의 주소를 갱신하는 것만으로 디스플레이를 「이동」할 수 있습니다.현재 텍스트 모드 또는 맵모드에서 행에 사용되는 바이트 수를 더하면 화면 내용이 한 줄 위로 이동하고 같은 양을 빼면 화면이 아래로 이동합니다.따라서 디스플레이는 메모리를 고정 화면 맵으로 이동하는 것이 아니라 메모리의 다른 영역을 보기 위해 이동하는 뷰 포트입니다.
안티크의 메모리 스캔 카운터는 4K 경계에서 자동으로 증가할 수 없기 때문에 이 간단한 방법으로 수직 스크롤의 한계는 최대 4K 이동입니다.약 1K를 사용하는 Mode 2 텍스트의 전체 화면은 4K 경계에 도달할 때까지 4개 화면의 높이를 연속적으로 스크롤할 수 있습니다.마찬가지로 Mode 7 텍스트 디스플레이에서도 화면 전체의 높이를 16개까지 스크롤할 수 있습니다.
당연히, 그 사소한 예는 제한된 유용성을 가진다.대부분의 스크롤 실장에서는 화면의 일부만 스크롤하고 다른 부분은 고정된 상태로 둡니다.이 문제는 ATCI 디스플레이 목록의 고유 기능으로 해결됩니다.이 경우 화면 리스트는 화면 섹션의 첫 번째 모드라인에 LMS 수식자를 사용한 모드명령을 추가합니다.이러한 화면은 스크롤 섹션의 LMS 수식자 주소가 갱신되는 동안 디스플레이의 이러한 부분을 효과적으로 잠급니다.
이 개념의 추가 확장에서는 스크롤을 실행하는 모든 행에 LMS 수식자 옵션이 사용됩니다.이 디스플레이에서 수직 스크롤하려면 스크롤 영역의 Mode 행마다 LMS 수정자 주소를 하나씩 업데이트해야 합니다.이 정도의 디테일로 디스플레이를 관리하면, ATIC의 4K 화면 RAM 경계를 쉽게 우회할 수 있다.이 최악의 예에서도 화면 데이터를 일괄 이동하는데 필요한 처리의 극히 일부에 불과합니다.
주의해야 할 다른 한 가지 제한은 BYTCS가 LMS를 처리할 때 2바이트의 LMS 수식자 주소를 업데이트해서는 안 된다는 것입니다.부분적으로 업데이트되는 동안 BYTCS가 LMS 주소를 읽으면 BYTCS는 해당 Mode 행에 대해 잘못된 메모리 섹션을 표시합니다.디스플레이의 스크롤 영역에 복수의 LMS 주소가 갱신될 필요가 있는 경우는, 부분 갱신 가능성이 높아집니다.또, 그 후의 2 행에 같은 데이터가 표시될 가능성도 높아집니다.프로그램에서는 이 문제를 다양한 방법으로 해결할 수 있습니다.수직 블랭크 중에 업데이트를 실행하거나 업데이트 전에 VCOUNT를 감시하거나 스크롤 영역에서 떨어진 디스플레이 섹션 중에 실행되는 Display List Interrupts에서 업데이트를 수행합니다.
세로 방향 미세 스크롤
Vertical Fine Scrolling(수직 미세 스크롤)을 사용하면 텍스트 및 지도 모드의 경우 스크롤 영역의 단일 스캔 라인을 이동할 수 있습니다. 이 모드에서는 스캔 라인 높이가 두 개보다 큽니다.Map 모드의 경우 수직 미세 스크롤은 하나의 스캔 라인 높이만 논리적으로 실용적이지 않습니다.단일 스캔 라인 Map(지도) 모드에 대한 수직 "미세" 스크롤 효과는 보다 쉬운 거친 스크롤 방법을 사용하여 수행할 수 있습니다.
미세 스크롤을 수행하려면 스크롤 영역을 정의하기 위한 설정이 필요합니다.이 작업은 순차적 표시 목록 설명에서 VS(Vertical Scroll) 수정자 비트를 설정하여 수행합니다.VS 비트 세트가 없는 첫 번째 Mode 라인 명령은 스크롤 영역의 끝이 되며 스크롤 영역의 맨 아래까지 스크롤할 새 스캔 라인을 제공하기 위한 버퍼 라인으로 사용됩니다.
ATCH의 수직 미세 스크롤 처리는 스크롤 영역의 첫 번째 모드 라인에 대해 여러 스캔 라인을 건너뛰도록 ATCH를 지시하는 것만으로 작동합니다.스크롤 영역의 후속 모드 행은 영향을 받지 않습니다.영역의 마지막 라인은 첫 번째 라인에서 제거된 스캔 라인 수를 표시하는 스크롤 영역의 하단 경계를 제공합니다.이 스캔 라인 수는 VSCROL 레지스터를 사용하여 제어됩니다.값의 범위는 0 ~ ANTIC 모드 라인의 스캔 라인 높이 - 1입니다.최대값 범위에는 0 ~ 15의 16개의 스캔 라인이 미세 스크롤됩니다.
미세한 스크롤 제한에 도달하면 VSCROL 값을 재설정하고 스크롤 영역의 거친 수직 스크롤을 수행하여 스크롤을 계속합니다.
수평 굵은 스크롤
가로로 거칠게 스크롤하려면 세로 스크롤보다 조금 더 많은 노력이 필요합니다.수평 스크롤은 화면 메모리로 구성된 넓은 파노라마 장면에서 뷰 포트가 좌우로 움직이는 착각을 나타낼 것으로 예상되지만, 안티티의 자동 메모리 스캔 인크리먼트는 화면 데이터의 행이 디스플레이보다 넓다는 생각과 충돌합니다.화면 메모리를 긴 가로줄로 표시하려면 스크롤 영역의 모든 디스플레이 목록 텍스트 또는 지도 모드 명령에 대해 LMS 수식자가 필요합니다.수평 스텝은 스크롤 영역의 모든 LMS 주소를 증감함으로써 이루어진다.
수평 스크롤을 사용하려면 수직 거친 스크롤에서 설명한 최악의 예시와 동일한 표시 목록 구현이 필요합니다.따라서 수평 스크롤이 구현되어 있는 경우에는 LMS 주소의 증감 값을 변경하는 것만으로 수직 스크롤도 지원됩니다.또 다른 장점은 안티크의 4K 화면 메모리 경계 한계 부근에서 화면 메모리를 쉽게 관리할 수 있다는 점이다.
LMS 수식자 주소를 갱신할 때의 상세한 설명과 시간 제약에 대해서는, 「수직의 거친 스크롤」섹션을 참조해 주세요.
수평 미세 스크롤
수평 미세 스크롤을 사용하면 텍스트 및 지도 모드에서 스크롤 영역의 단색 클럭을 이동할 수 있습니다.통상적인 색상의 해석에서는, 픽셀이 칼라 클럭보다 큰(또는 작은) 경우에도, 픽셀이 아닌 칼라 클럭에 의한 해석입니다.대체 GTIA 색상 해석을 사용하는 안티키 모드는 전체 GTIA 픽셀(2색 클럭)로 스크롤해야 합니다.올바른 GTIA 픽셀 스크롤을 위해 짝수 값만 사용해야 합니다.HSCROL의 홀수 값은 GTIA 픽셀 스트림을 다른 색으로 해석되는 다른 상태로 전환합니다.
미세 스크롤을 수행하려면 수평 스크롤 영역을 정의하기 위한 설정이 필요합니다.첫 번째 단계는 LMS 명령 수식자를 사용하여 각 Mode 행의 시작 주소를 지정하는 표시 목록으로 시작하는 것입니다.이것은 화면 메모리를 디스플레이에 사용할 긴 데이터 행으로 구성하기 위해 수행됩니다.다음 단계에서는 스크롤 영역에 대한 모든 디스플레이 목록 모드 라인 지시에서 수평 스크롤(HS) 수정자 비트를 설정합니다.
전환할 컬러 클럭의 이 수는 HSCROL 레지스터를 통해 제어됩니다.HSCROL 값의 최대 범위는 0 ~15의 16가지 컬러 클럭의 미세한 스크롤을 포함합니다.사용되는 컬러 클럭 정보는 모드 라인(ANTIC의 현재 메모리 스캔 포인터)의 선두부터 버퍼링되어 16가지 컬러 클럭을 만족시키는 충분한 화면 메모리 바이트를 사용합니다.수평 스크롤은 버퍼링된 메모리의 마지막(맨 오른쪽) 컬러 클럭부터 시작하여 버퍼링된 16컬러 클럭에서 출력할 수 있는 컬러 클럭의 수를 안티크에게 지시합니다.제로(0)는 버퍼에서 출력되는 컬러 클럭이 아닙니다.1은 버퍼의 마지막(맨 오른쪽) 컬러 클럭입니다.컬러 시계는 화면 왼쪽 끝에 삽입되어 화면의 스크롤 영역이 오른쪽으로 이동합니다.
미세한 스크롤 제한에 도달하면 HSCROL 값을 재설정하고 스크롤 영역의 대략적인 수평 스크롤을 수행하여 스크롤을 계속합니다.ATIC의 16색 클럭 범위는 여러 텍스트 모드 문자 또는 1바이트 이상의 맵 모드 픽셀을 미세 스크롤할 수 있습니다.따라서 LMS 주소로 업데이트하면 여러 바이트가 추가 또는 감산될 수 있습니다.
대체 스크롤 방식
ACTICS의 DMA 메모리 스캔 동작을 재미있게 사용하면 수평 스크롤 거리가 길어 보이는 전략을 사용할 수 있지만 필요한 실제 메모리의 극히 일부만 사용합니다."수평 거친 스크롤"에서 설명한 바와 같이, ACTIPS의 자동 메모리 스캔 인크리먼트는 Mode 라인에서 Mode 라인으로 증가하며 화면 데이터의 행이 디스플레이보다 넓다는 생각과 충돌합니다.실제로 긴 수평 연속 바이트로 구성된 메모리를 사용하려면 스크롤 영역의 모든 디스플레이 목록 텍스트 또는 맵 모드 명령에 대해 LMS 수식자가 필요합니다.
이 방법에서는 모든 행에 대해 LMS 수식자를 사용하는 대신 스크롤 영역의 시작 부분에 LMS 수식자를 하나만 필요로 하는 보다 "일반" 표시 목록을 사용합니다.LMS 수식자 주소의 증가(+1)는 스크롤 영역을 왼쪽으로 이동시키는 것처럼 보이게 합니다.단, 스크롤 영역의 우측으로 이동한 "새로운" 정보는 이전에는 다음 줄의 첫 번째 바이트였습니다(마지막 줄의 마지막 바이트는 제외). 이 정보는 화면에서 완전히 벗어났습니다.
이 전략의 후반부는 원하는 새로운 정보를 표시하기 위해 스크롤 영역의 모든 행의 마지막 바이트/문자를 업데이트해야 합니다.일반적인 스크롤 디스플레이에서는 조립에 약간의 시간이 걸리는 12줄의 마지막 바이트를 업데이트해야 합니다.따라서 이 스크롤 프로세스가 전체 화면 Mode 2 또는 Mode 4 텍스트 디스플레이를 포함하고 있으며(좀 더 최악의 경우), ATCI의 자동 화면 메모리 주소 지정의 전체 4K 기능을 사용하는 경우 수평 스크롤은 약 3,000단계(전체 화면 75개) 동안 계속할 수 있습니다.
그러나 4K 메모리 사용도 필요하지 않습니다.첫 번째 전체 화면의 모든 데이터가 디스플레이에서 이동된 후 스크롤 애플리케이션은 첫 번째 화면을 기존 전환점을 포함하도록 재구성할 수 있습니다.이것에 의해, 스크롤 동작은 블록내의 첫 번째 주소로 돌아옵니다.스크롤의 말더듬이나 명백한 중단은 발생하지 않습니다.
이 어레인지먼트를 세밀하게 스크롤하려면 좀 더 계획을 세워야 합니다.디스플레이 리스트에서 미세 스크롤이 유효하게 되어 있는 경우, ATCI는 Mode 행이 디스플레이에 필요로 하는 것보다 많은 정보를 취득합니다.각 모드 행이 더 많은 메모리를 사용하므로 디스플레이 측면으로 스크롤되는 새 정보는 다음 행의 시작 부분에 표시된 바이트/문자가 아닙니다.그러나 스크롤 프로세스에 영향을 주지 않고 각 표시 라인의 시작과 끝을 찾기 위해 사용되는 덧셈과 뺄셈의 값을 변경할 뿐입니다.
목록 인터럽트 표시(DLI)
안티크는 화면상의 특정 수직 위치에서 CPU가 제공하는 인터럽트를 트리거하는 기능을 포함합니다.이것은 현재 모드 명령의 마지막 스캔 라인 동안 인터럽트를 시작하도록 안티키 디스플레이 목록에 포함되어 있으며, 이를 "디스플레이 목록 인터럽트"라고 합니다.다른 플랫폼에서는 이 액티비티를 "래스터 인터럽트" 또는 "수평 블랭크 인터럽트"라고 부릅니다.일반적인 목적은 알려진 위치에서 디스플레이 관련 값을 변경하여 시각적으로 정확하거나 디스플레이 활동과 충돌하지 않는 곳에서 전환이 발생하는 것입니다.색상 레지스터 값 변경, 플레이어/미사일 수평 위치 및 미세한 스크롤 값 변경 등이 있을 수 있습니다.DLI는 CPU에 의해 실행되는 6502 머신 코드이기 때문에 다른 액티비티와 경합하지 않고 이후의 디스플레이 리스트 인터럽트를 오버런하지 않는 짧은 처리라면 어떤 종류의 처리도 가능합니다.좋은 예로는 1/60초 이상의 빈도로 수행해야 하는 마우스 컨트롤러 폴링을 들 수 있습니다.
개요
인터럽트를 올바르게 기동하려면 , 다음의 조건이 필요합니다.
- Display List Interrupt(DLI; 표시 목록 인터럽트) 수식자 비트가 설정된 모드 명령이 있는 표시 목록(비트 7 - $80hex/128dec)
- 안티크의 NMIEN 레지스터에는 DLI 비트가 설정되어 있습니다.(비트7 - $80hex/128dec)
- Display List Interrupt(VDSLST, $0200hex/512dec)의 운영 체제 벡터는 인터럽트 루틴의 시작 주소를 가리킵니다.
적절한 셋업
디스플레이 제어 값을 업데이트할 때, 현재 ATCI가 해당 값을 사용하지 않도록 주의해야 합니다.ACTI가 DLI 수식자를 가진 명령을 포함하는 표시 목록을 처리하는 경우 VDSLST 주소를 변경하는 동안 인터럽트가 디스패치되어 시스템이 크래시될 수 있습니다.디스플레이 리스트가 복수의 인터럽트를 사용하고 있으며, ACTI가 DLI 수식자를 포함한 Mode Instructions를 이미 전달한 후에 NMIEN에서 인터럽트가 유효하게 되어 있는 경우, 디스플레이 리스트의 인터럽트가 순서대로 기동하지 않고, 예기치 않은 결과가 발생합니다.
Display List Interrupts를 사용하여 Display List를 설치하는 적절한 일련의 이벤트:
- 레지스터를 $40으로 설정하여 Vertical Blank Interrupt를 계속 실행할 수 있도록 함으로써 NMIEN의 비트7($80)을 클리어함으로써 안티크 표시 목록 인터럽트를 끕니다.
- SDMCTL(Shadow Register)에서 먼저 ACTICTL(안티크 표시 목록 DMA)을 해제한 후 원하는 경우 하드웨어 레지스터(DMACTL)에서도 동일한 작업을 수행할 수 있습니다.비트 5(값 20달러)를 클리어해야 하지만 대부분의 구현에서는 모든 비트를 0으로 설정하고 화면을 재시작할 시간이 되면 모든 비트의 올바른 값을 복원합니다.
- Display List 포인터 섀도주소 DLISTL/DLISTH 를 새로운 Display List 의 개시 주소로 설정합니다.
- Display List Interrupt address VDSLST ($0200hex/512dec)를 인터럽트 루틴의 시작 주소로 설정합니다.
- 다음 VBI(Vertical Blank Interrupt)가 섀도 레지스터 변경을 적용할 때까지 기다립니다.가능한 방법:
- RTCLOCK ($12/$13/$14hex/18/19/20dec)을 감시하여 VBI가 발생했음을 나타냅니다.
- 다음 프레임이 시작되었음을 나타내는 변경 사항이 있는지 안티크의 VCOUNT를 모니터링합니다.
- NMIEN의 비트 7($80)을 설정하여 안티크 디스플레이 목록 인터럽트를 켭니다.NMIEN의 통상은, DLI 와 VBI 를 유효하게 하는 $C0 입니다.
- Shadow Register(SDMCTL)를 업데이트하여 AnTIC Display List DMA를 켜십시오.비트 5(값 $20)는 플레이필드 폭의 비트 및 필요한 경우 플레이어/미사일 그래픽과 관련된 비트를 설정해야 합니다.
디스플레이 사이클과 긴밀하게 통합되어 현재 디스플레이에 대한 전자 빔 위치를 인식하는 프로그램은 디스플레이 목록 DMA를 끌 수 없습니다. 마찬가지로 수직 공백 중에 설정이 발생하면 디스플레이를 끌 필요가 없습니다.
코드에 관한 고려사항
6502 어큐뮬레이터, X 및 Y 레지스터 내용은 DLI 루틴에 들어가기 전에 보존되지 않습니다.DLI 루틴은 DLI 루틴에서 사용되는 레지스터의 상태를 저장한 다음, 마지막 액션은 RTI 명령을 사용하여 종료하기 전에 레지스터의 원래 값을 복원하는 것입니다.루틴은 일반적으로 레지스터 값을 6502 스택에 푸시합니다.
여러 DLI를 사용하는 경우 첫 번째 인터럽트는 다음 인터럽트의 주소를 가리키도록 VDSLST를 업데이트하고, 그 다음 인터럽트에 대해서도 마찬가지입니다.화면의 마지막 Display List Interrupt 루틴은 VDSLST를 첫 번째 Display List Interrupt 주소로 되돌립니다.
DLI에 의해 변경된 값에 운영 체제 섀도우 레지스터가 있고 Vertical Blank Interrupts가 활성화되어 있는 경우 디스플레이 목록 인터럽트의 화면 위치 앞(위)에 적용되는 값은 섀도우 값이고 화면 위치 뒤의 값은 DLI(및 나중에 변경되는 다른 모든 DLI)의 값입니다.값에 운영 체제 섀도가 없는 경우 시작 값을 설정하는 초기 DLI(또는 VBI) 루틴이 있어야 합니다.
DLI 값이 변경되는 동안 그래픽 개체가 표시되는 경우 결과가 일관되지 않을 수 있습니다.가장 일반적인 예는 배경색을 변경하는 것입니다.전자빔이 화면의 가시적인 부분에 있는 동안 DLI가 실행되기 때문에 이전 배경색에서 현재 스캔 라인 어딘가에서 DLI에 의해 쓰여진 새 색상으로의 전환을 볼 수 있습니다.(정확한 위치는 디스플레이 모드 및 플레이어/미사일 그래픽의 DMA 요건에 따라 달라집니다.)스캔 라인에서 스캔 라인으로 완전히 이행하려면 먼저 코드가 WSYNC에 쓰여야 합니다.WSYNC는 스캔 라인이 끝날 때까지 DLI 실행을 중지한 후 원하는 레지스터에 씁니다.
DLI 의 통상은, 몇개의 디스플레이 지향의 값을 변경해, 메인 코드로 되돌리는 것입니다만, 이것은 필수가 아닙니다.DLI는 다음 DLI 또는 Vertical Blank Interrupt(수직 공백 인터럽트) 전에 종료되는 한 여러 스캔 라인 또는 여러 스캔 라인을 실행하는 것이 안전합니다.
예
배경색을 변경하는 Display List Interrupt의 간단한 예:
DLI PHA ; 스택에 어큐뮬레이터 저장 LDA #9달러 ; 라이트 블루 (컬러 $9, 휘도 $C)를 로드 스타 동기 ; 스캔 라인 끝에 동기화할 때까지 기다립니다. 스타 콜백 ; 배경 설정 PLA ; 스택에서 어큐뮬레이터 복원 RTI ; 끝.
플레이어/미사일 그래픽스
대부분의 플레이어/미사일 그래픽 기능은 CTIA/GTIA 칩 도메인에 있습니다.CTIA/GTIA는 Player/Missile 그래픽 객체의 위치, 크기, 색상, 우선도 및 충돌 감지를 제어하지만 실제 모양 렌더링 구현은 모든 스캔 라인에 균일하게 표시되는 객체당 1바이트 패턴을 넘지 않습니다.(패턴은 CTIA/GTIA의 GRAF* 그래픽 패턴 레지스터에 설정됩니다.)결국 CTIA/GTIA는 그 자체로 플레이어/Missile 객체를 화면상의 세로 스트라이프 패턴으로만 생성한다.
안티크의 설계에는 디스플레이 리스트와 플레이필드 그래픽 데이터를 읽을 수 있도록 DMA 기능이 포함되어 있습니다.이 다이렉트 메모리 액세스 기능은 CTIA/GTIA 대신 데이터를 읽고 각 디스플레이 스캔 라인이 생성될 때 GRAF* 그래픽 패턴 레지스터를 업데이트하기 위해 사용됩니다.이와 같이, 안티C는 플레이어/미사일 오브젝트에, 화면 높이에 따라서 변화해, 종래의 「스프라이트」그래픽으로서 표시되는 패턴을 제공합니다.
ATCI의 DMACTL 레지스터(SDMCTL로 표시됨)의 비트 2와 3은 CTIA/GTIA 그래픽 패턴 레지스터를 업데이트하기 위해 ATCI의 Player/Missile 데이터 검색을 제어합니다.
DMACTL Player/Missile DMA 제어 비트 값(비트 [3:2]):
- $00 - 플레이어 및 미사일 DMA 비활성화
- 04달러 - 미사일 DMA 활성화
- $08 - 플레이어 DMA 활성화
- $0C - 플레이어 및 미사일 DMA 활성화
플레이어 DMA 없이도 Basile DMA를 활성화할 수 있습니다. 단, Player DMA를 활성화하면 DMA 타이밍을 일관되게 유지하기 위해 Basile DMA가 자동으로 발생하지만 데이터는 Basile의 GRAFM 레지스터에 전달되지 않습니다.
DMACTL 레지스터의 비트 4(값hex 10/16dec)는 새 데이터 검색 빈도를 제어합니다.안티키는 데이터를 검색하고 모든 스캔 라인에서 CTIA/GTIA를 업데이트합니다.DMACTL 해상도 설정은, 새로운 데이터를 취득하기 위한 내부 DMA 포인터의 증가 빈도에 영향을 줍니다.싱글 라인 해상도 플레이어/미사일 그래픽스는 스캔 라인마다 DMA 주소를 증가시키고 더블 라인 해상도는 스캔 라인마다 DMA 주소를 증가시킵니다.플레이어/미사일 해상도의 DMACTL 비트 값:
- $00 - 더블 라인 해상도.DMA가 짝수 스캔 라인에서 새 데이터를 가져오지만 CTIA/GTIA Player/Missile Graphics 패턴 레지스터는 여전히 모든 스캔 라인에서 업데이트됩니다.이것에 의해, 각 플레이어/미사일 바이트 패턴은, 2개의 스캔 라인의 높이가 된다.이중 라인 분해능이 활성화된 경우 CTIA/GTIA 레지스터 VDELAY(D01Chex/53276dec)를 사용하여 개별 플레이어 및 비산물의 비트 패턴을 스캔 라인 아래로 이동하는 짝수 스캔 라인에서 ATCI 업데이트를 마스킹할 수 있습니다.
- 10달러 - 싱글 라인 해상도모든 스캔 라인에서 새 DMA 가져오기 및 플레이어/Missile 레지스터 업데이트가 발생합니다.CTIA/GTIA 레지스터 VDELAY(D01Chex/53276dec)는 짝수 스캔 라인에서 업데이트를 마스킹하면 데이터가 스캔 라인보다 한 줄 낮게 이동되더라도 싱글 라인 플레이어/Missile 분해능이 이중 라인 분해능으로 나타납니다.
또한 화면에 객체를 올바르게 표시하려면 DMA를 통해 플레이어/Missile 그래픽 데이터를 수신하도록 CTIA/GTIA를 특별히 활성화해야 합니다.자세한 내용은 CTIA/GTIA의 GRACTL 레지스터를 참조하십시오.
플레이어/Missile 그래픽스용 안티크로 판독된 메모리의 위치는 레지스터 PMBASE에 의해 제어됩니다.이 PMBASE 값은 Player/Missile 그래픽스의 기본 주소 시작 페이지를 제공합니다.이중 라인 해상도 P/M 그래픽이 작동하는 경우 PMBASE 값은 1K 경계에서 시작해야 합니다.싱글 라인 해상도의 P/M 그래픽스가 동작하고 있는 경우, PMBASE 값은 2K 경계로부터 개시할 필요가 있습니다.플레이어/미사일 그래픽 모드의 메모리 맵:
PMBASE x 100hex/256에dec 대한 이중 라인 해상도(2개의 스캔 라인당 1바이트, 각 객체당 128바이트):
미사용 | 미사일 3/2/1/0 | 플레이어 0 | 플레이어 1 | 플레이어 2 | 플레이어 3 | |
---|---|---|---|---|---|---|
시작/화면 상단 | ||||||
데크 | +0 | +384 | +512 | +640 | +768 | +896 |
16진수 | +$00 | +$180 | +$200 | +$280 | +$300 | +$380 |
화면 끝/하단 | ||||||
데크 | +383 | +511 | +639 | +767 | +895 | +1023 |
16진수 | +17F달러 | +1FF달러 | +27F달러 | +2FF달러 | + 37F달러 | +3FF달러 |
PMBASE x 100hex/256에dec 대한 단일 라인 해상도(스캔 라인당 1바이트, 객체당 256바이트):
미사용 | 미사일 3/2/1/0 | 플레이어 0 | 플레이어 1 | 플레이어 2 | 플레이어 3 | |
---|---|---|---|---|---|---|
시작/화면 상단 | ||||||
데크 | +0 | +768 | +1024 | +1280 | +1536 | +1792 |
16진수 | +$00 | +$300 | +$400 | +$500 | +$600 | +$700 |
화면 끝/하단 | ||||||
데크 | +767 | +1023 | +1279 | +1535 | +1791 | +2047 |
16진수 | +2FF달러 | +3FF달러 | +4FF달러 | +5FF달러 | +6FF달러 | +7FF달러 |
비산물은 위의 메모리 맵에서 동일한 바이트를 공유하며, 비산물당 2비트입니다.
미사일 | 비트 | 값/마스크 |
---|---|---|
0 | ------11 | $03 |
1 | ----11-- | $0C |
2 | --11---- | $30 |
3 | 11------ | C0달러 |
안티키는 메모리 맵에서 플레이어/미사일 메모리의 첫 번째 및 마지막 8개의 스캔 라인을 사용하지 않습니다.더블 라인 해상도에서는 첫 번째와 마지막 4바이트가 무시되고, 단일 라인 해상도에서는 첫 번째와 마지막 8바이트가 무시됩니다.
Player/Missiles는 Playfield 그래픽과 독립적인 오버레이이며 오버스캔 영역에 렌더링되므로 Player/Missile 데이터의 수직 좌표를 Playfield와 정렬하려면 오프셋해야 합니다.운영 체제의 192 스캔 라인 기본 그래픽 모드에서 플레이어/미사일 수직 데이터 좌표는 아래와 같이 플레이어/미사일 시작에서 오프셋됩니다.오버스캔 항목에는 플레이어/Missile 데이터의 처음 및 마지막으로 사용된 오프셋이 표시됩니다.
플레이필드 | P/M 이중선 | P/M 단일 회선 |
---|---|---|
(상단) 미사용 | +00/0hexdec ~ +03hex/3달러dec | +00/0hexdec ~ +07hex/7dec |
오버스캔 시작 | +04/4달러hexdec | +08/8달러hexdec |
그래픽스 라인 0 | +10/16달러hexdec | +20hex/32달러dec |
그래픽스 라인 191 | +6F달러hex/111dec | +$DFhex/223dec |
오버스캔 종료 | + 70억달러hex/123dec | + F7hex/247달러dec |
(하단)미사용 | +7Chex/124달러dec~+7Fhex/127달러dec | +$F8hex/248dec~+$FFhex/255dec |
제한 사항
전체 Playfield 디스플레이의 수직 범위는 0 ~ 240개의 스캔 라인 사이에서 다양합니다. 이는 디스플레이 목록에 따라 표시하도록 프로그래밍된 ATCP의 라인 수에 따라 달라집니다.안티크는 TV스캔 라인 8에서 스캔 라인 생성을 시작하여 총 240개의 스캔 라인 247로 이어진다.
Playfield 디스플레이의 가로 폭은 128, 160 또는 192 색 클럭에 대응하는 256, 320 또는 384 픽셀 폭으로 설정할 수 있습니다.가장 넓은 모드에서는 352픽셀(176컬러 클럭)만 실제로 볼 수 있습니다.「DMACTL」을 참조해 주세요.
수평 미세 스크롤은 스크롤 영역을 최대 16색 클럭으로 이동합니다.「HSCROL」을 참조해 주세요.
GTIA Map 모드는 1컬러 클럭이 아니라 픽셀 전체 크기(2컬러 클럭)의 순서로 수평으로 스크롤해야 합니다.'HSCROL' 및 '수평 미세 스크롤'을 참조하십시오.
수직 미세 스크롤은 스크롤 영역의 단일 모드 라인에 있는 스캔 라인 수를 최대 16개의 스캔 라인까지 이동합니다.「VSCROL」을 참조해 주세요.
ACTICS의 Display List 프로그램 카운터는 16비트이지만 디스플레이 목록의 일반(즉, 순차적) 실행 중에는 하위 10비트만 변경됩니다.즉, 1K 경계를 넘으려면 표시 목록에 JMP(점프) 명령이 필요합니다.1 개의 표시 리스트의 사이즈는 통상 32 ~202 바이트로, 사실상 720 바이트를 넘지 않기 때문에, 이것은 큰 제한이 아닙니다.메모리내의 어느 장소에나 배치할 수 있기 때문에, 1K 의 경계를 넘지 않는 메모리내의 충분한 사이즈의 장소를 찾는 것은 어렵지 않습니다.
메모리 스캔 레지스터는 화면 메모리에 저장된 데이터를 수신처로 지정하는 레지스터로 16비트이지만, 비디오 메모리를 순차적으로 스캔할 때는 하위 12비트만 변경됩니다.즉, 화면 메모리가 4K 경계를 넘는 LMS(Load Memory Scan) 옵션을 포함한 Mode 라인 명령이 디스플레이 목록에 필요합니다.안티크의 그래픽 모드 E와 F는 전체 화면 디스플레이를 위해 750K 이상의 화면 메모리가 필요합니다.이러한 디스플레이의 디스플레이 목록에서는 화면 메모리가 4K 경계를 넘는 디스플레이 중앙 부근의 Mode 명령에 LMS 옵션을 추가해야 합니다.4K 경계는 Graphics Mode 행의 중간 내에서 교차할 수 없습니다.단, 한 Mode 행의 끝과 다음 행의 시작 사이에만 교차할 수 있습니다.즉, 이전 Mode 행의 메모리는 4K 블록의 정확한 마지막 바이트에서 종료되고 다음 Mode 행은 다음 4K 블록의 정확한 첫 번째 바이트에서 시작됩니다.
문자 세트는 메모리의 임의의 장소에 배치할 수 있지만(CHBASE 참조), 안티크 텍스트 모드에 따라 시작 주소는 512바이트 또는 1K 경계에 맞춰야 합니다.
플레이어/미사일메모리 맵은 메모리 내의 임의의 장소(PMBASE 참조)에서 발생할 수 있지만 해상도에 따라서는 시작 주소가 1K 또는 2K 경계(DMACTL 참조)에 맞춰야 합니다.
버그와 경계 조건
![]() | 이 섹션에는 특정 청중만 관심을 가질 수 있는 지나치게 복잡한 세부 정보가 포함될 수 있습니다.(2019년 5월 (이 및 ) |
표시 목록의 특정 값 조합으로 인해 예기치 않은 결과가 발생할 수 있습니다.또한, 일부 안티크의 활동에는 중요한 시기가 있습니다.적절한 시간대를 벗어나 레지스터를 변경하면 효과가 지연되거나 예기치 않은 결과가 발생할 수 있습니다.이러한 상황 중 일부는 흥미로운 효과를 위해 악용될 수 있고 다른 일부는 디스플레이 손상을 생성합니다.
부정 이용 가능한 동작
그래픽스 9++
ACTIUS 모드 F의 큰 메모리 요건 없이 확장 GTIA 컬러 모드를 사용하는 방법 중 하나는 LMS 수식자와 함께 Mode line 명령을 사용하여 동일한 화면 데이터를 여러 스캔 라인에 다시 표시함으로써 데이터의 각 행을 1회 이상 반복하도록 하는 것입니다.이것에 의해, 각 픽셀의 스캔 라인의 높이가 2개 이상인 경우는, 수직 해상도는 낮아집니다만, 화면 메모리에서 같은 바이트를 다시 읽어낼 필요가 있는 안티크로 인해, DMA 오버헤드가 높아집니다.LMS 수식어를 반복 사용하는 대신 수직 스크롤의 퀴크를 이용하여 고해상도 또는 GTIA 색상 해석 모드를 사용하여 픽셀을 표시하는 4개의 스캔 라인 모드를 만들 수 있습니다.
수직 스크롤은 일반적으로 스캔 라인 높이가 1개인 ACTIUS Mode F에는 유용하지 않습니다.그러나 Mode F 디스플레이 목록 명령에 대해 수직 스크롤이 활성화되고 VSCROL 레지스터가 13으로 설정된 경우, 안티콘의 라인 카운터는 13 ~ 0(4개의 스캔 라인—13, 14, 15, 0)으로 카운트됩니다.이 때, 안티키는, 같은 화면 메모리를 다시 읽어 들이지 않고, 내부 버퍼로부터 스캔 라인 마다 같은 행의 그래픽스를 출력한다.수직 스크롤 영역의 끝에는 VSCROL을 3으로 재설정하여 ATCH가 0부터 3까지(스캔 라인 4개) 카운트할 수 있도록 해야 합니다.최종 결과는 Mode F 디스플레이입니다. 이 경우 라인의 높이는 1개가 아니라 4개이지만 DMA 오버헤드는 첫 번째 스캔 라인에서 1개의 화면 메모리 데이터 읽기만 발생합니다.
이용할 수 없는 행동
Mode 8/Mode 9 수평 스크롤 파손
일반 플레이필드 폭 또는 넓은 플레이필드 폭을 사용하여 다른 모드의 수평 스크롤 라인을 바로 따라갈 경우 안티 맵 모드 8 및 9가 손상됩니다.Mode 8 또는9 행이 수평으로 스크롤되는지 여부에 관계없이 이 문제가 발생하지만 파손 결과는 각 경우에 따라 다릅니다.이 문제는 특정 HSCROL 값에서 나타나며, 이로 인해 안티C가 픽셀을 잘못 출력하여 Mode 8-9 행이 잘못 정렬됩니다.
폭이 좁은 플레이필드를 사용하면 버그가 발생하지 않습니다.
- Mode 8 또는 9가 수평 스크롤을 사용하지 않는 경우 다음과 같이 하십시오.
- 모드 2, 3, 4, 5, D, E, 또는 F, HSCROL은 $A, $B, $E 또는 $F입니다.그 후 모드 행에서 파손이 계속됩니다.
- 모드 2, 3, 4, 5, D, E, 또는 F, HSCROL은 $C 또는 $D입니다.그러면 2개의 스캔 라인 내에서 파손이 해결됩니다.
- 모드 6, 7, A, B 또는 C, HSCROL은 $E 또는 $F입니다.모드 행 전체에 걸쳐 파손이 계속됩니다.
- Mode 8 또는 9가 수평 스크롤을 사용하고 있으며 다음과 같은 경우:
- Mode 2, 3, 4, 5, D, E 또는 F: 손상되면 3개의 스캔 라인 내에서 자동으로 해결됩니다.
- Mode 6, 7, A, B 또는 C: 두 스캔 라인 내에서 손상이 자동으로 해결됩니다.
문제의 원인이 되는 HSCROL 값이 7보다 크므로 모드8 또는 9가 수평 스크롤을 사용하지 않을 때 HSCROL의 컬러 클럭을 0 ~7로 제한하고 표시 리스트의 LMS 주소를 수평으로 거칠게 스크롤하도록 조금씩 갱신함으로써 문제를 회피할 수 있습니다.이 전략은 모든 텍스트 모드와 화면 메모리의 바이트당 8개 이하의 컬러 클럭을 생성하는 A부터 F까지의 모든 맵모드의 모든 케이스를 해결합니다.
고해상도 라스트 라인 버그
디스플레이 목록은 마지막 표시 가능한 스캔 라인인 스캔 라인 247에 고해상도(Mode F) 명령을 사용하여 작성해서는 안 됩니다.DMACTL Playfield Width 비트가 00이 아닌 경우, 안티C는 수직 동기화를 올바르게 생성하지 않아 디스플레이 왜곡이 발생할 수 있습니다.어떤 경우든, 이것은 모드 선이 일반적으로 보이지 않는 오버스캔 영역에 배치되기 때문에 실용적인 표시 목록 배열이 아니기 때문에 피하기 쉽습니다.
와이드 플레이필드 수평 미세 스크롤
수평 미세 스크롤 디스플레이 목록 수정자는 디스플레이로 스크롤하는 데 필요한 데이터를 제공하는 다음으로 큰 플레이필드 폭에 해당하는 추가 화면 메모리를 가져옵니다.Wide Playfield보다 큰 Playfield 폭은 없기 때문에 ACTC에는 미세한 스크롤을 위한 추가 데이터가 없습니다.ACTICT는 화면 이동에 의해 비워진 영역에 가짜 데이터를 표시합니다.디스플레이 왼쪽에는 배경색이 이동하며 오른쪽에는 랜덤 데이터의 몇 가지 색상 클럭이 스크롤 범위의 끝에 표시됩니다.이 픽셀 데이터는 일반적으로 볼 수 없는 오버스캔 영역에서 발생하기 때문에 일반적으로 눈에 띄지 않습니다.그러나 이러한 잘못된 플레이필드 픽셀이 Player/Missile 픽셀과 교차하는 경우 충돌 플래그가 지정됩니다.오버스캔 영역으로 이동한 플레이어/미스를 위한 해결책은 위치를 0으로 재설정하여 디스플레이에서 제거하여 잘못된 충돌을 방지하는 것입니다.
「 」를 참조해 주세요.
레퍼런스
- ^ Atari Home Computer Field Service Manual - 400/800 (PDF). Atari, Inc. pp. 1–8.
- ^ Neubauer, Doug (2009-06-20). "The Atari Years, by Doug Neubauer. Star Raiders, Solaris and Pokey". DougNeubauer.com.
- ^ 미국 특허 4296476, Mayer, Steven T., Miner, Jay G.노우바우어, 더글러스 G;Decuir, Joseph C., 1981-10-20 발행, Atari, Inc.에 할당된 "프로그래머블 그래픽스 생성기를 갖춘 데이터 처리 시스템"
- ^ Michael Current, "SALLY, ATCH, CTIA/GTIA, POKEY, 및 FREDDI 칩이란?", Atari 8비트 컴퓨터:자주 묻는 질문
- ^ a b Boris, Dan. "Atari Chips". Dan B's Home Page. Retrieved 2011-02-01.
- ^ Vendel, Curt. "Atari 800XLCR". AtariMuseum.com. Archived from the original on 2011-09-13. Retrieved 2011-02-01.
- ^ Vendel, Curt. "KERI Performance Tester". AtariMuseum.com. Archived from the original on 2011-09-13. Retrieved 2011-02-01.
외부 링크
- 아타리 프로그램 거래소에서 발행하는 데레아타리
- Ian Chadwick의 개정판 Atari 지도 작성
- 안티 칩 데이터 시트가 PDF로 스캔되었습니다.