* FPGA 보드인 Tang Nano 20K를 이용한 패미클론 

* SD카드 롬파일 구동, HDMI 출력

* PS2 패드 어댑터를 이용하면 플스 패드를 컨트롤러로 사용 가능

  (ESP32 보드를 추가하여 BlueRetro 사양으로 만들면 블루투스 패드를 컨트롤러로 사용 가능)

* 전원은 USB-C (ESP32 추가시 마이크로 USB로도 가능)

 

* 준비물

  Tang Nano 20K(알리익스프레스/26.99$) : https://shorturl.at/fgkBD

  ESP32(알리익스프레스/3.64$) : https://shorturl.at/rstOR

  NESTang : https://github.com/nand2mario/nestang/archive/refs/heads/master.zip

  GOWIN Programmer : https://cdn.gowinsemi.com.cn/Gowin_V1.9.8.11_Education_win.zip

  BalenaEtcher : https://etcher.balena.io/

  파이썬(3.7 이후 버전 필요. 패미컴 게임 롬파일을 NESTang용으로 합쳐서 변환할 때 사용) : https://www.python.org/downloads/

  BlueRetro : https://github.com/darthcloud/BlueRetro

  Flash Download Tools : https://www.espressif.com/en/support/download/other-tools

 

* 제작순서

  1) Tang Nano 20K 보드를 USB로 PC에 연결

  2) NESTang 파일을 받아 임의의 폴더에 압축해제

  3) GOWIN 프로그램을 받아서 설치 후 실행

  4) 다음 표시 순서에 따라 클릭하고 화면에 나온 대로 선택해준 뒤, 그림의 6번 부분을 눌러서 아까 풀어준 NESTang 폴더 안의 nestang-0.5.fs 파일을 선택하고 Save한 뒤 위쪽 9번의 Program/Configure 버튼을 눌러서 보드에 기록해준다

  5) Flash Download Tools를 다운받고 임의의 폴더에 압축 해제

  6) ESP32 보드를 마이크로 USB 케이블로 PC에 연결. 케이블의 품질이 낮을 경우 데이터 전송이 안되는 경우가 있으므로 질이 좋은 케이블을 사용하고 데이터 전송이 확실히 되는지 확인할 것

  7) flash_download_tool_3.x.x.exe 파일을 실행

  8) DOWNLOAD TOOL MODE라는 팝업창이 뜸. 제일 위의 ChipType을 ESP32로 바꿔주고 OK 클릭

  9) 툴이 실행되는데 위 3줄을 다음 그림과 같이 설정. 각각 옆의 점 3개 버튼을 클릭하여 해당 bin 파일을 찾아서 선택해줌. hw1과 hw2가 있는데 hw1을 선택할 것

 

 

  10) 아래쪽의 COM 포트를 연결한 ESP32 보드에 맞게 설정. 모르겠으면 제어판의 장치 관리자에서 포트 항목을 찾아보거나, 보드를 연결했다 해제했다 하면서 어떤 포트가 추가되는지 확인해보면 된다

  11) 다 되었다면 START 버튼을 클릭하여 BlueRetro 펌웨어를 기록

  12) 기록이 끝나면 툴을 종료하고 USB 연결을 분리했다가 재연결해본다. 파란 LED가 천천히 깜박이면 설치 성공한 것임

  13) ESP32 보드와 Tang Nano 보드를 연결한다. 아래 그림을 참고. ESP32의 VIN 단자는 Tang Nano 보드의 5V 단자로 연결. GND도 패드 연결부 말고 5V 바로 밑에 있는 GND 단자로 연결해준다. 파란색이 1P, 빨간색이 2P 패드 연결이 된다. 그림에는 1P, 2P 각각 핀 9도 표시되어 있는데, NESTang에서는 핀 9는 사용하지 않으므로 무시한다

 

 

  13) 파이썬이 설치되어 있지 않다면 설치해줌. 설치되었으면 윈도우의 명령 프롬프트(cmd)를 실행시키고 pip install pillow 명령을 실행

  14) 명령 프롬프트에서 NESTang 폴더 안의 tools 폴더로 이동한다

  15) 원하는 게임 롬파일을 tools 폴더 안에 복사해넣고 적당히 이름을 바꿔준다(가급적 짧게. 그러나 어떤 게임인지 알 수 있도록)

  16) 명령 프롬프트에서 nes2img.py -o games.img 롬파일1.nes 롬파일2.nes 롬파일3.nes (이후반복) 라고 입력한다

  17) tools 폴더에 games.img 파일이 생성되었는지 확인

  18) 생성되었다면 BalenaEtcher를 설치, 실행

  19) 위에서 만든 tools 폴더의 games.img 파일을 불러오고, SD 카드를 선택해 플래싱한다

  20) 플래싱이 끝나면 SD카드를 빼서 Tang Nano 20K 보드에 삽입한다

  21) HDMI선을 모니터에 연결하고, USB 전원을 연결하여 켜본다. Tang Nano의 USB-C 단자보다는 ESP32의 마이크로 USB 단자로 전원을 연결하는 것이 좋다(발열이 좀 덜함). 롬파일 리스트 화면이 잘 출력되는지 확인

  22) 화면이 잘 나온다면 ESP32의 파란색 LED가 잘 점멸하고 있는지 확인한 후, 블루투스 연결이 가능한 PC/태블릿/스마트폰 등으로 http://blueretro.io 에 접속해본다

  23) 위에서 둘째줄의 BlueRetro Advance config를 클릭하고 Connect BlueRetro 버튼을 누른다. BlueRetro_PSX_xxxx 라는 이름으로 블루투스 연결이 뜨는지 확인하고 보이면 선택해서 페어링해준다

  24) Global Config의 System 항목을 PSX로 선택해준 뒤 그 Global Config에 있는 Save 버튼을 클릭한다. 그 이후 USB 케이블을 한번 빼서 전원을 껐다가 다시 연결해주고 System 항목이 PSX로 잘 설정되어 있는지 확인한다. 안되어있다면 한번 더 반복해준다

 

  25) 아래쪽 Mapping Config 부분에는 빈칸이 많이 있는데 오른쪽의 - 버튼을 클릭해서 빈칸을 전부 지운다

  26) Src label 부분은 PSX, Dst label 부분은 사용하려는 블루투스 패드의 타입에 맞게 골라서 선택한다

  27) 위 사항들이 다 되었으면 제일 밑의 Save 버튼을 클릭해 저장해준다. 이때는 전원을 껐다 켤 필요는 없다

 

  28) 사용하려는 블루투스 패드와 ESP32를 페어링한다. ESP32의 BOOT 버튼을 길게 누르면 빠르게 점멸하면서 페어링 상태가 된다. 만약 8BitDo 같은 다용도 블루투스 패드를 사용할 경우 Xinput 모드로 설정해서 페어링할 것. 다른 모드로 해도 페어링은 되나 조작이 안된다.

  29) 무사히 페어링이 되었다면 NESTang의 롬리스트 파일에서 원하는 롬을 선택하고 기동이 잘 되는지 확인해본다. 

 

 

* 발열

   작동은 잘 되나 발열이 꽤 있다. 안정적인 사용을 위해서는 쿨링팬을 장착해주는 것이 좋다. 팬은 DC 5V짜리를 사용. 

   Tang Nano 보드의 5V와 GND 단자를 사용해서 연결해주면 전원 연결과 동시에 팬이 작동한다.

 

* NES 파일 로더

   NESTang의 제작자는 롬파일들을 묶어서 이미지파일화 시킨 후 통째로 플래싱하는 방식을 사용하는데, 이것은 롬파일을 추가하거나 작동하지 않는 롬파일을 삭제할 때마다 매번 이미지 파일로 묶는 과정을 거쳐야 해서 비효율적이다. 제작자 본인은 이 점을 딱히 개선할 생각이 없어 보이고, 다른 유저 Chandler Klüser가 별도의 보드를 추가하고 리눅스에서 로더를 관리하여 롬파일을 바로 로드할 수 있는 형태로 개조했다. 

   1) 추가 보드를 마련하고 리눅스 설치. Chandler는 오렌지 파이 제로 보드에 Armbian을 설치하여 사용했다.

   2) SSH나 wifi 등 사용환경이 마련되면 패키지들을 업그레이드한 뒤, NESTang의 저장소를 다운받는다. (git clone https://github.com/nand2mario/nestang.git) 

   3) 저장소 다운로드가 완료되면 그 속의 /nestang/loader 폴더로 들어간 뒤 로더를 컴파일한다. (make)

   4) 컴파일이 되고 나면 로더를 실행해본다. (./loader) 문제없이 실행되고 사용법이 출력되면 OK.

   5) loader 폴더 안에 games 폴더를 만든다. (mkdir games)

   6) openFPGALoader를 컴파일하기 위해서 필요한 패키지들을 설치해 준다. (apt install libftdi1-2 libftdi1-dev libhidapi-hidraw0 libhidapi-dev libudev-dev zlib1g-dev cmake pkg-config make g++)

   7) 루트 폴더로 간 뒤 openFPGALoader 저장소를 다운받는다. (git clone https://github.com/trabucayre/openFPGALoader.git) 

   8) 다운받은 openFPGALoader 폴더로 들어간 뒤 build 폴더를 만들어 준다. (mkdir build)

   9) 만든 build 폴더로 들어간다. (cd build)

 10) openFPGALoader를 빌드한다. (cmake .. -> cmake --build .)

 11) 빌드한 openFPGALoader를 설치한다. (make install) 

 12) 루트 폴더로 간 뒤 nestang/loader/games 폴더 안에 롬파일들을 넣는다. 

 13) 리눅스 보드의 USB 단자와 Tang Nano 보드의 USB 포트를 연결한다. 라즈베리 파이 제로의 경우 보드 뒷면의 단자를 사용할 수 있다.

 

'Consoles > FC' 카테고리의 다른 글

디스크 시스템 에뮬레이터 FDSKey  (0) 2023.06.15
전원부 및 AV단자 교체  (0) 2023.05.29

+ Recent posts