문제

확인. 나는 25 년 동안이 호기심을 가지고 있기 때문에 그것이 문을 닫지 않기를 바랍니다. 나는 트릭을 이해하고 싶습니다.

Commodore 64에서 국경은 6569 Vic에 의해 해결 될 수 없었습니다. 커서가 움직이는 중앙 영역에 픽셀을 그리는 것뿐입니다. Poke 53280으로 색상을 바꿀 수는 있지만 테두리는 항상 균일했습니다.

그럼에도 불구하고 나는 테두리가 그래픽으로 표시된 게임 인트로를 분명히 기억합니다. 나는 그것이 어떻게 작동했는지 이해하려고 노력했지만 결코 그 요점에 도달하지 못했습니다. 전설에 따르면 어떤 상황에서도 국경에 끌릴 수있는 스프라이트를 영리하게 사용했다고 말하지만 도시 전설인지는 모르겠습니다.

편집하다: 제공된 링크 중 하나에서 이것을 읽으십시오.

스프라이트는 수직 래스터 라인 (8 개 이상의 스프라이트, 때로는 최대 120 개의 스프라이트)을 통해 다중화되었습니다. Crest가 2007 년 5 월 Krestage 3을 출시 할 때까지 8 개 이하의 스프라이트가 하나의 래스터 라인에 나타날 수 없다는 일반적인 인식이 있었지만 새로운 Y 좌표를 할당하면 화면 아래로 다시 등장했습니다.

이것은 사악합니다 .... 당신은 래스터를 이기고 스프라이트가 도착하기 전에 재배치합니다 ...

도움이 되었습니까?

해결책

첫째, 스프라이트 만 국경 영역에 표시되거나 반복되는 8 비트 패턴 (8 픽셀 폭) (일반적으로 $ 3fff)의 마지막 바이트에서 읽을 수 있습니다. VIC 칩을 테두리를 "표시하지 않는"상태로 속일 때만이 스프라이트 또는 8 비트 패턴 만 볼 수 있습니다. 아래를 참조하십시오.

국경은 스프라이트보다 우선 순위가 높기 때문에 일반적으로 스프라이트가 국경 영역에 그려 질 때 국경은 스프라이트를 덮습니다. 약간의 VIC 칩 속임수를 사용하면 경계를 끄질 수 있습니다.

상단과 하단 테두리를 아주 쉽게 끄고 (아래에서 설명하겠습니다) 측면은 매우 중요한 타이밍으로 테두리를 끄십시오.

첫째, VIC 칩이 C64에서 어떻게 작동하는지에 대한 약간의 정보.

VIC 칩은 화면을 왼쪽 상단에서 오른쪽 상단으로, 선 아래로, 왼쪽에서 오른쪽으로 전체 화면이 그려 질 때까지 다시 끌어냅니다. 이 재생물을 초당 50 회 (PAL 유닛의 경우) 또는 (NTSC 유닛)의 경우 초당 60 배를 수행합니다.

주어진 시간에 래스터의 수직 위치를 포함하는 8 비트 VIC 레지스터가 있습니다. $ d012. 실제로 255 개 이상의 가능한 위치가 있으므로 9 번째 비트는 비트 7 (가장 높은 비트) 또는 등록 $ D011에 저장됩니다. 따라서 언제든지이 레지스터를 읽고 래스터의 수직 위치를 찾을 수 있습니다. 래스터의 X 위치를 읽을 수있는 사용 가능한 레지스터는 없습니다.

VIC 칩의 또 다른 멋진 기능을 사용하여 하드웨어 스크롤링을 사용할 때 문제를 해결했습니다. 기본 수직 스크롤링은 하드웨어 레지스터를 사용하여 화면 0-7 픽셀을 수직으로 이동시켜 달성되었습니다. 한계에 도달하면 (스크롤 방향에 따라 0 또는 7) 각 문자 블록 (8x8 픽셀)을 수직으로 이동하고 새 데이터를 맨 위에 (또는 하단 방향에 따라)로 그립니다. 스크롤의 8 픽셀마다 데이터가 화면에 "팝"을 볼 수 있다는 점을 제외하고는 매우 잘 작동합니다. 이를 해결하기 위해 레지스터 $ d011에서 비트 3을 지우면서 국경 영역이 수직으로 8 픽셀로 성장할 수 있습니다. 이것을 24 행 모드라고합니다. 기본적으로 화면은 8x8 픽셀 문자의 25 행으로 설정되었습니다. 24 행 모드에서는 여전히 맨 아래 줄에 문자를 그릴 수 있으며 테두리에 숨겨져 있습니다.

따라서 상단과 하단 경계를 끄는 요령은 다음과 같습니다.

1) 화면을 25 행 모드로 설정하십시오

2) 래스터가 $ F2와 $ FA 사이의 수직 위치에 도달 할 때까지 기다립니다 (24 행 모드와 25 행 모드에서 테두리가 시작되는 곳 사이의 8 픽셀).

3) 화면을 24 행 모드로 설정 ... 경계의 수직 시작을 현재 래스터 위치 위로 이동

4) 수직 래스터 위치가 끝날 때까지 기다리십시오 ($ FA)

5) 각 프레임을 반복하십시오

3 단계) VIC 칩은 이미 국경을 그리기 시작했다고 생각하여 결코 그리기 시작하지 않습니다. Voila, 상단 및 하단 테두리가 열려 있습니다.

측면 경계와 관련하여 다른 레지스터로 동일한 작업을 수행 할 수 있지만 래스터의 수평 이동이 훨씬 빠르기 때문에 타이밍이 훨씬 더 단단해야합니다. 그리고 Jitter라는 또 다른 문제가 있습니다. <-나는 여기서 설명하지 않을 것입니다. 해당 문제에 대한 자세한 설명은 "안정적인 래스터 C64"에 대한 웹을 검색하십시오.

다른 팁

Krestage 3이 한 일은 (질문에서 언급했듯이) 다릅니다.

"종이"(작업 영역 사각형, 국경 내부의 물건)의 바닥이 막을 때 트릭의 한 수준은 테두리를 엉망으로 만드는 것입니다. 이것은 상단과 하단에 스프라이트를 가질 수있게합니다.

더 높은 수준은 위의 Johnd의 답변에 설명 된 것처럼 모든 래스터 라인에서 용지의 오른쪽 가장자리에서 엉망이되는 것입니다. 이것은 왼쪽과 오른쪽 테두리에 스프라이트를 가질 수 있습니다.

이 중 어느 것도 한 줄에 8 개 이상의 스프라이트를 가질 수 없습니다. 그것은 단지 크레스트 매직입니다.

VIC 칩에 대한 최고의 리소스 (내가 알고있는)는 "MOS 6567/6569 비디오 컨트롤러 (VIC-II) 및 Commodore 64의 응용 프로그램" Christian Bauer와 유용한 부록이 있습니다 "MOS 6569 VIC-II 및 MOS 8566 VIC-IIE 비디오 인터페이스 컨트롤러의 메모리 액세스" Marko Mäkelä.
경고 Lector : 이것들은 다소 기술적이며, 빅 효과를 스스로 프로그래밍 한 후에는 이해하기가 더 쉽다는 것을 알 수 있습니다.

링크가 죽으면 제목으로 기사를 구글로 올리면 끝없이 복제되었습니다.

간단한 기본 프로그램으로 상단 및 하단 테두리를 열 수 있습니다.

    1 poke56334,0:poke53266,212:poke53265,27:poke16383,0
    2 h=53265:i=53273:h1=19:h2=27:i1=1
    3 pokei,i1:waiti,i1:pokeh,h1:pokeh,h2:goto3

나는 여기서 어둠 속에서 찌르기를 할 것입니다 (이것을 직접하지 않았습니다). 나는 이것을 Wikipedia에서 발견했다.

그만큼 C64DEMO 섹션 그것을 설명합니다 :

데모에서 불가능하다고 생각되는 효과는 대부분 문서화되지 않은 부작용으로 인해 MOS 기술 VIC-II 칩. Vic-trickery의 몇 가지 예 :

언급 된 해킹 중 하나는 다음과 같습니다.

스프라이트 스크롤러가 테두리에 배치되었습니다. 스크린 주위에 테두리를 그리지 않도록 하드웨어를 속이면 스프라이트 가이 영역으로 이동하여 표시 될 수 있습니다.

물론, 질문의 흥미로운 부분은 어떻게 끝났는 지입니다. 나는 일부를 보는 것이 좋습니다 데모 데이터베이스 여기에는 해킹을 사용하는 데모를 검색하는 소스 코드가 포함됩니다.

"53280이었다."

내가 이해 한 바에 따르면, 이것은 스프라이트에만 가능합니다.

스프라이트는 국경 지역에있을 수 있으며 국경은 위에 끌려갑니다. 약간의 속임수를 통해 국경을 제거 할 수 있습니다.

테두리의 그래픽 : 스프라이트 또는 $ 3fff 효과 (실제로 스프라이트가 아님)를 사용합니다. 자세히 들어가려면 여기에서 사용할 수있는 것보다 훨씬 더 많은 공간과 시간이 필요합니다.

기본적으로 스프라이트를 테두리시킬 수도 있습니다. 테두리의 기본 스프라이트

IIRC, 비디오 칩을 혼동하여 26 번째 텍스트 라인을 그리는 방법도있었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top