나만의 Commodore 64 카트리지 만들기
“라고 생각해 본 적 있나요?IEEE Spectrum은 훌륭하지만, 지역 과학 기술 박물관에서 더 많은 것을 경험할 수 있는 방법이 있었으면 좋겠어요.” 글쎄요, 당신의 아주 구체적인 소원이 이루어졌다는 소식을 전하게 되어 기쁩니다! IEEE 역사센터, IEEE 글로벌 박물관과의 협력과 아낌없는 기부자들의 지원으로, 스펙트럼의 칩 명예의 전당(Chip Hall of Fame)은 이제 막 미국 박물관은 물론 전 세계를 순회하는 전시로 바뀌었습니다.
우리의 칩 명예의 전당은 중요한 영향을 미친 마이크로칩을 기념합니다. 홀에 있는 칩 중 6개는 각각의 사용 방법을 구현한 유물과 함께 “세계를 뒤흔든 칩” 전시의 일부로 선정되었습니다. 선택된 것 중 하나는 8비트 6502 프로세서였기 때문에 당연히 우리는 6502 변형을 사용하는 Commodore 64 가정용 컴퓨터가 인공물 중 하나여야 한다고 생각했습니다. 이는 또 다른 생각으로 이어졌습니다. C64에서 8비트 CPU가 작동하는 것을 보여주는 프로그램을 실행하면 어떨까요?
이것이 바로 C64를 마지막으로 프로그래밍한 지 35년 후, 사무실 책상에 앉아 새로운 플러그인 카트리지를 만들게 된 이유입니다.
C64는 소프트웨어 배포 방식으로 플러그인 카트리지를 지원했고 우리의 데모 프로그램도 여기에 포함되어야 했습니다. 매일 아침 박물관 큐레이터는 전시물을 켜기만 하면 됩니다! 데모 프로그램이 즉시 실행되기 시작합니다. 대안을 사용하려면 큐레이터가 명령을 입력하여 데모를 수동으로 로드해야 했습니다.
그러나 이러한 편리함에는 두 가지 큰 주의 사항이 있습니다. 하나는 데모가 카트리지의 최대 크기인 16KB에 맞아야 한다는 것입니다. 1980년대 기준으로도 이는 작은 규모입니다. 일부 C64 타이틀은 디스크나 테이프에서 데이터를 청크 단위로 로드하여 수백 킬로바이트에 달하기 때문입니다. 둘째, 데모는 6502 어셈블리로 작성되어야 하며 C64 비디오 하드웨어를 직접 제어해야 합니다.
카트리지에는 몇 가지 구성 요소만 필요합니다: 인쇄 회로 기판 [bottom right]프로그래밍 가능한 메모리 칩 [bottom middle]일부 저항기, 다이오드 및 커패시터 [top middle]. 3D 프린팅된 쉘에 장착됩니다. [top left and right]. 비디오 출력이 최신 화면과 호환되도록 하기 위해 RetroTink-2X Pro 어댑터를 사용했습니다. [bottom left].제임스 프로보스트
다행스럽게도 수년에 걸쳐 Vintage Computer Federation 이벤트에 참석하면서 이러한 종류의 작업을 그 어느 때보다 쉽게 수행할 수 있는 무료 또는 저렴한 리소스가 많이 있다는 것을 알았습니다.
첫 번째 단계는 16KB로 얼마나 많은 작업을 수행할 수 있는지 파악하는 것이었습니다. C64의 그래픽 하드웨어는 당시 획기적이었습니다. 16가지 색상 팔레트로 최대 320 x 200 픽셀의 이미지를 표시할 수 있었습니다. 또한 한 번에 8개의 스프라이트를 표시할 수도 있습니다. 각 스프라이트는 이동 가능한 단색 24×21 픽셀 비트맵입니다. 이 힘의 대가는 복잡성이었습니다. 비디오 칩의 제어 레지스터, 화면 비트맵, 텍스트 화면 데이터, 기본 및 사용자 정의 문자 세트, 스프라이트 및 색상 정보는 모두 메모리 전체에 흩어져 있는 서로 다른 위치에 있으며 일부 데이터는 실제로 별도의 RAM 및 ROM 칩에 있습니다.
그래서 나는 C64에 사용할 수 있는 자세한 메모리 맵과 비디오 하드웨어 프로그래밍 가이드를 가지고 자리에 앉았습니다. (이러한 풍부한 정보는 Commodore 자체에서도 문서가 부족했던 1980년대와는 극명한 대조를 이룹니다.) 나는 설명 텍스트, 애니메이션 그래픽, 스프라이트로 구성된 9개의 화면을 꽉 채울 수 있다는 것을 알아냈습니다. petcii.krissz.hu의 온라인 C64 그래픽 편집기 덕분에 의존하는 사용자 정의 문자 세트 및 스프라이트를 포함하여 이러한 화면을 만드는 것이 크게 단순화되었습니다. 편집기는 일부 결과를 독립 실행형 어셈블리 프로그램으로 출력할 수 있으며, 이를 데모 코드의 서브루틴으로 적용했습니다.
운 좋게 찾을 수 있을 만큼 충분한 공간이 남아 있었습니다. 하나 이상의 전체 화면 비트맵 이미지를 표시하고 싶었지만 사전 렌더링된 이미지에는 카트리지 용량의 절반인 8KB의 데이터가 필요했습니다. 대신에 나는 다음과 같은 게임 시절부터 고전적인 프로그래머 해킹을 사용하기로 결정했습니다. 악당 그리고 엘리트: 절차적 생성을 통해 수학 구조에서 무료 데이터를 추출합니다.
여기서 운이 좋았습니다. 단 3.3KB의 코드를 사용하여 다색 프랙탈 만델브로 집합을 신속하게 생성한 C64 어셈블리 프로그램의 소스를 게시한 Marcello M.의 작업을 발견했습니다. Marcello의 축복을 받아 그의 코드를 또 다른 서브루틴으로 통합했습니다.
C64 소프트웨어 작성을 위한 최신 도구
코딩은 무료 IDE 65xx 및 Kick Assembler 데스크탑 소프트웨어를 사용하여 수행되었습니다. 인기 있는 C64 Vice 에뮬레이터를 사용하여 코드를 테스트할 수 있었는데, 이를 통해 런타임 버그를 찾기 위해 라이브 메모리 내용을 검사하는 등의 편리한 작업을 수행할 수 있었습니다.
Commodore 64의 RAM 영역은 시스템 ROM, 비디오 컬러 메모리 및 문자 비트맵과 같은 항목에 매핑되었으며, 문자 비트맵은 실제로 비디오 하드웨어에서 액세스할 때 RAM의 여러 위치에 매핑되었습니다. 이러한 매핑 중 일부는 겹쳤습니다. 16KB 카트리지를 삽입하면 기본 인터프리터를 저장하는 ROM이 자동으로 비활성화됩니다. 제임스 프로보스트
다음 단계는 물리적 카트리지를 만드는 것이었습니다. 이번에도 현대적인 도움이 있습니다. 이번에는 카트리지를 만들기 위해 납땜된 몇 가지 구성 요소만 필요한 미화 5달러의 인쇄 회로 기판 형태입니다. 이 구성요소에는 제가 선택한 프로그래밍 가능 ROM 칩이 포함되어 있습니다. 이베이에서 3달러. 나는 믿음직한 사람과 함께 메모리 칩에 내 코드를 태워버렸습니다. TL866 프로그램 PCB에 장착하고 다시 PCB에 장착했습니다. 3D 프린팅 카트리지 케이스.
그러다가 진실의 순간이 왔습니다. 내가 이미 RetroTink-2X Pro 어댑터를 통해 최신 평면 스크린 디스플레이에 연결하는 오리지널 C64를 소유하고 있다는 사실이 일반 독자들에게는 놀라운 일이 아닐 것입니다. 그래서 조심스럽게 카트리지를 슬롯에 밀어넣고 기계를 켰습니다.
당연히 내 C64는 즉시 얼어 붙었습니다. C64의 기본 인터프리터를 저장하는 ROM을 비활성화하여 Vice 에뮬레이터에서 데모 작업을 수행하는 약간의 메모리 관리 코드를 제거하는 것을 잊었습니다. 실제 하드웨어에서는 이 조각으로 인해 카트리지 메모리의 절반이 비활성화되었습니다. 빠르게 편집하고 TL866으로 돌아가서 다시 시도할 준비가 되었습니다. 성공! 마침내 말 그대로 여행용 디스플레이를 제작하는 사람들인 Upland Exhibits에 일부 소프트웨어를 배송할 준비가 되었습니다.
저의 작은 데모와 “세상을 바꾼 칩” 전시회를 직접 볼 수 있는 기회가 있기를 바랍니다. 현재 위치와 향후 위치는 칩 명예의 전당 페이지에 게시됩니다. 하지만 예전에 C64를 사용했든 아니면 단지 재미있는 코딩 과제를 찾고 있든, 이제 원래의 문제점이 많이 줄어들었으므로 이 8비트 클래식 프로그래밍을 시도해 보는 것이 좋습니다!
귀하의 사이트 기사에서
웹상의 관련 기사
Post Comment