출처 : https://svenssonjoel.github.io/pages/zynqberry-vga/index.html

 

 

 

저항값은 정해져있지 않음. 단 2R은 R의 2배 정도로 해야 한다.

R : 270옴 (250옴도 가능)

2R : 560옴 (500옴도 가능)

RTERM(종단저항) : 29옴 (75옴도 가능)

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

라즈베리 파이 시리즈 외부 연결  (0) 2024.01.03
PICO-8 라즈베리파이 머신 만들기  (0) 2023.12.10
MachiKania type Z  (0) 2023.12.09
HDMI - Mini HDMI 케이블 제작시 배선  (0) 2023.12.09

1) SD카드에 라즈베리 파이 OS 설치
    - Raspberry Pi Imager 사용
    - OS 버전은 32비트 Bullseye Legacy 를 사용

2) 설치 및 업데이트를 모두 해준다

3) PICO-8을 다운로드한 뒤 압축을 풀어서 나오는 pico-8 폴더를 라즈베리 파이의 /home/pi 안에 넣는다
   미리 압축이 풀린 파일을 복사하면 실행이 안되므로 주의. 반드시 ZIP 파일을 다운로드한 뒤 라즈베리 파이에서 압축을 풀어줘야 한다
   (Permession Denied 에러 발생)

4) 라즈베리 파이의 설정을 열어 부팅 모드를 텍스트모드로 바꿔준다 (To CLI)

5) 자동 로그인을 설정해준다

6) 터미널을 열고 sudo nano /home/pi/.bashrc 를 실행한다

7) 마지막 줄에 sudo /home/pi/pico-8/./pico8_dyn -splore 를 입력한뒤 저장하고 종료한다

8) nano /boot/cmdline.txt 한 뒤 라인 끝에 다음 내용을 추가한다.
    consoleblank=1 logo.nologo quiet loglevel=0 plymouth.enable=0 vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fastboot noatime nodiratime noram

 

9) 버튼 입력을 만들기 위해 여러가지를 알아 보았으나 GPIO를 통해 직접 버튼 입력을 받는 것은 어려웠고 실제로 GPIO로 입력받는 데에 성공해도 그것을 PICO-8에서 인식되도록 하는 것이 거의 불가능하다는 결론에 다다름. 실제 제작사례도 대부분 조이패드 모듈이나 HAT을 장착해서 사용하는 경우 아니면 Retropie 등을 이용해서 인식하는 것이었는데 모듈은 사용하고 싶지 않았고 Retropie는 변함없이 너무 불안정하고 구린데다 결정적으로 라즈 2W에서 wifi가 먹통이 되어버리는 버그 때문에 사용 불가. 결과적으로 라즈 피코를 이용해서 USB 키보드를 만들어 붙이자(...)는 쪽으로 결론이 남.

 

10) 라즈 피코를 이용해 USB 키보드 만들기 : https://learn.adafruit.com/diy-pico-mechanical-keyboard-with-fritzing-circuitpython/overview
어째서인지 모르겠으나 페이지에 나온 소스를 그대로 써야만 동작함. (필요없는 키 선언을 지워보려 했으나 그렇게 하면 필요한 키들도 동작을 안함. 결국 그대로 쓰기로 함)

 

PICO-8에서 사용하는 키인 4방향 커서키 / Z / X는 각각 다음과 같다.

 

위 : GP10

아래 : GP18

왼쪽 : GP17

오른쪽 : GP19

Z : GP13

X : GP11

 

이 단자들과 GND 사이에 버튼을 이어주면 키입력을 받을 수 있음. 

 

11) 사운드 출력단자 연결 (효과 미지수)


---

https://www.lexaloffle.com/bbs/?tid=30656

https://stackoverflow.com/questions/62643521/setting-custom-resolution-on-raspberry-pi-to-fit-11-display

https://diy-project.tistory.com/146

https://magpi.raspberrypi.com/articles/pico-8-raspberry-pi-starter-guide

https://www.lexaloffle.com/bbs/?tid=50708

https://www.lexaloffle.com/bbs/?page=2&tid=3085

https://www.lexaloffle.com/bbs/?tid=38841

https://www.lexaloffle.com/bbs/?tid=33225

https://wikidocs.net/7826

 

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

라즈베리 파이 시리즈 외부 연결  (0) 2024.01.03
GPIO - VGA DAC (R-2R DAC)  (0) 2023.12.26
MachiKania type Z  (0) 2023.12.09
HDMI - Mini HDMI 케이블 제작시 배선  (0) 2023.12.09

출처 : http://www.ze.em-net.ne.jp/~kenken/machikania/typez.html#hanpu

 

BASIC 탑재 컬러 TV 게임 시스템 「MachiKania」(마치카니아)의 완성으로부터 정확히 반년이 지나, 상위 기종인 「MachiKania type Z」가 완성되었습니다.


기존에 비해 메모리 용량이 2배인 마이크로컴퓨터 칩을 사용하여, BASIC에서 컬러 그래픽이나 부동 소수점 연산을 취급할 수 있게 되었습니다. 이제 BASIC으로 만들 수 있는 프로그램의 응용 범위가 크게 넓어집니다. BASIC의 구문 자체도 재검토해, 구조화 프로그래밍 대응으로 더욱 편리하게 프로그램을 작성할 수 있게 되었습니다.


부디 새로운 MachiKania를 체험해 보세요.


PIC32MX판 최상위 모델 「MachiKania type M」은 이쪽
Raspberry Pi Pico 탑재 모델 「MachiKania type P」는 이쪽

 

관련 정보
· MachiKania type Z를 만들자 : 프린트 기판, 부품 키트 구입자용, MachiKania 간단 스타트 가이드
· 입문 MachiKania : 보다 자세한 프로그램 작성 방법을 해설

 

★ MachiKania type Z에서 할 수 있는 일

 

초대 MachiKania에 비해 다음과 같은 부분들이 강화되었습니다.

・256×224도트, 16색 동시 표시 가능한 컬러 그래픽에 대응한 BASIC 시스템을 탑재
・32비트 단정밀도의 부동 소수점 연산을 지원, 각종 수학 함수를 실장.
・서브루틴 내의 로컬변수나, 여러 줄에 걸친 IF~THEN 구조, WHILE~LOOP 구조의 서포트, 인수나 반환값 첨부 서브 루틴 등, 구조화 프로그래밍에 빠뜨릴 수 없는 명령을 다수 추가. 이것에 의해, GOTO문을 거의 사용하지 않는 프로그램 작성을 실현・다차원 배열에 대응・대용량 메모리 탑재로 보다 대규모의 BASIC 프로그램을 작성 가능
・SD 카드의 서브 디렉토리 작성과 서브 디렉토리에의 보존, 읽기에 대응(Ver 1.02 이후)
・가로 40문자 표시모드의 추가 (Ver 1.02 이후)   ·   
・BASIC 프로그램에서 SD 카드의 파일에 액세스 가능 (Ver 1.04 이후)
・영문/숫자로 최대 6문자까지의 변수명을 사용 가능 (Ver 1.2 이후)  
・오브젝트 지향 프로그래밍에 의해 라이브러리를 이용할 수 있습니다. (Ver 1.2 이후)

 

탑재하고 있는 BASIC KM-1200은 종래 버전과 호환성이 있어, 종래 프로그램은 그대로 실행시킬 수 있습니다.


또, 초대 MachiKania에서 가능한 이하의 내용도 그대로 계승하고 있습니다.

・TV에 연결해 전원을 넣으면 곧바로 게임이 시작됩니다.
・키보드를 연결하면 BASIC 언어로 오리지널 게임을 만들 수 있습니다.
・컬러 표시 대응이므로, 화려한 게임을 만들 수 있습니다.
・자신의 오리지널 캐릭터를 사용한 게임을 만들 수 있습니다.
・BASIC의 실행은 매우 고속이므로, 본격적인 게임을 만들 수 있습니다.
・만든 게임은 SD 카드에 저장할 수 있습니다.
・SD 카드를 사용하여 컴퓨터에서 프로그램을 복사할 수 있습니다.
・하드웨어도 소프트웨어도 공개되어 있으므로, 모두 스스로 제작할 수 있습니다.

 

 

 

MachiKania type Z를 만드는 방법

 

MachiKania type Z의 제작 방법과 기본적인 조작 방법은, 초대 MachiKania와 완전히 같습니다. 그러므로, 자세한 것은 이쪽 페이지의 「MachiKania 만드는 방법」부터 우선 읽어 주세요.

 

대략적인 제작 순서는 다음과 같습니다.

1. 하드웨어 제작
2. 마이크로 컴퓨터에 부트 로더 프로그램 쓰기
3. SD 카드에 필요한 파일 복사

 

이미 초대 MachiKania를 만든 경우, 1단계에서는 마이크로 컴퓨터 칩의 교체만 합니다(IC 소켓을 사용하고 있는 편이 좋다). 또한 초대 MachiKania를 PIC32MX170F256B로 움직이는 경우 3단계 작업만 해주면 MachiKania type Z를 도입할 수 있습니다.

Raspberry Pi를 이용해 PIC의 플래시 메모리에 펌웨어를 기록하는 방법

Raspberry Pi가 있으면 PICkit3 등이 없어도 Pickle이라는 프리 소프트웨어를 사용하여 PIC에 쓸 수 있습니다. 위 회로도에서 PICkit3에서 연결되는 3개의 핀에 저항 3개를 끼우고 Raspberry Pi로 바꿉니다. 또한 전원도 Raspberry Pi에서 가져올 수 있습니다. 이하에 간단한 설명을 기재했습니다.

라즈파이에서 PIC32MX에 쓰기

 

프린트 기판을 사용한 제작 사례

 

부품표

PIC 마이크로컨트롤러 PIC32MX170F256B또는 PIC32MX270F256B (28핀 DIP타입) x1
전원 레귤레이터 3.3v 3P 레귤레이터 TA48M033F x1
트랜지스터 2SC1815 x2
크리스탈 오실레이터 3.579545Mhz x1
저항 10K x6, 330 x2, 2.4K x1, 1.2K x1, 620K x1, 300 x1, 120 x1, 100 x2, 75 x1
콘덴서 전해콘덴서 47uF x1, 적층세라믹콘덴서 0.1uF x4, 18pF x2, 10uF x1
가변저항 10K x1
택트스위치 게임버튼 조작용 x6, 리셋용 x1
RCA 잭 x2 (비디오 / 오디오 신호용)
Mini DIN 6p 커넥터 x1 (PS/2 키보드용)
SD카드슬롯 x1 (마이크로SD카드 슬롯도 가능)
DC 전원 잭 x1 (AC어댑터에 맞는 것)

 

 

부품표 외에 필요한 것

전원 어댑터 5V AC어댑터를 추천. 레귤레이터를 이용하여 3.3v로 강압시킴
PICkit3 부트로더 기록에 필요. PIC32에 기록할 수 있다면 다른 것도 OK.
부트로더가 이미 기록된 마이크로컨트롤러를 구입하는 경우 필요 없음(입수 방법)
SD카드, 마이크로 SD카드 1GB 정도면 충분
PC PICkit3 이용시, 또는 SD카드의 초기화에 필요
SD카드 리더/라이터 PC에 연결할 때 필요
TV 비디오입력단자가 있는 것. PC의 비디오 캡처 유닛 등도 이용 가능
PS/2 키보드 BASIC 프로그램을 짤 때 필요
비디오 케이블, 사운드 케이블 TV에 접속할 때 필요

 

 

다운로드

 

MachiKania type Z에 관한 파일들을 다운로드할 수 있습니다.

Download
(2020. 3. 29)
동작에 필요한 파일들과 샘플 파일 세트 (bootloader.hex 이외에는 SD카드에 넣을것)
bootloader.hex 부트로더 본체. PICkit3 등을 이용하여 PIC 마이콘에 기록할것
MACHIKAZ.HEX MachiKania type Z BASIC 시스템. SD카드에 넣어 부트로더로부터 읽어들여서 기동시킴
MACHIKAZ.INI MachiKania type Z BASIC 시스템의 설정 파일
그 외의 파일들 ".BAS" 파일 : BASIC 샘플 프로그램
".HEX" 파일 : 부트로더로 기동 가능한 실행 파일(C언어로 작성한 샘플 게임)
Download
(2019. 3. 31)
BASIC으로 이용 가능한 각종 클래스 파일 모음 압축을 풀면 나오는 LIB 디렉토리를 SD카드 루트에 복사하여 사용. 각 클래스의 사용 방법은 각각의 디렉토리에 들어있는 help.txt 파일을 참고
Download
(2020.3.29)
소스파일 및 라이브러리 파일 세트
ps2keyboard.X.a PS/2 키보드용 드라이버
lib_videoout_machikania.X.a 컬러 텍스트 & 그래픽 출력 라이브러리 (2020. 1. 26)
libsdfsio.a SD카드 파일 액세스용 라이브러리
App_32MX170F256B.ld 부트로더 대응 프로그램을 작성하기 위한 링커 스크립트
그 외의 파일들 MachiKania type Z BASIC 시스템 소스 파일. LGPL(v2.1)의 라이센스에 의거하여 소스를 공개합니다.

 

(2019. 11. 3) CLASS의 PUBLIC FIELD 참조시에 발생하는 버그를 수정했습니다.

(2020. 1. 26) 다중 분할시에 발생하는 버그, 40문자 모드시의 폰트 등을 수정했습니다.

(2020. 3. 29) 일부 명령의 실행시 분할이 발생하면서 생기는 버그를 수정했습니다.

 

[시스템 버전업 데이터의 적용 방법]

 

1. 위에서 압축을 푼 MACHIKAZ.HEX를 SD카드의 루트에 덮어씁니다. 

2. SD카드를 MachiKani에 꽂고, 본체의 버튼을 아무거나 누르면서 전원을 켭니다.

3. 부트로더가 기동되면 MACHIKAZ를 선택하고 FIRE 버튼을 누릅니다.

 

--- 추가 : VGA 출력 시도 ---------------------------------------------------------------------------------------------------------------------------

 

https://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/f2017/mch258_mtr73/mch258_mtr73/mch258_mtr73/index.html

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

라즈베리 파이 시리즈 외부 연결  (0) 2024.01.03
GPIO - VGA DAC (R-2R DAC)  (0) 2023.12.26
PICO-8 라즈베리파이 머신 만들기  (0) 2023.12.10
HDMI - Mini HDMI 케이블 제작시 배선  (0) 2023.12.09

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

라즈베리 파이 시리즈 외부 연결  (0) 2024.01.03
GPIO - VGA DAC (R-2R DAC)  (0) 2023.12.26
PICO-8 라즈베리파이 머신 만들기  (0) 2023.12.10
MachiKania type Z  (0) 2023.12.09

출처 : http://www.ze.em-net.ne.jp/~kenken/bbs/817.html

 

라즈베리파이를 이용하여 PIC32MX에 플래싱하는 방법

투고자 : 켄켄

투고일 : 2020년 3월 29일 (일) 22시 18분 59초

NE0356lan33.rev.em-net.ne.jp

 

라즈베리 파이를 직결하여 PIC32MX의 플래시메모리에 기록하는 것이 가능한 "Pickle"이라고 하는 소프트웨어를 소개합니다. 이전에도 올렸습니다만, 링크가 깨져있거나 제대로 기록이 되지 않는다는 지적이 있기도 했으므로 다시 조사하여 재차 투고합니다.

 

이것을 사용하면, PICkit3 같은 장비가 없어도 라즈베리 파이와 몇 가지 부품만으로 PIC32를 포함한 여러가지 PIC 마이크로 컨트롤러에 기록이 가능합니다.

 

* Pickle Microchip PIC ICSP

https://wiki.kewl.org/dokuwiki/projects:pickle 

 

projects:pickle - wiki.kewl.org

Pickle is an PICMicro in-circuit serial programmer for FreeBSD, NetBSD, Linux, Cygwin (Windows) and MACOS/X or any UNIX/POSIX based system, which includes the Raspberry Pi and embedded devices running OpenWRT. All operating systems support high voltage pro

wiki.kewl.org

 

* Pickle로 PIC32 시리즈에 기록하는 순서

 

1) 라즈베리 파이에 아래 프로그램을 다운로드한다

http://wiki.kewl.org/downloads/pickle-4.20.tgz 

2) 적당한 폴더에 압축을 푼다

3) 압축을 푼 디렉토리로 이동하여 아래 명령을 실행한다

make
sudo make install

 

4) ~/.pickle이라는 디렉토리를 만든다

5) 압축을 푼 src/dotconf/의 RPI를 config라는 파일명으로 바꾸고 위의 디렉토리에 복사한 뒤, 아래와 같이 내용을 변경한다.   

DEVICE=RPI2
SLEEP=1
BITRULES=0x4F00
VPP=9
PGM=-1
PGC=10
PGD=11

 

6) 아래 3개의 파일을 다운로드하여 ~/.pickle 디렉토리에 압축을 풀어준다.

http://ww1.microchip.com/downloads/en/DeviceDoc/RIPE_06_000201.zip
http://ww1.microchip.com/downloads/en/DeviceDoc/RIPE_11_000301.zip
http://ww1.microchip.com/downloads/en/DeviceDoc/RIPE_15_000502.zip

 

PIC32의 경우에는 Proframming Executive라고 하는 기능에 대응하고 있어, 이것을 사용하면 기록이 대폭 빨라집니다.

 

7) 다음 핀 사이에 470옴 정도의 저항을 이어준다. (필자는 330옴을 사용)

라즈베리파이측       PIC측
GPIO9 (21번) -저항- MCLR
GPIO10(19번) -저항- PGECx(x는 1이나 2,3등)
GPIO11(23번) -저항- PGEDx(x는 1이나 2,3등)

 

PGECx와 PGEDx의 x는 같은 조합으로 해줘야 합니다.

 

8) 라즈베리파이의 3.3v와 GND는 PIC의 각 전원핀에 접속한다. PIC의 아날로그 전원핀도 잊지 말고 연결한다.

    (역자주 : PIC의 MCLR과 라즈베리파이의 3V3 사이에도 저항이 필요한데 원본에는 설명이 누락되어 있음. 저항 용량은 10K옴)

라즈베리파이측       PIC측
+3V3 (1번)  -저항(10kOhm)- VDD
GND  (39번) --- GND

 

9) PIC의 기판 상에 ICSP로써 6핀의 단자가 있는 경우에는 아래와 같은 접속 형태가 된다.

ICSP
1 MCLR
2 VDD
3 GND
4 PGEDx
5 PGECx
6 -

 

10) PIC32의 VCAP핀에 붙이는 10uF 콘덴서는 필수.

MachiKania의 기판 등에 콘덴서가 납땜되어 있는 경우는 그대로 써도 문제 없습니다.

 

11) 연결이 다 되었다면 라즈베리파이에서 아래 명령을 실행한다(HEX파일명이 xxx.hex인 경우)

p32 program xxx.hex
p32 verify xxx.hex

기록되는 동안은 아무것도 표시되지 않으므로 끝날 때까지 기다립니다.

 

---

 

이하는 왜 제대로 기록되지 않는 경우가 있었는지에 대한 고찰이므로 꼭 읽어야 하는 내용은 아닙니다.

 

* Verify에서 문제없이 기록되었는데도 제대로 작동하지 않는 경우

 

PICkit3 등의 장비로 기록하면 문제없이 동작하는 HEX파일이, 왜인지 Pickle로 기록하면 Verify해도 정상적으로 기록되지 않는 경우가 있는 것이 판명되었습니다.

 

PIC32의 CONFIGURATION 비트의 DEVCFG0의 제 1:0비트(DEBUG비트)가, 보통 "3"(11b)이 아니라면 동작하지 않지만, 소스 프로그램의 기록 방법에 따라서 "2"(10b)가 되어 버리는 경우가 있는 것 같습니다. 문제는 PICkit3등 Microchip사의 기록 툴에서는 이것을 자동적으로 "3"으로 바꿔서 기록하기 때문에 유저는 눈치채지 못합니다.

대책으로써는 소스 프로그램의 CONFIG설정을 아래와 같이 변경하여 빌드하는 방법이 있습니다.

#pragma config DEBUG = OFF
↓
#pragma config DEBUG = 3

데이터 시트 상에는 "3"이든 "2"이든 문제없다고 기재되어 있으므로, 아마 이것은 Microship 사의 심술일지도 모릅니다.

 

데이터 시트의 DEVCFG0의 기재

DEBUG<1:0>
1x = Debugger is disabled
0x = Debugger is enabled

MachiKania typeM의 부트 로더가 딱 이 케이스였기 때문에, 수정을 해야만 했습니다.

 

http://www.suwa-koubou.jp/micom/USBtoPC98/usbtopc98.html

키보드

 

마우스

 

 

 

마우스단자 : Mini Din 9P

 

키보드단자 : Mini Din 8P

 

http://www.suwa-koubou.jp/micom/pc98key/index.html

 

PC-9801/9821用キーボード変換器

   PC-9801/9821用キーボード変換器 2019.3.25  本変換器は現在ヤフーオークションにて販売中(限定5個)です。(2023.11.4現在) ヤフオク販売は即日完売しました。次回販売時期は未定です。(2023.

www.suwa-koubou.jp

http://www.suwa-koubou.jp/micom/busmouse/index.html

 

PC-9801用バスマウス変換器

   PC-9801用バスマウス変換器 2018.2.22018.6.1(修正)  本変換器は現在ヤフーオークションにて販売中です。(2023.10.19現在) ヤフオク販売は完売しました。次回販売時期は未定です。(2023.10.21現

www.suwa-koubou.jp

 

https://controllerstech.com/oled-display-using-i2c-stm32/

https://stm32-base.org/assets/pdf/boards/original-schematic-STM32F407VGT6_STM32F4XX_M.pdf

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

소니기종 도터보드 사운드 문제(HIC-1)  (0) 2024.05.11
msx-rom-and-floppy-emulator  (0) 2023.07.26
MSX 키보드 관련 자료  (0) 2023.04.13
사용 기종 정보  (0) 2023.04.10

LCD TV에서 복고풍 게임의 모습을 개선하려면 Scanlines를 사용해 볼 수 있습니다. 그것들을 설명할 수 있는 것은 제가 할 수 있는 일이 아니며 웹에는 이미 완벽한 가이드가 있습니다.

다른 스케일러에 대해 배웠을 때 스캔라인에 대해 알게 되었고 , 그런 다음 SLG3000이라는 스캔라인 생성기를 구입하여 VGA 신호에 스캔라인을 추가하고 변경할 수 있다는 것을 알게 되었습니다. SLG3000이 출시된 이후 몇 가지 다른 흥미로운 제품이 출시되었습니다.

SLG3000
T-SLG
레트로VGA
미니 SLG


그런 다음 GamesX 덕분에 나만의 VGA 스캔라인 생성기를 만들 수 있음을 보여주는 이 페이지를 찾았습니다 . 홀수 또는 짝수 스캔라인만 선택할 수 있기 때문에 SLG3000보다 훨씬 더 기본적이지만 확실히 인상적이며 만드는 데 몇 파운드 밖에 들지 않습니다. 원래 게시물은 74LS74 및 74LS125를 사용하는 것을 보여 주며 74HC74 및 74HC125도 사용했습니다.

시간과 부품을 절약하기 위해 프로토타이핑 브레드보드를 ​​구해야 합니다! 하지만 이것은 제가 만든 프로토타입이었습니다.


보드에서 나오는 전선의 끝에 있는 VGA 소켓을 볼 수 없지만 암수 VGA 커넥터가 있고 서로 연결되어 있으며 보드의 +5v, GND, R, G, B, H 및 V 신호가 VGA 커넥터 중 하나(어느 것이든 상관 없음)의 관련 핀에 연결됩니다.

위에 링크된 포럼 게시물이나 웹사이트에서 다이어그램이 사라지는 경우를 대비하여 여기에 사본이 있습니다.


..그리고 여기 이것을 연결하는 방법에 대한 내 낙서가 있습니다. 이번에는 veroboard를 사용하지 않고 Matrix 보드를 사용했습니다.


위의 다이어그램을 그릴 때 VGA 장치 중 하나에 5v가 있는 별도의 전원 핀(VGA 9)을 사용했지만 다른 하나는 연결되지 않았으므로 안정적인 전원 공급원이 아닙니다. 나는 수직동기화 신호를 전원으로 사용할 수 있다는 것을 읽었고, 이것을 시도해 보았고 작동했기 때문에 74HC74 칩의 핀 1과 14를 연결할 수 있었습니다.

이것을 다른 것에 통합하는 경우 항상 별도의 PSU를 사용할 수 있습니다.


이에 대한 전체 단계별 가이드를 수행할 시간이 없는 것 같습니다. 하지만 위의 다이어그램, 아래의 사진 및 내가 작성한 모든 메모가 도움이 되기를 바랍니다. :-) 디자인은 9 x 10 구멍의 매트릭스 보드 조각에 편안하게 맞을 수 있습니다.

다음 사진은 동시에 두 개의 보드를 만드는 모습을 보여 주며 진행하면서 보드의 양면을 보여줍니다.

칩을 제자리에 납땜하는 것으로 시작했습니다. 74 칩은 사진의 상단에 있고 125 칩은 하단에 있습니다. 그런 다음 GND 및 전원에 대한 링크를 납땜하십시오. 나는 저항, LED 등에서 이전에 잘라낸 다리 부분을 사용합니다. 와이어 또는 손에 필요한 모든 것을 사용할 수 있습니다. 링크와 관련 칩 레그 사이의 간격을 연결하는 것을 잊지 마십시오. 두 지점을 가열하고 약간의 추가 납땜을 추가하면 간격을 채울 것입니다.

이제 나는 보드 밑면에 더 많은 포인트를 연결하기 위해 더 오래된 저항 다리 위에 남은 것을 사용했습니다.



이제 몇 개의 링크가 더 있습니다. 이번에는 Kynar 와이어를 벗겨내고 구부리고 납땜했습니다.

이제 RGB 와이어가 제자리에 납땜되었습니다. 땜납 얼룩이 있는 칩 레그에 와이어를 연결하는 것을 잊지 마십시오(두 번째 사진에서 링크를 강조 표시했습니다).

그런 다음 수평 및 수직 동기화 와이어

여기 내 스위치가 연결되어 있습니다. 와이어는 IDE 케이블에서 가져온 것입니다. 작업을 간단하게 유지하기 위해 스위치 중간에 빨간색 와이어를 사용했습니다.

거의 다 왔어, 이제 힘이야. 두 가지 옵션이 있습니다. 외부 소스(사진 오른쪽)에서 전원을 얻거나 수직 동기화에서 전원을 얻습니다(VGA 장치에 따라 작동하거나 작동하지 않을 수 있습니다. LS 칩은 더 낮은 전압에서 작동할 수 있다고 생각 합니다 )

다음은 내 RGBS-VGA 스케일러(GBS-8220) 밑면에 붙어 있는 보드 중 하나입니다.

또한 프로토타입 보드를 프로젝트 상자에 넣었습니다. 이것이 작동하려면 멋지고 짧은 VGA 확장이 필요했습니다. 그래서 올바른 길이로 하나를 납땜했습니다.

제가 납땜한 짧은 VGA 확장 케이블입니다(R, G, B, H, V 및 GND가 연결되고 모든 GND가 VGA 소켓에 함께 연결된 다음 단일 와이어를 사용하여 남성 및 여성 커넥터의 GND에 연결됨).

그런 다음 회로 기판의 신호에 연결하면 수컷 또는 암컷 커넥터에 연결하는 것이 중요하지 않으며 원하는 경우 둘 사이에서 분리할 수도 있습니다.

그것은 상자 내부가 완성된 것입니다. 오른쪽 상단으로 가는 검은색과 빨간색 전선은 상자에 전원이 공급되는지 여부를 표시하는 LED의 전원입니다. 이 전선은 칩의 전원 및 접지 공급 장치로 연결됩니다.

노트

다음은 스위치용 구멍, 프로젝트 상자의 소켓을 만드는 방법입니다 .

내가 사용한 링크는 일반적으로 저항, LED 등을 잘라낸 다리로, 이와 같은 프로젝트에 매우 유용합니다.

전원선에 추가하기만 하면 On/Off 스위치를 쉽게 추가할 수 있습니다. 실제로 On-Off-On 스위치가 있는 경우 On-On 스위치 대신에 놓고 정확히 동일하게 연결하면 홀수 스캔라인, 스캔라인 없음, 짝수 스캔라인의 3가지 옵션을 얻을 수 있습니다!

Dreamcast VGA 박스 , GBS-8220 예산 RGBS 에서 VGA 스케일러로 가는 작은 보드에 이것을 추가하는 것은 매우 쉽습니다  (가이드를 전송하고 업데이트할 때 몇 가지 링크를 추가하겠습니다 – PG).

더 작은 프로젝트 상자에 맞추기 위해 작은 조각의 스트립 보드에 짜내고 다리와 동일한 구멍을 통해 와이어를 찔러 구멍의 과도한 행/열을 제거할 수 있습니다.


주사선 폭


스캔라인의 너비를 변경하는 방법을 공유한 Toodles(및 부트섹터)에게 감사합니다( 내 생각에 이 긴 스레드에 있습니다. 포스트 329 정도입니다 ). 640 x 480보다 높은 해상도에서 실행하는 경우 탁월합니다(저는 1024 x 768에서 사용하고 있습니다). 나는 이것을 내 VGA 스케일러의 SLG에 추가했고, 너무 많이 떼어내고 싶지 않았기 때문에 가능한 한 적게 변경했습니다. 다음은 차이점을 보여주기 위해 만든 다이어그램입니다.

다음은 1024×768에서 실행되는 MOTW를 보여주는 두 개의 스크린샷입니다. 첫 번째는 좁은 주사선을 보여주고 두 번째는 넓은 주사선을 보여줍니다. 사진에서는 너무 크게 보일 수 있지만 내 TV에서 뒤로 물러나면 훨씬 좋아 보입니다. 이 해상도의 원래 좁은 주사선은 너무 좁습니다. 하지만, 개인의 취향에 따라 결정될 것 같아요!

새로운 다이어그램 및 옵션


다음 다이어그램에서 빨간색으로 표시된 다리는 전원(3.3v ~ 약 5v)이 필요한 다리이고 검은색으로 표시된 다리는 GND를 바라보는 다리입니다.

확대를 보려면 각 다이어그램을 클릭하십시오. 각 옵션에 대해 두 개의 다이어그램이 있습니다. 보드의 윗면과 납땜 면입니다. 이렇게 하면 조립이 더 쉬워집니다!

매우 기본 옵션

 

가장 기본 - 윗면

 

가장 기본적인 – 솔더 사이드

 


홀수/짝수 스캔라인 옵션 스위치

 

홀수 또는 짝수 스캔라인 스위치 - 상단

 


홀수 또는 짝수 스캔라인 스위치 - 솔더 사이드

 


홀수/짝수 및 너비 옵션

 

폭 스위치 장착 – 상단


DIY-SLG-Dia_0141
폭 스위치 장착 – 솔더 측
홀수/짝수, 너비 및 해상도 옵션
SLG가 800×600 해상도에서 작동하려면 수직 동기화가 반전되어야 합니다.

800×600 호환성 – 상단

 

800×600 호환성 – 솔더 사이드


아래는 위의 다이어그램을 테스트하기 위해 하나를 만들었을 때 더 많은 사진입니다. 링크 와이어 중 하나를 놓쳐서 사진에 그렸습니다!

 

주사선 강도


기성 솔루션 중 일부에는 스캔라인의 강도를 조정하는 전위차계가 포함됩니다. 시험해보고 싶다면 포함하는 방법을 보여주기 위해 여기에 몇 가지 다이어그램을 추가하겠습니다.

또는 74LS125 칩의 R, G 및 B 출력에 일부 저항을 사용해 볼 수 있습니다. 75옴은 내 TV에서 좋아 보입니다.


필요한 구성 요소 요약


1 x 74HC74 칩
1 x 74HC125 칩
전선, 매트릭스 보드
1개(또는 옵션에 따라 그 이상) x 켜기/끄기 스위치(또는 켜기/끄기/켜기 스위치)


더 많은 참고 사항!


RetroVGA는 친절하게 제품에 대한 Eagle 파일을 제공하므로 제품이 어떻게 구성되어 있는지 정확히 볼 수 있으며 보드를 제작하고 직접 만들 수도 있습니다.

이후 GamesX의 원래 게시물은 ScanLine Generator의 작동 방식에 대한 설명으로 업데이트되었으며, 또한 bigsanta는 74ls74 칩의 사용하지 않는 입력을 접지에 연결하고 부동 상태로 두지 않는 것이 좋습니다.

ニユ-マン이 GamesX에 작성함:

74LS74는 HSync 펄스마다 상태를 변경하므로 한 라인은 건드리지 않고 다음 라인은 공백이 됩니다(또는 그 반대).
스위치는 블랭킹 회로(74LS125)가 짝수 또는 홀수 라인을 지워야 하는지 여부를 선택합니다.
74LS125가 활성화되면 RGB 라인이 접지되고 검은색 라인이 표시됩니다.

https://github.com/kernelcrash/msx-rom-and-floppy-emulator

 

GitHub - kernelcrash/msx-rom-and-floppy-emulator: Emulate ROMs and Floppy images in MSX

Emulate ROMs and Floppy images in MSX. Contribute to kernelcrash/msx-rom-and-floppy-emulator development by creating an account on GitHub.

github.com

더보기

개요

  • 저렴한 STM32F407 보드(미화 10달러 정도)를 준비하고, MSX 카트리지 슬롯에 연결합니다. MSX 슬롯용 만능기판을 이용하는 것이 좋습니다.
  • 마이크로 SD 카드에 FAT32 파티션을 만들고 그 안에 ROM 및 dsk 이미지를 넣습니다.
  • 마이크로 SD 카드를 STM32F4 보드에 삽입합니다.
  • STM32F4 보드는 MSX/MSX2 컴퓨터에 실시간으로 롬 이미지를 보여주어 롬 카트리지가 장착된 것으로 인식하게 됩니다.
  • 또한 SD 카드에서 디스크 이미지를 로드할 수 있도록 WD2793 플로피 디스크 컨트롤러를 에뮬레이트합니다.
  • 또한 (선택적으로) 부분적으로 RP5C01 RTC 칩을 에뮬레이트합니다(해당 칩이 없어도 MSX2 컴퓨터를 부팅시키기에는 충분함). 이것은 저의 개인적인 필요에 의해 넣은 부분이므로, 이 에뮬레이션이 필요하지 않으면 Makefile의 ENABLE_RTC_RAM_BANK_EMULATION 행을 주석 처리하십시오.
  • 코드는 여전히 '개념 증명' 단계입니다. 두 개의 버튼으로 사용할 롬이나 디스크 이미지를 전환시킬 수 있지만, 조금 더 편리하게 사용할 수 있도록 SD 카드의 파일 메뉴를 표시하고 그 중 하나에서 부팅할 수 있는 간단한 부팅 메뉴 MSX 기본 프로그램(kcmfs)을 추가했습니다.

이것을 테스트하기 위해 Omega MSX2 컴퓨터를 사용했습니다. 다른 MSX 또는 MSX2 컴퓨터에서는 테스트하지 않았습니다.

배선하기

STM32F407VET6 또는 STM32F407VGT6 보드 사용('B'는 슬롯 커넥터의 버퍼링된 핀을 의미함)

   PA1                   - GND와 이 핀을 사용하여 버튼을 설치. 풀업 저항은 필요 없음. 이 버튼이 '다음' 버튼이 됩니다.
   PA2                   - GND와 이 핀을 사용하여 버튼을 설치. 풀업 저항은 필요 없음. 이 버튼이 '이전' 버튼이 됩니다.
   PE0 에서 PE15 - BA0 에서 BA15
   PD8 에서 PD15 - BD0 에서 BD7
   PC0                   - _B_IORQ
   PC1                   - _SLTSL1 혹은 SLTSL2
   PC2                   - _B_MREQ
   PC3                   - _B_RD
   PC4                   - _BUSDIR1 혹은 2 (RP5C01 칩을 에뮬레이션 할 때에만 필요합니다)
   GND                  - GND
 

마이크로 SD 카드 설정

저는 작은 파티션(1GB 미만)으로 마이크로 SD 카드를 FAT32로 포맷하는 경향이 있습니다. 루트에 msx 디렉터리를 만들고 해당 디렉터리에 ROM 이미지와 디스크 이미지를 추가합니다. 파일을 이 디렉토리에 복사하는 순서에 따라 파일을 순환할 수 있는 순서가 결정됩니다(즉, 알파벳순이 아님).

 

몇 가지 제한 사항:

  • MSX에는 카트리지에 다양한 '메가롬 매퍼'가 많이 있습니다. 저는 Konami4(예: SCC가 없는 Konami), Ascii8, Ascii16 및 '일반' 16K 및 32K 카트(예: 매퍼 없음)만 구현했습니다.
  • 매퍼 유형을 포함하도록 ROM의 이름을 바꿔야 합니다(파일 타입을 조사하고 분류하는 등의 기능이 없음). 따라서, 이런 식의 파일명은 작동하지 않습니다 : Treasure-of-Usas.rom
  • 그러나 이런 식의 파일명은 작동합니다 : Treasure-of-usas.konami4
  • 그러므로 규칙은 다음과 같습니다 :
    • .konami4로 끝나면 ROM이 Konami4로 처리됩니다.
    • .konami5로 끝나고 ROM은 Konami5로 처리됩니다(SCC 에뮬레이션은 없지만 이 형식은 순전히 KonamiWithSCC 형식이고 PSG로 작동할 수 있는 카트용입니다).
    • .ascii8로 끝나면 ROM은 Ascii8로 처리됩니다.
    • .ascii16으로 끝나면 ROM이 Ascii16으로 처리됩니다.
    • 다른 것은 일반 16 또는 32K ROM으로 취급됩니다.
  • 카트리지 이미지는 128KB로 제한됩니다. 카트리지 파일들이 stm32f407 보드의 RAM에 로드되므로, 더 큰 파일들은 단순히 RAM이 충분하지 않기 때문에 작동이 되지 않습니다.

디스크 이미지는 .dsk로 끝나야 하며 크기는 737280 또는 368640바이트여야 합니다.

디스크를 로드하려면 디스크롬이 필요합니다. 'disk.rom'이라는 SD 카드의 루트에 하나의 디스크 롬을 넣습니다. MD5 0ed6dbd654da55b56dfb331dd3df82f0 가 있는 NMS8250 디스크 롬으로만 테스트했습니다.

WD2793 플로피 디스크 컨트롤러 지원은 Marat Fayzullin이 만든 fMSX의 WD1793.c를 기반으로 합니다. 참고:

  • 모든 칩이 구현되는 것은 아닙니다. 그러나 당신이 원하는 대부분의 것들이 있습니다.
  • 하나의 드라이브인 것처럼 가장합니다.
  • 웜 부팅 후 디스크가 변경되었다고 생각하게 만드는 방법을 찾지 못했기 때문에 새 이미지를 로드하려면 전원을 껐다가 켜야 합니다. 그러나 멀티 디스크 게임에서는 일반적으로 컴퓨터가 실행되는 동안 NEXT를 누르면 정상적으로 작동합니다.

이제 SD 카드의 파일 목록을 표시하는 기본 MSX 프로그램(kcmfs)도 있어 하나를 선택하고 부팅할 수 있습니다. kcmfs를 사용하려면 menu.rom 파일을 SD 카드의 루트에 복사해야 합니다. STM32F4 보드를 재설정한 후 msx 디렉토리의 첫 번째 파일 대신 menu.rom을 로드합니다. 자세한 내용은 KCMFS 섹션을 참조하십시오.

펌웨어 컴파일

일반적으로 저는 developer.arm.com의 ARM GNU 툴체인을 사용하지만 최신 Linux 배포판에서는 실제로 패키징된 ARM 크로스 컴파일러를 사용할 수 있습니다(예: 데비안/우분투에서는 'apt install gcc-arm-none-eabi'). . 저는 컴파일에만 Linux를 사용하므로 다른 플랫폼에서 수행하는 방법을 모릅니다.

st.com의 STM32F4DISCOVERY 보드 펌웨어 패키지가 필요합니다. 이것을 STSW-STM32068이라고 합니다. 이 저장소를 git이 복제한 '위' 디렉토리에 압축을 풀어야 합니다. 예. 당신이 볼 수있는 어떤 폴더에

   ./STM32F4-Discovery_FW_V1.1.0
   ./msx-rom-and-floppy-emulator

빌드

   cd msx-rom-and-floppy-emulator
   make

그러면 stm32f4 보드에 플래시할 수 있는 hex 및 bin 파일이 생성됩니다. USB DFU 모드를 사용하여 전송하는 예는 아래에 있습니다.

stm32f407 보드에 펌웨어 복사

stm32 칩으로 펌웨어를 작성하기 위한 많은 옵션이 있습니다. transfer.sh 스크립트에 dfu-util을 사용한 예가 있습니다. 이것이 작동하려면 USB를 통해 보드를 연결하면 DFU 장치가 표시되도록 BOOT0 및/또는 BOOT1 설정을 지정해야 합니다. 그런 다음 transfer.sh를 실행할 수 있습니다. 이 작업을 수행한 후 BOOT0 또는 BOOT1 점퍼를 제거하십시오.

보드를 DFU 장치로 표시하는 데 문제가 있는 경우 PA10과 GND 사이에 풀다운 저항을 배치할 수 있습니다(1K에서 10K 사이의 값이 아마도 작동할 것임).

KCMFS

kcmfs 디렉토리에는 사용자에게 메뉴를 제공하는 sdcc 기반 MSX 프로그램이 있습니다. SD 카드의 msx 디렉토리에 있는 파일을 나열하고 하나를 선택하면 결과적으로 재부팅됩니다. SD 카드의 루트에 kcmfs(menu.rom)를 넣으면 STM32F4 보드를 리셋한 후 항상 menu.rom을 부팅합니다.

kcmfs는 내가 할 수 있는 만큼 간단합니다. 멋진 그래픽이 없습니다. 부팅 시 SD 카드의 msx 디렉토리에 있는 처음 20개 파일이 표시됩니다. 그들은 왼쪽 아래에 'a'에서 't'로 나열됩니다. 문자를 누르면 MSX 컴퓨터가 재부팅되고 선택한 항목이 시작됩니다. msx 디렉토리에 20개 이상의 파일이 있다고 가정하면 20개 파일의 두 번째 페이지에 대해 '2'를 누르고 세 번째에 대해 '3'을 누르기만 하면 됩니다. '?'를 눌러도 됩니다. 도움을 받으려면.

매우 간단한 프로토콜이 사용됩니다.

  • kcmfs는 0x80을 0x8000에 기록합니다. 이것은 smt32f4 보드의 메인 스레드를 트리거하여 msx 디렉토리의 디렉토리 목록을 작성합니다. 디렉토리의 첫 번째 파일 이름은 MSX 컴퓨터가 0x8100에서 볼 수 있도록 작성되고 두 번째 파일은 0x8180에서 나타나는 식입니다(예: 파일 이름당 128바이트).
  • kcmfs는 0x8000을 폴링하여 비트 7이 낮아지는 시기를 확인합니다. 이는 파일 목록 프로세스가 완료되었음을 의미합니다. 검색된 파일 수는 0x8002에 기록됩니다. 126을 넘을 수 없기 때문에 항상 바이트 길이이지만 16비트 정수로 사용할 수 있도록 0x00 ~ 0x8003을 씁니다.
  • kcmfs를 사용하면 사용자가 파일을 선택할 수 있습니다. 선택한 파일 이름은 0x8080 - 0x80ff에 복사됩니다. 그런 다음 0x40이 0x8000에 기록됩니다. 그러면 stm32f4 보드의 메인 스레드가 트리거되어 적절한 ROM 또는 디스크를 로드합니다. 0x40이 작성되는 즉시 코드는 MSX 컴퓨터의 재설정을 트리거합니다. 기술적으로 새 ROM을 로드하면 현재 로드된 menu.rom을 덮어쓰므로 슬롯 메모리가 아닌 RAM에서 0x40을 쓰는 코드를 실행해야 합니다. 그러나 0x40의 쓰기와 로드되는 ROM 사이에는 충분한 지연이 있으므로 현재 문제를 일으키지 않는 것 같습니다.
  • 새 ROM을 로드할 때 주의해야 할 또 다른 사항은 메인 스레드가 실제로 msx 디렉토리를 통과한다는 것입니다(마치 NEXT를 계속해서 누르는 것처럼). 어리석은 것처럼 보이지만 요점은 2~3개의 디스크 게임이 작동하도록 허용하는 것입니다. 즉. 다음 디스크를 요청하면 게임에서 NEXT를 누르십시오. 이것은 모두 파일을 올바른 순서로 SD 카드에 복사하는 것에 달려 있습니다.

인위적인

PC2는 _MREQ의 -ve 에지에서 인터럽트합니다. 과거에는 _MREQ int가 +ve 가장자리에 있도록 하는 다른 기술을 사용했습니다. 이전 기술은 주 while() 루프에 사용할 수 있는 시간을 줄이는 대신 _MREQ 처리에 대해 더 나은 타이밍 결과를 제공합니다. MSX는 M1이 560ns 동안 낮고 일반 메모리 액세스가 690ns인 대기 상태를 추가합니다. stm32f407 @ 240MHz에서 인터럽트 처리기의 첫 번째 라인까지 약 100ns의 최상의 경우이므로 다른 Z80A 시스템만큼 시간이 촉박하지 않습니다. 즉. -ve 가장자리의 인터럽트를 사용하여 '떠날' 수 있습니다. 인터럽트 처리 코드는 ARM 어셈블리로 작성되었습니다.

인터럽트 처리기는 범용 전역 상수 및 포인터로 사용되는 부동 소수점 레지스터를 많이 사용합니다. 이는 인터럽트 핸들러가 레지스터를 푸시할 필요가 없음을 의미합니다(ARM에서 r0-r3 및 r12는 사용자가 원하든 원하지 않든 자동으로 푸시됨). fpu 레지스터는 고속 RAM으로 효과적으로 사용됩니다. 다음은 예입니다.

   // grab the pointer to GPIOA from s11
   vmov	r1,s11
   // s1 is preset to the value '1'. Send PA0 high
   vstr s1,[r1,ODR]

32개의 32비트 fpu 레지스터(s0 ~ s31)가 있습니다. gcc가 s16, s17, s18 및 s19(d8 및 d9)로 이상한 작업을 수행하려는 경향이 있음을 알았지만 대부분 사용했습니다. 그래서 나는 그것들을 피하는 경향이 있습니다.

_MREQ int에 대한 결정 프로세스까지;

  • 그것이 false int인지 확인하십시오. 때때로 이것은 Z80A의 신호 가장자리가 stm32f4에 약간 거칠게 나타날 수 있기 때문에 발생합니다.
  • _SlotSelect 신호가 낮은지 확인하십시오. 그렇지 않은 경우 종료하십시오.
  • 다음으로 우리는 단순히 일반 ROM 카트를 에뮬레이션하고 있는지, 아니면 디스크 ROM을 에뮬레이션하고 있고 디스크 이미지를 사용할 것인지 알아내야 합니다. 현재로서는 둘 중 하나입니다. 디스크를 원하는 경우 에뮬레이트되는 유일한 ROM은 디스크 ROM(기본 16k ROM)이므로 다른 카트를 가질 수 없습니다.
  • 따라서 디스크 ROM인 경우 16K 디스크 ROM을 에뮬레이션하고 0x7ff8-0x7fff(0xbff8-0xbfff에서 복제됨)에서 에뮬레이트된 플로피 디스크 컨트롤러에 대한 액세스도 활성화합니다.
  • ROM 카트리지인 경우 적절한 8K 블록이 표시되도록 '매퍼' 뱅크 선택을 신속하게 변환해야 합니다. 반대로 '쓰기'를 사용하면 ROM이 매퍼 뱅크 레지스터(매퍼 유형에 따라 다름)에 쓸 수 있습니다.

1. 보드 준비 : STM32F407 (알리 구입 링크 : 11$)

2. 보드와 슬롯의 연결 (MSX 슬롯용 만능기판 이용을 추천)

   PA1                   - GND와 이 핀을 사용하여 버튼을 설치. 풀업 저항은 필요 없음. ('다음' 버튼)
   PA2                   - GND와 이 핀을 사용하여 버튼을 설치. 풀업 저항은 필요 없음. ('이전' 버튼)
   PE0 에서 PE15 - BA0 에서 BA15
   PD8 에서 PD15 - BD0 에서 BD7
   PC0                   - _B_IORQ
   PC1                   - _SLTSL1 혹은 SLTSL2
   PC2                   - _B_MREQ
   PC3                   - _B_RD
   PC4                   - _BUSDIR1 혹은 2 (RP5C01 칩을 에뮬레이션 할 때에만 필요)
   GND                  - GND

3. github 저장소(https://github.com/kernelcrash/msx-rom-and-floppy-emulator) clone 혹은 zip 다운로드 후 압축풀기

4. st.com 사이트에서 보드 펌웨어 패키지 en.stsw-stm32068.zip 다운로드(https://www.st.com/en/embedded-software/stsw-stm32068.html) 후 압축풀기

5. 임의의 폴더 안에 프로그램 폴더(msx-rom-and-floppy-emulator)와 보드 펌웨어 폴더 (STM32F4-Discovery_FW_V1.1.0)가 나란히 존재하도록 할 것

6. (MacOS) homebrew 설치 : ruby -e "(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)

7. (MacOS) make 설치 : brew install make

8. (MacOS) hex2bin 설치 : http://sourceforge.net/projects/hex2bin/ 에서 다운로드 후 압축해제 -> 폴더 안에 들어가서 hex2bin, mot2bin, hex2bin.1 파일 삭제 -> make 명령으로 MacOS용 바이너리 새로 빌드

9. arm 크로스 컴파일러(arm-none-eabi-gcc) 설치 : brew install --cask gcc-arm-embedded

10. 프로그램 컴파일 : 프로그램 폴더(msx-rom-and-floppy-emulator) 안으로 들어가서 make -> *.hex, *.bin 생성

11. 보드 프로그래머 툴(STM32 Cube Programmer) 다운로드 및 설치 : https://www.st.com/en/development-tools/stm32cubeprog.html

12. 보드 DFU 모드 설정 : SWD 단자 중에서 BT0 (BOOT 0) 단자와 보드의 5V 단자를 연결해줌

13. 보드의 USB 단자와 PC를 케이블로 연결 후 STM32 Cube Programmer를 실행

14. 메뉴 왼쪽 위에서 두번째의 'Erasing & Programming'을 선택 -> Download의 File path에서 Browse 버튼을 눌러 아까 생성한 *.hex 파일을 불러옴

15. Start Programming 버튼 클릭. 프로그램이 보드에 기록됨

16. 보드를 PC에서 분리하고 BT0 단자와 5V 단자의 연결을 끊어줌

17. 마이크로 SD 카드를 FAT16으로 포맷 -> 루트 폴더에 menu.rom 파일을 넣고, MSX 폴더를 만들어서 그 안에 원하는 롬팩 이미지와 디스크 이미지를 넣는다

18. 보드를 MSX의 카트리지 슬롯에 삽입하고 전원을 넣으면 사용 가능

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

소니기종 도터보드 사운드 문제(HIC-1)  (0) 2024.05.11
OLED 출력 관련  (0) 2023.08.08
MSX 키보드 관련 자료  (0) 2023.04.13
사용 기종 정보  (0) 2023.04.10

* 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