04
19

이 글은 내용이 수정 및 분할되었습니다.

 

저는 고전게임과 구식 기계들을 좋아합니다. 제가 태어나기도 전에 출시된 것들이지만 어떻게든 체험할 기회는 몇 번 있었습니다. 초등학교 저학년 때 가던 소아과 대기실에 있던 불법 복제 패미컴이라든가요. 슈퍼 마리오 브라더스(그 게임기에는 '슈퍼보이'라는 제목으로 실려 있었습니다)나 배틀 시티를 하곤 했습니다. 중학생 때는 휴대폰에 설치한 슈퍼 패미컴 에뮬레이터로 심시티, 슈퍼 마리오 월드 등등 여러 게임을 했고요. 물론 롬파일 무단복제는 불법이겠지만...(미안해요, 닌텐도!)

 

요즘 나오는 게임기나 PC의 성능은 그런 고전 게임기의 수천 수만 배를 상회하지만, 고전 게임에는 고전 게임만의 매력이 있습니다. 픽셀 아트나 칩튠 음악(8비트 음악) 같이 고전 게임을 재현하려는 시도가 그 매력을 보여줍니다. 아직도 고전 게임기용 게임을 제작하는 사람도 있어요!

 

40KB만으로 패미컴 게임 만들기.

 

전 천성 공돌이이기도 해서 무언가 만드는 일을 좋아합니다. 그래서 Ben Eater 씨의 'Build a 65c02-based computer from scratch' 영상 시리즈를 보고 따라하고 싶다는 생각이 들었어요. 이 포스팅의 내용 대부분은 해당 영상 시리즈에 기반하고 있으니, 영어 리스닝이 가능한 분들은 꼭 한번 보시길 권합니다.

 

 

이 영상 시리즈에서 사용하는 Western Design Center 65C02 CPU는 유명한 고전 게임기인 닌텐도 패미컴(NES)과 코모도어 64에 사용된 MOS 6502 기종의 개량판입니다. 화면 출력 기능과 음성 출력 기능, 컨트롤러 입력 기능을 넣어 주면 8비트 게임을 충분히 돌릴 수 있다는 뜻입니다!

저는 신나서 부품을 장바구니에 쓸어담았습니다. 옥션이나 쿠팡은 아니고, 엘레파츠라는 전문 쇼핑몰에서요.

 

어이쿠.

...꽤 큰 지출이네요. 거기다 프로그래머(롬 라이터)를 사는 데 8만원을 더 썼습니다(이건 쿠팡에서 샀어요). 따라하고 싶으신 분이 있다면, Ben Eater 씨의 사이트에서 90달러에 6502 컴퓨터 킷트, 70달러에 프로그래머를 팔고 있습니다. 배송비를 포함해도 아마 엘레파츠보다 좀 더 싼 것 같네요(내 돈!). 링크는 여기.

 

아무튼 부품 한 무더기가 든 택배 상자가 도착하는 데 일주일이 걸렸습니다. 

 

한 번에 게임기를 전부 만들 수 있으면 시간이야 절약되겠지만, 구조가 복잡해서 그렇게 하기도 어렵고 짠! 완성되었습니다! 하면 볼 거리도 없으니 간단하게 LCD 화면에 Hello, world!를 출력하는 구조부터 만들어 보기로 했습니다. 무슨 부품이 필요할지 봅시다. 여기서는 간단하게 목록만 짚고 넘어가고, 각 부품의 동작에 대해서는 나중에 찬찬히 설명하겠습니다.

 

  • CPU - 컴퓨터에서 가장 중요한 장치이죠. 계산과 다른 기기의 제어를 담당합니다. WDC W65C02S를 사용했습니다.
  • ROM - 읽기만 가능한 저장 장치(Read Only Memory)입니다. 프로그램과 프로그램에 필요한 데이터를 저장합니다. Microchip AT28C256을 사용했습니다.
  • 인터페이스 어댑터 - CPU와 입출력 장치 사이를 중계합니다. CPU와 호환되도록 설계된 WDC W65C22S를 사용했습니다.
  • 캐릭터 LCD - 출력 화면입니다. 자체 메모리와 프로세서가 달려 있어 이진수 코드를 입력하면 해당하는 문자를 출력해 줍니다. 집에 굴러다니던 SparkFun 키트에서 ADM1602K-NSW-FBS를 꺼내 사용했습니다.
  • 클럭 생성기 - CPU와 다른 장치들이 작동하는 박자를 생성합니다. 1Mhz 수정 발진기를 사용했습니다.
  • NAND 논리 게이트 - ROM과 인터페이스 어댑터 제어를 위해 필요합니다. Texas Instruments SN74HC00을 사용했습니다.

 

회로도면은 다음과 같습니다. 롬과 LCD의 핀 번호는 도면을 그리기 쉽게 실제 순서와 다르게 그려져 있습니다.

도면을 그리기 위해 사용한 프로그램은 KiCad입니다. 여기서 다운로드받을 수 있습니다.

microcomputer_ROM_first.kicad_sch
0.14MB

도면 읽는 법을 설명해드려야겠죠. 각 구성요소에 대해 설명해 드리겠습니다.

 

와이어: 단순한 전선입니다. 다른 부품들을 서로 연결해 줍니다. KiCad에서는 녹색 실선으로 표시합니다. 선이 서로 만나는 곳에 찍힌 큰 점은 그곳에서 선이 서로 연결되었다는 뜻입니다. 즉 왼쪽의 교차점은 실제로는 두 선이 엇갈려 지나가고 연결되어 있지는 않다는 뜻입니다. KiCad에서 ` 키(따옴표가 아니라 숫자키 왼쪽에 있는 어퍼스트로피)를 누르면 같은 와이어를 분홍색으로 강조해서 표시해 줍니다.

 

버스: 전선 다발입니다. 도면 전체에 전선이 수십 수백 곳이 연결되어 있는데 전부 겹치지 않고 그리기는 어렵습니다. 그렇기 때문에 전선들을 한 다발로 묶어서 표시하는 쪽이 더 깨끗한 도면을 그릴 수 있습니다. KiCad에서는 파란색 굵은 실선으로 표시합니다. 와이어처럼 교차하는 버스가 서로 연결되어 있음은 굵은 점으로 표시합니다.

 

라벨: 전선의 이름입니다. 버스에 한 묶음으로 연결된 와이어를 서로 구분하기 위해, 와이어 위에는 라벨을 써서 표시합니다. 위의 그림에서 A0 라벨이 달린 가장 위쪽의 두 와이어는 서로 연결되어 있는 와이어입니다. `를 눌러서 같은 와이어를 강조 표시하면 두 라인이 동시에 강조되는 것을 알 수 있습니다.

 

전원과 접지: 회로에 전기를 공급하기 위한 요소입니다. 왼쪽이 전원, 오른쪽이 접지입니다. 접지는 회로 전체의 전압의 기준이 되는 지점으로, 이 지점의 전압을 0V로 해서 이보다 높으면 + 전압, 낮으면 - 전압이 됩니다. 전원은 접지를 기준으로 쓰여 있는 전압을 공급합니다. 이상적인 전원은 연결된 회로에 상관없이 같은 전압을 공급하나, 실제로는 회로가 소모하는 전류가 너무 클 경우 전압 유지가 되지 않을 수 있습니다.

 

저항기: 흐르는 전류의 양을 조절하거나, 전압의 크기를 조절하는 데 쓰입니다. 위에 쓰인 글자(R6)는 회로도면에서 몇 번째 부품인지 알아보기 편하도록 쓰여 있는 참조입니다. 그 밑에 쓰인 숫자(1k = 1000)는 저항기의 크기입니다. 이 저항의 크기는 1k옴, 혹은 1000옴입니다.

 

가변저항기(전위차계): 회로가 작동하는 중간에 크기를 바꿀 수 있는 저항기입니다. 1번과 3번 사이의 저항은 고정되어 있고, 2번 단자의 위치를 변경할 수 있어서 1~2의 저항과 2~3의 저항이 바뀝니다. 주로 1과 3을 전원에 연결하고 2를 장치에 연결해서 전등의 밝기나 스피커의 볼륨을 조정하는 등의 용도로 쓰입니다.

 

스위치:  일반적인 스위치입니다. 이 기호는 푸시 스위치로, 누르고 있을 때만 스위치가 닫히는 버튼형 스위치입니다.

 

축전기(커패시터): 약간의 전하를 저장하는 장치입니다. 초 초 초 미니 배터리라고 생각하시면 되겠습니다. 회로의 전압이 갑자기 변하는 것을 방지하는 등의 용도로 쓰입니다.

 

IC(집적 회로): 집적 회로는 칩이라고도 하는 회로 구성 요소입니다. 주로 많은 수의 반도체를 작은 공간에 장착하기 위해 쓰이는 부품으로, 우리가 쓰려는 CPU도 이 형태로 되어 있습니다. IC 위에 쓰여 있는 것은 윗줄은 알아보기 편하도록 있는 참조 표시, 아래쪽은 IC의 종류입니다. 사각형 안쪽에 쓰여 있는 것은 바로 옆에 있는 핀의 기능 이름, 핀 위에 쓰여 있는 것은 핀의 번호입니다. 가끔 핀의 이름 위에 줄이 그어져 있거나(위 그림의 IRQ, NMI, RESET 등) 혹은 핀 이름이 B로 끝나는(IRQB, RESETB 등) 핀은 이 핀의 입력/출력이 반전되어 있어서, 낮은 전압이 활성이고 높은 전압이 비활성이라는 뜻입니다.

IC는 전선을 연결할 수 있는 핀이 여러 개 달려 있기 때문에 회로도면에 그릴 때는 핀 번호를 전부 써넣습니다. 위의 그림에서는 모든 핀이 순서대로 배열되어 있지만, 도면에 그려져 있는 AT28C256 롬은 핀 번호와 그려진 순서가 서로 다르다는 것을 볼 수 있습니다. 이는 회로의 기능상 알아보기 편한 순서로 그려져 있기 떄문입니다. 실제 핀 배치는 1번 핀부터 시작해서 반시계 방향으로 셉니다. 1번 핀의 위치를 설명하기 위해서는 IC의 모양에 따른 종류를 보아야 합니다.

좌: DIP IC, 우: SMD IC

IC는 여러 가지 형태가 있는데, 위의 그림에 있는 왼쪽의 DIP와 오른쪽의 SMD가 그 예시입니다. 대체로 DIP는 핀 간 간격이 2.54mm로 고정되어 있고, SMD는 그보다 핀이 작고 간격이 짧기 때문에 SMD IC가 더 작고, 따라서 회로기판에 많이 장착하기에 더 유리합니다. 다만 이 글에서는 브레드보드 위에 조립하는 것이 메인이기 때문에 핀 간격이 브레드보드와 일치하여 꽂기 쉬운 DIP IC를 사용합니다.

DIP IC는 칩의 위쪽 방향이 오목하게 파여 있습니다. 위의 사진에서도 위쪽이 반원형으로 파여 있는 것이 보입니다. 이쪽을 위로 해서 왼쪽 가장 위의 핀이 1번 핀입니다. 핀 순서는 왼쪽 위->아래, 그 다음 오른쪽 아래->위입니다. 즉 오른쪽 가장 위의 핀이 마지막 번호입니다.

SMD는 예시 사진에서는 눈에 띄지 않지만 1번 핀이 있는 곳이 점 모양으로 파여 있습니다. 이곳의 핀을 1번으로 해서 반시계 방향으로 핀을 셉니다.

 

하나의 IC에 여러 개의 작은 회로가 같이 들어 있는 경우, 이를 작은 단위로 나누어서 그리기도 합니다. 이들이 같은 IC에 속한다는 것은 참조 표시의 앞부분이 같다는 것으로 알아볼 수 있습니다. 연결 핀의 번호는 동일한 방법으로 표기하기 때문에 핀 번호를 보고 순서대로 연결하면 됩니다.

 

이상 회로 구성 요소에 대한 설명이 끝났습니다. 조립은 다음 시간에 합시다. 그럼 안녕!

 

참조

영문 위키백과 - Electronic symbol

COMMENT