C10=10uF/16V
C14=10uF/16V
C22=100uF/16V

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

OLED 출력 관련  (0) 2023.08.08
msx-rom-and-floppy-emulator  (0) 2023.07.26
MSX 키보드 관련 자료  (0) 2023.04.13
사용 기종 정보  (0) 2023.04.10

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

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

대우 MSX 키보드 매트릭스 : https://blog.naver.com/jsfx3/222011871680

대우 MSX 키보드 연결 : http://www.caro.su/msx/kbd4msx.htm

복각MSX님 USB 키보드 인터페이스 : https://cafe.naver.com/msx/27107

Brightsite님 PS/2 키보드 인터페이스 : https://cafe.naver.com/msx/26358

아두이노-MSX PS/2 연결 사례 : https://msx.gouget.com.br/2014/06/24/ps2-keyboard-to-msx-with-arduino/

키 매트릭스에 관해 : http://map.grauw.nl/articles/keymatrix.php

고명호님 인터페이스 : https://cafe.naver.com/msx/20819

고명호님 인터페이스 장착법 : https://cafe.naver.com/msx/21144

라즈베리파이 pico를 이용한 장착법 : https://github.com/hra1129/msx_tools/tree/main/usb_keyboard_bridge_for_msx

ESP32 블루투스 키보드 연결사례(듀크뉴켐3D ESP32포팅) : https://github.com/bozont/Duke3D/blob/master/components/SDL/bluetoothkeyboard/bluetoothkeyboard.h

 

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

소니기종 도터보드 사운드 문제(HIC-1)  (0) 2024.05.11
OLED 출력 관련  (0) 2023.08.08
msx-rom-and-floppy-emulator  (0) 2023.07.26
사용 기종 정보  (0) 2023.04.10

대우 X-II (CPC-400)

 - GOTEK USB 드라이브

 - MMC/SD V4

 - S-VIDEO AV 보드 (by 숲속라키)

 - SC-88VL 미디 모듈

 - 8BitDo MD 2.4Ghz 무선패드 개조, 내장

 - V9958 VDP 교체

 - 메모리 128KB 증설

 - JAILBAR 노이즈필터 처리

 - 전원부 교체 (민웰 SMPS RT-50B)

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

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

+ Recent posts