2019년 8월 13일 화요일

터틀몬 어드벤쳐 ROM 추출 프로젝트 (3부: 칩 분석)


 이전 글에서 CHR-ROM으로 추정되는 오른쪽 칩의 분리를 진행하였다. 비록 왼쪽은 실패하였지만, 다른 터틀몬 기기를 구할 때까지 오른쪽 칩의 데이터 추출부터 진행하기로 하였다. 하지만 그 전에 칩에 대해서 먼저 알아보아야 한다.

1. 목표

 플래시의 데이터를 읽을 수준까지 칩에 대해서 조사한다.

2. 실행

CHR-ROM으로 추정되는 칩. 크기는 27.7mm*15.8mm

 먼저 칩의 구조를 살펴본다. 크게 두가지로 나누어 가운데에 있는 실제 칩과, 그 아래의 어댑터 기판으로 나눌 수 있다. 어댑터는 핀 간격과 갯수로 보아 1.27mm SOP44임이 확실하나, 이렇게 너비가 넓은 단일 칩은 찾아볼 수 없었다. 또한 이 어댑터에 관한 정보도 찾아볼 수 없었다. 대신 핀이 44개 있는 ROM의 핀맵을 무작정 구해보려 검색하였다.

2-1. 어댑터 기판


왼쪽 출처 : 링크, 오른쪽 출처는 놓쳐버리고 말았다.

 마구 검색하다 찾은 두개의 이미지이다. 왼쪽은 세가 메가드라이브 게임팩에 쓰였던 ROM의 핀맵이고, 오른쪽은 어떤 포럼의 첨부파일에서 찾은 정체모를 칩의 핀맵이다. 정체를 모르는 만큼 위험하다 생각할 수도 있었으나 칩의 비율과 핀의 모양이 현재 찾는 어댑터의 너무 비슷하여 왠지 믿음이 가게 되었다. 어쩌면 이 어댑터의 실제 핀맵일지도? 그리고 왼쪽의 게임팩 핀맵과도 주요 핀은 완벽히 일치했기 때문에 그리 위험하다는 생각은 들지 않았다. 이제 그저 맞기를 바랄 뿐이다.(최소한 GND의 위치는 난도질한 보드에서 미리 체크해 보았다)

2-2. 실제 칩

 이제 실제 데이터를 담고 있을 검은 칩에 대한 정보를 캐낼 차례이다. 칩 위에 적힌 M41000002W를 검색하면 AMD사의 Am41DL32x8G라는 모델로 이어진다. 32Mbit 플래시와 8Mbit 램이 합쳐진 칩이다. 3.3V가 최대 공급 전압이라니 주의해야겠다.

데이터시트의 개요 부분

 플래시를 다뤄본 적은 없었던 관계로 OE# 같은 이상한 핀들을 검색해 보았다. 블럭 다이어그램과 핀 설명이 적힌 페이지를 넘어 어떤 표에 도착하였다. 자세히 읽어보니 각 작업마다의 핀 설정을 자세히 적어놓은 표였다. 여기에는 플래시를 읽을 때의 설정도 적혀있었다.

(찾았다?)

 문제는 그 아래에 비슷하게 생긴 표가 3개나 더 있었다는 것이었다. 각 내용은 조금씩 달랐지만 전체적으로 똑같아 보였다. 그래서 표의 위쪽을 읽어보니 플래시와 램의 모드에 관한 설명이 적혀있었다. Word mode..?? 나에게는 새로운 것이었다. 바로 검색에 들어갔다.

(언젠가 단골이 되어버렸다)

 설명을 요약하자면 다음과 같다:
  • Byte : 8비트
  • Word : CPU가 한번에 처리할 수 있는 비트 수
 기억을 되짚어 보니 예전에 PIC 마이크로컨트롤러를 공부해보다 잠깐 본 적이 있었던 것 같기도 하다. 그러나 그때는 8비트 프로세서여서 살짝 검색만 해 보고 크게 신경쓰지 않았나 보다.
 표를 다시 보니 각 표마다 플래시와 램의 모드가 전부 다른게 보였다. 그리고 byte모드일때는 D7 - D0만 사용되고, word모드일때는 D15 - D0이 전부 사용되는 것도 확인할 수 있었다. 16비트 단위로 한번에 처리가 가능한 모양이었다. 

 그런데 뭔가 이상하였다. 32Mbit 플래시를 전부 읽으려면 word모드는 21개면 충분하지만 , byte모드는 최소 22개의 주소 핀이 있어야 한다. 즉, A0부터 시작하였다면 A21까지는 있어야 한다. 위에서 찾은 핀맵에서도 찾을 수 있다. 그러나 데이터시트 어디서도 A21은 찾아볼 수 없었다. 대신 A-1이라는 요상한 핀이 있었다.

(너 누구니?)

 A0의 두번째 핀인가? 같은 이상한 생각이 머리를 스쳐갔지만 나중에 찾아보니 아래에 설명이 적혀있었다. 역시, 빠진게 없었다.

(없는거 빼고 다 있다)

 요약하자면 byte모드일때는 D15핀이 주소의 LSB 역할을 하고, word모드일때는 D15핀이 데이터 입출력 역할을 한다는 말이었다. 말로만 하니 좀 헷갈려서 그림으로 정리해보았다.


 이렇게 보았더니 이렇게 단순한 칩에서도 핀 수를 늘리는 대신 쓰지 않는 핀을 여러 용도로 사용한다는 것이 신기했다. 그리고 A-1이 A0에서 한 칸 음수로 가서 나온 이름이라는 것도 알아냈다.

 잠깐, 그렇다면 여기서 사용할 건 어떤 모드일까? 당연히 byte모드일 것이다. 맨 위 사진에서 보듯이, D8-D14는 납땜조차 되어 있지 않았으니 말이다. 그렇다면 아까의 표 중 3번째나 4번째의 것중 하나를 보면 된다. 만약 게임기가 램도 같이 사용했다면 byte모드일 것이므로 4번째 표를 선택하였다.

(편리하게도 맨 윗줄이다)

 보다시피 2-1의 오른쪽 핀맵에 대한 확신을 더해준다. CE#(CE#f), OE#, WE#의 이름이 완전히 똑같다. 게임기가 이 칩의 램을 반드시 사용한다는 보장은 없으므로 표시된 CE#은 CE#f(flash)로 해석하였다.
 이 표에 의하면 CE#, OE#은 LOW, WE#은 HIGH상태로 설정하면 플래시를 읽는 모드가 된다. 다른 핀들은 이미 어댑터 기판에서 GND로 연결되어 있을 것이라고 추측하였다.

3. 결론

  • 추정되는 핀맵을 찾았다.
  • 데이터 전송에서의 word mode와 byte mode를 배웠다.
  • 플래시를 읽으려면 해야 하는 설정을 알아내었다.

이제 사전 조사는 충분하다. 코딩에 돌입한다.

4부에서 계속...

댓글 없음:

댓글 쓰기