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의 카트리지 슬롯에 삽입하고 전원을 넣으면 사용 가능

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

MSX wifi 모뎀 만들기  (0) 2025.02.18
소니기종 도터보드 사운드 문제(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 포트를 연결한다. 라즈베리 파이 제로의 경우 보드 뒷면의 단자를 사용할 수 있다.

 

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

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

세가 새턴(이하 SS)에 대한 자세한 자료는 야바 시뮬레이터 위키피디아를 보면 됩니다.
 https://wiki.yabause.org/index.php5?title=SH-2CPU 

먼저 ss의 메모리는 2개의 존으로 나뉘는데 하나는 고단존, 크기는 0x100000, 즉 1m이고 주소는 0x060000-0x06100000입니다. 이 부분을 고단존이라고 합니다. 런닝 프로그램 dma 복사 따위는 비교적 빠릅니다. 일반적으로 ss 게임 프로그램 쪽의 파일들은 여기에 우선적으로 놓습니다.

다른 하나는 저단 구역으로 크기도 0x100000, 이것도 1m이며 주소는 0x00200000-0x00300000이고 이 부분을 저단 구역이라고 하며 속도는 고단 구역보다 느리지만 육안으로 구별할 수 없고 프로그램도 달릴 수 있습니다.


ss의 현존분은 vdp1 vdp2입니다.
vdp1 크기는 512kb 주소 0x5c0000-0x05C80000이며, vdp1은 일반적으로 활성 블록을 처리하는 레이어로 사용됩니다.
vdp2 크기는 512kb 주소에서 0x5e0000-0x05e80000이며, vdp2는 일반적으로 배경 레이어로 사용됩니다.

또한 색상표가 있는데 주소는 0x05F00000이고 크기는 4kb, 즉 0x1000이며 vdp1 및 vdp2 레이어로 16색 또는 256색일 때 색상표로 사용됩니다.
자세한 자료를 보고 싶으면 위의 인터넷 주소로 가시면 아주 상세하게 쓰여 있습니다.

ss 본체는 전원을 켠 후, 먼저 bios를 실행하고, bios에 예약된 전원 켜기 애니메이션을 재생하고, 재생하는 동안 일련의 조작과 각종 초기화 및 검증을 수행합니다(ss 본체는 대부분 국내에서 직독을 했기 때문에, 광 드라이브 잠금 해제 및 원본 디스크 검증은 제쳐두고, 그곳은 복잡합니다. 사실 저도 잘 모르겠습니다. 그래서 다음 설명은 모두 디폴트 광 드라이브와 다른 검증은 통과했습니다.)

첫 번째 bios 애니메이션을 재생한 후 프로그램이 카세트를 삽입했는지 여부를 우선적으로 검사합니다. 네, 잘못 보지 않았습니다. 카세트의 우선도가 CD보다 높습니다. 카세트가 삽입되지 않았거나 카세트 안에 있는 ip 헤드의 데이터와 bios가 일치하지 않는 것을 감지해야 CD를 읽을 수 있습니다.

방금 ip 헤더 데이터에 대해 말했는데, 여기서 전개 설명을 하겠습니다.
ss는 cdrom CD를 매개로 하고 포맷도 표준인 ISO9660 파일 시스템이기 때문에 ISO9660 파일 시스템 중 하나는 CD의 처음 32kb는 그대로 두고 이 32kb 안에 다른 데이터를 넣을 수 있다는 것입니다.
그래서 SEGA는 제가 알기로는 sega cd 본체부터 이렇게 플레이한 것 같습니다. 이 32kb를 가지고 와서 게임 정보 및 검사 데이터를 넣습니다. 이곳은 sega cd에서 ss에서 dc까지 모두 그렇습니다(단, dc가 처음의 32kb를 읽는 것이 아닙니다) 세가의 오래된 전통 기술이라고 할 수 있습니다.

새턴에 대해 말하자면, 우리는 보통 이 32kb 데이터를 ip 파일이라고 합니다. ss가 켜졌을 때, 카세트가 본체에 꽂혀 있지 않거나 카세트 안의 ip 파일의 헤더가 정확하지 않으면 CD-ROM의 처음 32kb 데이터를 읽습니다. 이 32kb는 기본적으로 ss의 높은 메모리 0x06002000으로 읽힙니다. 즉, 32kb는 0x8000 크기이고 주소는 0x06002000-0x0600a000입니다(주의, 여기는 고정되어 있으며 변경할 수 없습니다).

32kb 데이터를 메모리에 읽으면 첫 번째 동영상을 재생한 바이오스는 06002100이라는 곳, 즉 ip 파일의 0x100 주소로 건너뜁니다.(여기서 중점적으로 말하면, 여기의 주소는 redump와 같은 2352bin 형식이 아닌 2048의 ISO 형식의 주소를 가리킨다. bin 형식은 edcecc 검사를 포함하고 있기 때문에 실제로 2352bin 형식에는 2048바이트마다 304바이트 섹터 데이터가 포함되어 있으며, 이 2048바이트의 데이터가 올바른지 검사 및 수정하기 위해 사용됩니다. 그 중 16바이트 섹터 머리 데이터는 2048데이터의 머리 부분에 있고, 뒤에 남은 edcecc 검사 데이터는 끝에 있습니다. 아래 그림 보기)

0x100 여기서부터는 ip데이터와 SEGA의 큰 글자를 체크하는 곳입니다. 즉, 이 데이터가 bios 내의 일치 여부를 판단하여 일치하지 않으면 bios의 9구 관리 화면으로 돌아갑니다.

ip 파일에 대한 설명을 계속 진행합니다. 인터넷에 비교적 자세한 자료가 있을 것입니다. 여기서 간단히 말씀드리자면, ip 파일의 처음 0x100바이트는 게임 이름 버전 연도와 같은 게임 정보입니다. 0x100부터가 프로그램 입구입니다. sega 화면을 표시하고 데이터를 검증한 후 마지막으로 게임에 들어갑니다.

여기서 ip헤드의 0xf0이라는 주소를 중점적으로 말하는데, 이 주소는 매우 중요합니다. 프로그램이 ip파일 입구에 들어간 후, 즉 0x100 여기에서는 검사데이터와 세가화면을 표시한 후, 이 주소(보통 이 주소는 0x06004000 또는 0x06010000)에 따라 디스크 내의 첫 번째 파일을 이 주소로 읽으면 해당 게임의 메인 프로그램 파일(주의, 여기는 고정되어 있으므로 변경할 수 없음)로 간주할 수 있습니다. 그리고 일반적인 게임은 바로 이 주소로 건너뛰어 게임을 시작합니다. 또한 주의하십시오. ip는 메모리에 있는 주소입니다.

그러나 몇 가지 예외가 있습니다. 예를 들어, 내가 몇몇 capcom 게임을 만났을 때, ip 파일을 메모리에 저장하여 자주 사용하는 함수를 여기에 넣어 게임에서 호출하거나, 어떤 게임은 메인 프로그램 파일을 읽은 후에 메인 프로그램의 시작 부분으로 건너뛰지 않고 머리 N 바이트를 건너뜁니다.
어쨌든 세가의 대자검사가 정상으로 나온 후, 본격적으로 각종 조작을 시작할 수 있고, 주도권은 게임에게 돌아갑니다.

여기까지 얘기하자면 작동 원리를 알았으니 ISO 미러를 재구성하는 것은 간단합니다.

먼저 게임의 ip파일을 추출하여 하드디스크에 복사한 후 makeisofs와 같은 ISO파일을 만드는 도구를 이용하여 쉽게 게임을 미러링할 수 있습니다.
(다시 한 번 주의하십시오. MODE2/2352 게임의 경우 미러 안의 게임 파일을 모두 하드 드라이브에 복사하는 것은 어려운 일이 되었습니다. 가상 CDE2/2352 포맷을 사용하여 일부 파일을 복사할 때 항상 알림 오류가 발생하므로 미러를 직접 수정하여 edcecc 검사 데이터가 일치하지 않는 경우를 제외하고 원본 redump 파일에 이 문제가 발생하는 것은 MODE2/2352 포맷이 edcc 데이터를 대부분 줄이고 용량을 절약하기 때문에 디스크 한 장에 더 많은 데이터를 저장할 수 있기 때문입니다.

그러나 MODE2/2352 포맷의 데이터도 문제를 가져왔습니다. 그것은 바로 이러한 데이터를 수정할 수 없다는 것입니다. 즉, CD-ROM에서 가져온 데이터가 손상되었을 수도 있습니다. 따라서 MODE2/2352 데이터는 일반적으로 소리나 CG 영상과 같은 것입니다. 데이터가 약간 손상되었다 하더라도, 기껏해야 잡음이나 화면과 같은 것은 잘못된 프로그램을 읽은 후에 여기에 실행되어 블랙 스크린이 나타날 때보다 훨씬 낫습니다.

그러면 게임이 MODE2/2352 포맷을 사용하고 있는지 어떻게 구분하면 간단합니다. redump의 bin 파일을 예로 들자면 압축을 풀면 게임 후에 cue 파일이 하나 있을 것입니다. 메모장으로 이 cue 파일을 열면 모두 영어로 되어 있습니다. 이 cue에 MODE22352 같은 단어가 들어 있는지 검색해 보세요. 없으면 만사입니다. 있다면 그 파일들을 추출해 보십시오.

물론 마지막 경우도 있습니다. MODE2/2352 포맷은 아니지만 항상 그렇게 많은 파일이 추출되지 않습니다. 이 파일들에 대해서는 일반적으로 트랙 파일의 인덱스입니다. 대부분의 게임들은 이러한 인덱스에 따라 파일을 위치시키지 않기 때문에 이 파일들은 남기지 않아도 됩니다. 이런 파일들은 보통 CDDA track 같은 단어나 .da 접미사가 붙은 파일들이며, 이것들은 무시하셔도 됩니다. 없어도 됩니다.

그 위에 가득 찬 무더기는, 사실 대부분 원리 설명으로, 실제로 조작해 보면 2단계에 불과합니다.
1 가상 드라이브 미러링 후 ip 파일 추출
2 하드 드라이브에 게임 파일 복사
3 ISO 미러링 생성

이렇게 생성된 ISO 미러링을 에뮬레이터로 테스트할 수 있습니다(많은 트랙을 가지고 있는 일부 게임에서 ISO를 직접 테스트하면 게임에서 검은 화면과 같은 현상이 발생할 수 있습니다. 그것은 트랙을 읽는 데 오류가 있기 때문입니다. 만약 트랙이 있다면, 다음 방법으로 트랙을 로딩한 후 테스트하십시오)

ISO 형식은 트랙이 없기 때문에, 만약 게임에서 트랙을 사용했다면 어떻게 해야 재생 트랙을 불러올 수 있습니까? (만약 게임에 트랙이 하나밖에 없다면, 이 트랙은 아마도 ss 디스크의 트랙이라는 경고일 것입니다. 테스트 기간 동안 첨부하지 않아도 됩니다. 나중에 완성할 때 다시 넣을지 고려하십시오)

사실 방법도 간단합니다만, 여기에서는 첨부한 게임을 예로 들어 보겠습니다.
당신이 생성한 ISO를 원본 redump 파일과 함께 놓고 메모장으로 원본 cue 파일을 엽니다.

CATALOG 0000000000000
FILE "AI Shougi (Japan) (Track 1).bin" BINARY
  TRACK 01 MODE1/2352
    INDEX 01 00:00:00
FILE "AI Shougi (Japan) (Track 2).bin" BINARY
  TRACK 02 AUDIO
    INDEX 00 00:00:00
    INDEX 01 00:02:00


이 cue 파일 안에 "AI Shougi (Japan) (Track 1).bin" 이라는 파일명이 있는 것을 발견할 수 있습니다. 이름을 당신의 ISO 이름으로 바꾸고, 중국어 이름일 수 없으며, 접미사도 변경해야 합니다. 그리고 이름 앞뒤의 "기호는 모두 그대로 두고, 그 다음 줄의 2352를 2048로 변경하여 저장하면 됩니다.


수정된 cue 파일은 이렇습니다.

CATALOG 0000000000000
FILE "1.iso" BINARY
  TRACK 01 MODE1/2048
    INDEX 01 00:00:00
FILE "AI Shougi (Japan) (Track 2).bin" BINARY
  TRACK 02 AUDIO
    INDEX 00 00:00:00
    INDEX 01 00:02:00
이렇게 가상 드라이브로 이 cue를 불러올 때 자동으로 트랙이 로딩되는데, 그 동안 에뮬레이터로 테스트하거나 다른 도구로 포장된 bin+cue 파일을 재생성해도 됩니다.

이쯤 되면 이번 호는 마치겠습니다만, 이건, 한화 튜토리얼이라기보다는 거울 수정 재구성 튜토리얼입니다.
한화 과정에서 많은 문서를 수정해야 하기 때문에 문서가 줄어들거나 커지기 때문에 단순히 미러링 조작이 번거롭습니다. 미러링을 다시 하면 이 부분에 대한 부담이 없습니다. 문자 라이브러리 텍스트를 찾는 것도 좀 더 수월합니다. 이론적으로 대부분의 ss게임은 이 방법으로 미러링을 다시 할 수 있습니다. 적은 부분은 LBA를 직접 위치시켜 읽는 게임의 예외로 인해 현재로서는 경험하지 못한 것입니다.
또한 일부 게임에서는 파일 이름으로 읽지 않고 CD에 있는 파일의 번호에 따라 읽습니다(예를 들어 프로그램이 CD에 있는 5번째 파일을 직접 지정해서 읽습니다-_-) 따라서 이러한 게임에 대해서는 CD에서 파일 수를 늘리거나 줄이면 안 됩니다.

물론 미러링을 다시 하는 것도 단점이 있습니다. 미러링을 다시 한 후 미러링이 원래 미러와 비교했을 때 차이가 매우 크다고 할 수 있기 때문에 패치가 더 클 수도 있기 때문에 패치를 직접 나누는 방식은 불가능할 수 있습니다. 미러링 파일 전체만 공유하면 법에 저촉되는 결과를 초래할 수 있습니다. 물론 이 부분은 저희 논의의 대상이 되지 않습니다.

마지막 규칙: 압축 팩 ss_make_iso.rar (1155 K) 다운로드 횟수: 15, 압축 팩에 일반 IP 파일이 들어 있습니다. 압축 팩을 풀면 가상 광 드라이브로 로드됩니다.
게임 미러링에 들어가서 게임 파일을 data 디렉토리에 모두 복사한 후 ip.bin 파일의 헤더와 0xf0 주소를 수정하여 원래 게임과 동일하게 변경

마지막으로 더블클릭하여 1.bat를 실행하시면 됩니다(iso의 이름을 수정하시려면 메모장으로 bat파일을 열어 해당 이름을 수정하시면 됩니다)

다른 압축 패키지는 게임입니다. AI Shougi (Japan) 을 테스트하기 위해 작은 압축 패키지를 선택했습니다. zip (1835 K) 다운로드 수: 5

마지막으로 sonic3D의 큰 자료, sky0611의 회초리 및 여러분의 성원에 감사드리며, 많은 분들이 ssdc의 품에 안긴 것을 환영합니다. 모르는 것이 있으면 답글을 달아주세요.

 

ip 파일을 추출하는 방법을 따로 보내주세요, 압축팩 안의 ip 파일로 만든 미러를 사용할 수 없다면 원본 ip 파일을 사용해 볼 수 있으며 추출 방법은 다음과 같습니다.
가상 CD-ROM을 사용하여 원본 미러를 로드한 후 IsoBuster라는 도구를 사용합니다. (메이크업 π로 검색하여 다운로드하십시오)
IsoBuster를 열고 게임 디스크로 이동합니다.
볼륨 레이블에서 마우스 오른쪽 버튼으로 데이터 추출 선택 - 세그먼트 주소 지정, 유형 선택 사용자 데이터-2048, 길이 선택 16, 포인트 추출 시작, ip.bin 파일로 저장하시면 됩니다.

 

현재 삼국지2 적벽대전만 있습니다 게임 많은 프로그램들이 ip안에 있는 함수를 사용하고 있기 때문에 교체가 불가능하고 원본 ip파일만 사용할 수 있습니다.

----------------------------------------------------------------

안녕하세요, 세가 토성의 중국화 강좌가 또 있습니다. 이번에는 게임 속 그림의 중국화에 대해 이야기하겠습니다.
아래의 설명은 모두 저의 개인적인 경험과 추측입니다. 만약 틀린 말이 있으면, 시정해 주십시오.

저번 튜토리얼에서 말씀드린 게임을 예로 들려고 했는데, 그 게시물에 한화의 문제가 있어서 마침 그 게임으로 먼저 튜토리얼 시범을 보여드리도록 하겠습니다.

본 게시물은 다음과 같은 소프트웨어와 관련이 있습니다. 소프트웨어의 사용과 다운로드는 메이크업 π 검색 학습을 요청하며, 본 게시물은 지나치게 많은 소개를 하지 않습니다.

1 야바우스(ss 에뮬레이터)
2 winhex(16진수 편집 소프트웨어)
3 CrystalTile2 이하 ct2(국내 한화팀 거물들이 쓴 소프트웨어로, 주요 용도는 도트 매트릭스 생성 및 편집)
4 Photoshop (이미지 편집 소프트웨어)

위의 3가지 소프트웨어는 당신이 잘 알고 있는 다른 소프트웨어로 대체할 수 있으며, 주로 목적을 달성하면 됩니다.

먼저 시뮬레이터를 실행해서 게임을 켠 다음 수정해야 할 화면이 나올 때까지 게임을 실행하면 됩니다.

yabause 에뮬레이터는 저장된 레이어를 열고 닫는 단축키를 제공하므로
오른쪽 작은 숫자 키패드 12 34 56과 같은 레이어 바로 가기 키를 볼 수 있습니다. 

그래서 게임 화면에서 어떤 레이어를 켜거나 끄려고 시도합니다.
이 게임에서 키패드의 1버튼을 눌렀을 때 텍스트 레이어가 모두 사라졌기 때문에 텍스트 레이어가 VDP1 안에 있는 것을 확인할 수 있습니다.

그리고 나서 우리는 시뮬레이터의 vdp1 옵션에 들어가서 살펴보았습니다.

vdp1의 왼쪽 창 인터페이스에서, 우리는 다른 활성 블록을 차례로 훑어본 다음, 그 중에서 텍스트를 나타내는 활성 블록을 찾습니다.
주의하십시오. 구체적인 활동 블록을 찾은 후, 중간의 vdp 명령 정보 창에 많은 매개변수를 기록해야 합니다.
Texture address : 이 이미지 데이터는 vdp1에 있는 주소 12280 (vdp1부터 주소가 5c00000이므로 실제 주소는 5c0000+12280 = 5c12280)

Texture width : 그림 너비 176

Texture height: 그림 높이 32

color mode: 그림 표시 방식(여기서는 4bpp 16bank) 즉, 반 바이트는 1픽셀, 1바이트는 2픽셀, 반 바이트의 최대값은 0xf이므로 최대 16컬러만 표시할 수 있습니다.

color bank : 이 그림은 색상표의 번호 3380을 사용합니다. (번호가 특정 주소로 변환되는 자세한 알고리즘을 잘 모르며, 4로 나누면 되는 것 같습니다?자료를 보니 초기 야바 시뮬레이터의 팔레트가 왼쪽으로 3자리 이동하였으므로 4로 나누어야 하며 저해상도 포맷이면 8로 나누어야 함) 그리고 vdp1의 팔레트가 4 BPP(16 color LUT)로 표시되면 색상표 데이터는 VDP1의 메모리에 있습니다(색상표 시작 주소는 5f0000+3380/4=5f00ce0)

모든 정보를 다 기록한 후, 우리는 먼저 실행 중인 게임 데이터를 dump합니다.

그리고 dump가 저장되는 주소와 이름을 설정해두면, 시작 주소는 0, 끝 주소는 기본, 다운로드를 선택하고 마지막으로 OK를 누르면 됩니다. 

다음으로, 우리는 방금 dump의 파일을 ct2로 엽니다.
먼저 그래픽 디스플레이 모드로 전환한 다음 그림에서 화살표를 눌러 인자를 설정하면 텍스트가 표시되지만 색상이 잘못 표시됩니다.

그리고 앞에서 팔레트의 구체적인 주소(5f0000+3380/4=5f00ce0)를 계산했기 때문입니다.
그래서 우리는 winhex로 원래 시뮬레이터 dump의 파일을 열고 바로 5f00ce0이라는 주소로 건너뜁니다.

빨간색 테두리가 이 그림의 색상표입니다. (ss의 색상표는 보통 16bit이고 2바이트는 하나의 색상을 나타내므로 16개의 색은 16x2=32바이트입니다)

그러면 문제가 또 생겼는데 ct2의 컬러리스트가 3바이트 rgb만 지원하는 act포맷, 혹은 4바이트 rgba의 pal포맷을 가져오기 때문에 우리는 원래 게임의 2바이트 컬러리스트를 3바이트 act 또는 4바이트 pal포맷으로 옮겨야 합니다.
구체적으로 어떻게 돌려야 할까요?

대부분의 ss 컬러시트는 xrgb 1555 (1+5+5=16bit=2바이트)
그래서 여기는 스스로 전환해야 합니다.
구체적인 알고리즘은 다음과 같습니다.

ss 색상 표 형식, 2바이트는 색상을 나타냅니다.  
첫 바이트 byte 1 
두 번째 바이트 byte 2
 r=(byte1&0x7c)<<1; // 첫 번째 바이트에서 최상위 비트를 버리고 다음 5비트 비트, 결과 x2    
 g=(byte1&0x3)<<6)+(byte2&0xe0)>2);/ 첫 번째 바이트의 최소 2비트 곱하기 64)+ (두 번째 바이트의 최대 3비트 곱하기 4)
 b=(byte2&0x1f)<<3;/ 두 번째 바이트의 가장 낮은 5bit를 취하고, 그 결과에 8을 곱하기
계산된 rgb는 act 형식의 첫 번째 색상입니다. 이렇게 유추하여 다음 색상을 계속 계산합니다.......

sky0611에 온라인 전환 웹 페이지를 크게 작성해 주셔서 감사합니다, 이렇게 하면 튜토리얼을 맞추면 훨씬 편리합니다.
자세한 사용 방법은 본 게시물의 11층에 있습니다.

이 방법에 따라 16개의 색상을 모두 변환한 후 파일을 act로 저장합니다.
그런 다음 ct2에서 색상표를 선택하여 이 파일을 로드합니다.

이미지가 기본적으로 정상으로 뜨는 것을 볼 수 있는데, 왜 배경 표시가 잘못된 걸까요?
사실 게임에서는 팔레트의 첫 번째 색상이 기본적으로 투명색으로 표시되기 때문에 ct2에서는 첫 번째 색을 그대로 보여줍니다.

dump 파일에서 이미지 데이터를 찾은 이상, 다음으로 이미지 데이터가 구체적으로 어느 파일에 있는지 찾아야 합니다.

우선 우리는 winhex로 dumo 파일을 열고 이 그림의 구체적인 주소로 건너뜁니다.

빨간색 테두리 안에 이 그림의 데이터가 있습니다. 먼저 0000 수치가 아닌 연속 데이터를 선택한 다음 선택한 데이터에서 마우스 오른쪽 단추를 누릅니다.
선택 편집

그런 다음 선택한 데이터를 클립보드에 복사하도록 선택 항목, 16진수 값 복사를 계속합니다.


이어 winhex를 이용하여 게임 폴더에 있는 몇 개의 파일을 winhex로 한 번에 끌어다 놓고 대량 검색을 합니다. (수량이 어느 정도인 경우, 컴퓨터가 끊기지 않는 한, i7 3770k 16g 메모리의 골동품 기계도 한번에 수백 개의 파일을 끌 수 있습니다.)

운이 좋게도, 정말 서류 속에서 찾았습니다.

다음으로 ct2로 이 파일을 열고 찾은 주소 DDC0으로 건너뜁니다. 
세심한 친구는 주소 ddc0의 앞부분, 즉 dda0에서 2바이트 그룹의 색상표 데이터를 발견하는 것을 보았을 것입니다.

역시 뜨네요, 그럼 원래 만든 act 색상표까지 불러오면 정상으로 나옵니다. (파렛트--act 가져오기)

그림 뒤에 불완전한 텍스트 그림이 몇 장 더 보입니다. 그림의 너비와 높이를 수동으로 조절한 다음 하나씩 내보냅니다. (어셈블리를 볼 줄 모르며 프로그램을 쓸 줄 모릅니다.)

이때 우리는 ct2를 사용하여 첫 번째 텍스트 이미지를 내보낼 수 있습니다.
왼쪽 마우스 버튼을 눌러 첫 번째 그림을 선택한 다음 편집하기 - 내보내기 - bmp로 저장

그러면 이제 포토샵을 켜서 이미지 수정을 할 수 있습니다.


ps 작업은 본인 수준이 제한되어 있으므로 더 이상 말하지 않겠습니다. 주의할 점은 저장할 때 원래의 색상표를 가져와야 하며, bmp로 따로 저장하여 설정해야 합니다.

사진을 다 고쳤으니, 지금은 당연히 사진을 원본 파일 안으로 가져왔습니다.
ct2 그림 파일을 열고, 원래 그림 위치로 건너뛰고, 관련 매개 변수를 설정하고, 왼쪽 마우스 버튼을 눌러 원본 그림을 클릭한 다음, 편집, 가져오기를 클릭하여 수정된 그림을 선택합니다.

가져온 그림을 볼 수 있지만 아직 완료되지 않았습니다. 가져온 그림에서 마우스 왼쪽 단추를 두 번 누른 다음 저장소를 눌러야 원본 파일에 그림을 쓸 수 있습니다.

파일이 들어갔습니다, 그럼 ISO를 재구성해서 테스트해 보세요.

글자가 정상적으로 뜨는 것을 볼 수 있습니다.              

마지막으로 요약을 하자면, 위에서 한 무더기의 이야기를 하고, 한 무더기의 사진을 보냈는데, 보기에는 복잡해 보이지만 사실은 정말 이해했습니다. 능숙하게 다루기가 매우 빠릅니다.
위의 튜토리얼은 그림 데이터가 암호화되지 않았거나 압축된 게임에 적용됩니다. 만약 암호화가 압축되어 전체 게임 폴더에서 검색되지 않는다면 압축되었거나 암호화되었을 수 있습니다.

한화는 세심함과 인내심을 시험하는 역무로, 3분간의 열정과 중도에 포기하는 사람이 비일비재합니다.
그래서 옛말에 구름이 있고 생명을 소중히 여기며 한화를 멀리합니다.

'Retro > SS' 카테고리의 다른 글

새턴 - 윈도우 통신 케이블  (0) 2024.06.22
새턴 셔틀 마우스 관련  (0) 2023.05.28

https://github.com/mathijsvandenberg/picox86/

Adafruit Qty Rp2040을 사용한 세이브군 대체 디바이스

https://github.com/dshadoff/PC_Engine_RP2040_Projects/tree/main/Membase

 

GitHub - dshadoff/PC_Engine_RP2040_Projects: Projects designed for PC Engine and other retro-machines, using RPi Pico or other R

Projects designed for PC Engine and other retro-machines, using RPi Pico or other RP2040 hardware - GitHub - dshadoff/PC_Engine_RP2040_Projects: Projects designed for PC Engine and other retro-mach...

github.com

 

PC_Engine_RP2040_Projects - 메모리 베이스 128 재구현

개요

이것은 최신 하드웨어용으로 작성한 Memory Base 128의 세 번째 구현이며 읽고 따라하기 가장 쉬운 코드입니다. Raspberry Pi Pico 마이크로 컨트롤러의 PIO는 데이터 입력의 에지 감지에 사용되고 ARM 코어는 처리에 사용됩니다.

데이터는 시작 시 SRAM에 로드되고 트랜잭션이 발생한 후 Flash에 저장됩니다. 플래시 플러시가 진행되는 동안(읽기 또는 쓰기 트랜잭션 그룹의 마지막 읽기/쓰기 후 0.75초가 소요됨) 디바이스가 추가 명령을 처리할 수 없기 때문에 이는 이상적이지 않을 수 있습니다. 이 플러시가 발생하는 동안 PIO 상태 머신이 종료되므로 혼동을 일으키는 비트의 백로그가 없습니다. 그러나 플래시 쓰기 기간 동안 트랜잭션이 발생하면 인식되지 않으며 PC 엔진 게임에서 오류를 식별할 수 있습니다.

상태는 메인 보드의 LED로 표시되며 조이패드 커넥터에 인접한 장치에 움푹 들어가 있습니다.

노란색(왼쪽) = 장치 활성
녹색(오른쪽) = 읽기
빨간색(오른쪽) = 쓰기
파란색(왼쪽) = 지연된 플래시 메모리 커밋

소스 코드

이것은 Pico-SDK 버전 1.2.0을 사용하여 빌드되었습니다.

소스를 빌드하려면 먼저 올바른 버전의 RaspberryPi/piso-sdk가 설치되어 있는지 확인하십시오. 이 보드는 Adafruit QtPy2040 보드를 대상으로 하므로 make_ada.sh 스크립트(UNIX에서) 또는 명령줄에서 실행해야 합니다.
"cmake -DPICO_BOARD=adafruit_qtpy_rp2040 -B build"
그런 다음 "cd build" 및 "make".

또한 releases/ 폴더에 프로그램의 릴리스 버전을 uf2 파일로 포함시켰습니다. 보드를 BOOTSEL 모드로 전환할 때 표시되는 가상 드라이브에 끌어다 놓기만 하면 됩니다('부팅' 버튼을 누른 상태에서 보드를 USB로 호스트 컴퓨터에 연결하고 버튼에서 손을 뗍니다. 새 드라이브가 컴퓨터에 나타납니다).

PC 보드 및 어셈블리

무료 버전의 EAGLE(X축과 Y축 모두 100mm 미만의 2레이어)을 사용하여 모든 보드를 설계했습니다. 거버는 자신만의 세트를 만들고자 하는 경우를 대비하여 이 저장소에 포함되어 있습니다.

JLCPCB에서 이러한 보드를 조립하기 위해 gerbers 및 관련 bom.csv 및 assembly.csv 파일을 포함했지만 여전히 다음 부품이 필요합니다.

  • (2) 8핀 Mini-DIN 커넥터
  • (1) Adafruit QtPy RP2040 마이크로컨트롤러 보드
  • (2) 7핀 헤더. 마이크로컨트롤러 보드를 제거해야 하는 경우 암 핀 헤더 소켓을 사용할 수도 있습니다. 이 경우 짧은/로우 프로필 헤더 소켓을 사용하는 것이 좋습니다.

보드 스택업을 위한 장착 하드웨어도 필요합니다.

  • (4) M3 x 13mm 암-암 스탠드오프; 평평한 면과 평평한 면은 5.0mm보다 크지 않아야 합니다. 이 크기에 맞게 장착 구멍이 만들어지기 때문입니다. (4.5mm도 괜찮습니다)
  • (8) M3 나사, 길이 6mm(*) - 스루홀 리드를 보드와 같은 높이로 자르지 않으면 더 길어질 수 있습니다.
  • 선택적 고무/실리콘 다리

그리고 사용하려면 짧은 8핀 미니 DIN 수-수 케이블도 필요합니다(다양한 길이는 eBay에서 찾을 수 있음).

집회

"케이스"는 쌓인 PC 기판으로 구성되며 PC 기판은 상단과 하단에 있습니다. 모두 5개의 서로 다른 보드가 있지만 다음과 같이 13개의 레이어가 있습니다.

  1. 상단 = "PCE128_Rev_C_Face"의 1 레이어, 1.6mm 두께, ENIG 보드
  2. MidTop = "PCE128_Rev_C_MidTop"의 6개 레이어, 1.6mm 두께, HASL 보드
  3. MidLow = 3개 레이어, 1.2mm 두께, "PCE128_Rev_C_MidLow"의 HASL 보드(MidTop과 비슷해 보이지만 LED용 컷아웃이 있음)
  4. 메인 보드 = "PCE128_Rev_C2_Main"의 1 레이어, 1.6mm 두께, HASL, SMD 어셈블리 보드(참고: 일부 부품은 이전 "B" 버전에서 변경되었습니다. 상호 교환 불가능)
  5. 하위 = 1층, 0.8mm 두께(*), "PCE128_Rev_C_Sub"의 HASL 보드
  6. 하단 = 1 레이어, 1.6mm 두께, "PCE128_Rev_C_Face"의 ENIG 보드(뒷면이 밖으로 향함)

(*) 스루홀 부분을 위한 공간을 만들기 위해서만 존재하는 얇은 "하위" 레이어를 가능하게 하는 보드와 같은 높이의 스루홀 리드를 트리밍합니다. 이러한 플러시를 다듬지 않으면 훨씬 더 두꺼운 하위 레이어와 더 긴 M3 나사가 필요할 수 있습니다.

조립 단계:

  1. 실장 시 기판 밑면의 땜납 "범프"를 최소화하기 위해 스루홀 부품의 리드를 조심스럽게 다듬습니다. 장착할 관통 구멍 부품에는 8핀 미니 DIN 소켓과 RP2040 보드용 헤더(또는 소켓)가 포함됩니다. 미니 DIN 커넥터가 똑바로 장착되었는지 확인하십시오. 그렇지 않으면 상위 레이어 보드를 배치하는 데 문제가 있을 수 있습니다.
  2. 조심스럽게 납땜하여 보드 아래의 "범프" 양을 최소화합니다.
  3. LED가 가장 가까이 있는 상태에서 USB 커넥터가 있는 RP2040 보드를 오른쪽에 장착합니다.
  4. "부팅" 버튼을 누른 상태에서 호스트 컴퓨터에 연결하십시오. 이렇게 하면 DFU 모드로 전환되고 호스트 컴퓨터에 가상 드라이브가 생성됩니다. *.uf2 펌웨어 파일을 해당 폴더로 끌어다 놓습니다. 잠시 후 가상 드라이브가 사라지고 약 1초 후에 메모리 장치 부팅 순서의 일부로 4개의 LED가 모두 잠시 켜집니다. USB에서 분리하십시오.

보드 쌓기의 경우 암-암 스탠드오프의 한쪽에 보드의 하단 레이어를 통과하는 나사로 하단 보드를 먼저 연결하는 것이 가장 좋습니다. 그런 다음 상층 보드를 간단히 쌓을 수 있고 상단 나사를 쉽게 조일 수 있습니다.

그리고 마지막 터치: PC 보드의 가장자리는 전면/후면 표면과 다른 음영으로 되어 있어 좋아할 수도 있고 싫어할 수도 있는 투톤 효과를 만듭니다. 케이스를 균일한 "블랙 박스"처럼 보이게 하기 위해 PC 보드 가장자리를 따라 Sharpie 마커를 사용하여 어둡게 만들었습니다. 쉐이드는 JLCPCB의 매트 블랙 솔더 마스크와 유사하므로 표준 조명이 있는 영역에서 잘 어울립니다. 영구적인 Sharpie 잉크는 젖으면 작동하지 않지만 알코올 기반 용제 근처에서는 주의하십시오. 이러한 상황에서는 잉크가 번지거나 얼룩질 수 있습니다.

시각적 보기는 다음과 같습니다.

 

노트

Adafruit QtPy RP2040은 설계하기 쉬운 컴팩트한 폼 팩터이므로 가능한 한 많이 사용하려고 노력했습니다.

불행히도 Adafruit 사이트는 모든 사용자를 Pi SDK가 아닌 CircuitPython으로 안내하려고 시도하므로 결과적으로 RP2040 장치에 대한 "Pinout" 페이지의 Pinout 페이지에는 GPIO 번호에 대한 참조가 포함되지 않습니다.

따라서 여기에 그래픽을 포함합니다.

 BOM

https://github.com/dshadoff/PC_Engine_RP2040_Projects/blob/main/Membase/EAGLE/PCE128_Rev_C2_Main/BOM.csv

'Retro > PCE DUO' 카테고리의 다른 글

Duo Disabler 설치 가이드  (0) 2024.10.18
콘덴서 리스트  (0) 2023.06.12
사운드 문제 해결용 부품  (0) 2023.05.16
FRAM 개조  (0) 2023.05.16
블루레트로 장착  (0) 2023.05.16

https://github.com/ClusterM/fdskey/releases/

 

Releases · ClusterM/fdskey

Famicom Disk System drive emulator. Contribute to ClusterM/fdskey development by creating an account on GitHub.

github.com

 

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

NESTang 제작  (0) 2023.07.08
전원부 및 AV단자 교체  (0) 2023.05.29

'Retro > PCE DUO' 카테고리의 다른 글

Duo Disabler 설치 가이드  (0) 2024.10.18
Membase - 메모리 베이스 (세이브군) 대체  (0) 2023.06.15
사운드 문제 해결용 부품  (0) 2023.05.16
FRAM 개조  (0) 2023.05.16
블루레트로 장착  (0) 2023.05.16

https://blog.naver.com/deadlyrave/220498827633

 

[DC] 드림캐스트 내장 배터리 교체

안녕하세요? 데커드입니다. 오늘은 드림캐스트 내장 배터리 교체를 해봤습니다. 드캐는 충전형 배터리를&nb...

blog.naver.com

배터리홀더 구입처 : https://www.eleparts.co.kr/goods/view?no=4260240 

 

[2032홀더] CH74-2032 플라스틱 DIP타입 (BS-7,반달홀더)

 

www.eleparts.co.kr

ML2032(충전형 2032전지) 구입처 : https://shopping.interpark.com/product/productInfo.do?prdNo=448343438&dispNo=016001&bizCd=P01397&utm_medium=affiliate&utm_source=naver&utm_campaign=shop_20211015_navershopping_p01397_cps&utm_content=conversion_47 

 

충전용 리튬건전지 맥셀 ML2032 3V 65mAh 벌크 1개입 - 인터파크

전기/조명에 대한 상품입니다.

shopping.interpark.com

 

'Retro > DC' 카테고리의 다른 글

전원 220V 개조  (0) 2023.06.01

https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=deadlyrave&logNo=220653001597 

 

[DC] 일판 드림캐스트 220v 개조기

안녕하세요? 오늘도 아주 간단한 게임기 개조로 인사드립니다. 일판 드림캐스트 220v 개조입니다.세가社 비...

blog.naver.com

 

교체해야 하는 콘덴서. 100uF 200V짜리.

납땜위치는 이곳

68uF 400V로 교체하여 납땜해준다. 

 

'Retro > DC' 카테고리의 다른 글

내장배터리 교체 개조  (0) 2023.06.01

https://github.com/hakkslab/FamicomPowerBoard

 

GitHub - hakkslab/FamicomPowerBoard: A USB/composite power board replacement for the Famicom

A USB/composite power board replacement for the Famicom - GitHub - hakkslab/FamicomPowerBoard: A USB/composite power board replacement for the Famicom

github.com

 

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

NESTang 제작  (0) 2023.07.08
디스크 시스템 에뮬레이터 FDSKey  (0) 2023.06.15

+ Recent posts