2024년 11월 1일 금요일

WAU 제작 #7 - S3M 플레이어 테스트

WAU에 들어있는 Wi-Fi 모듈은 ESP-12F입니다.

ESP8266 32BIT MCU에 4MB(32Mbit) SPI 플래쉬롬이 붙어있는데요. 이 플래쉬롬은 1MB 영역만 CPU에 매핑됩니다.

결국 나머지 3MB는 코드가 아닌 다른 영역으로 활용하게 됩니다.


보통은 F/W를 2세트로 넣어서, 런타임으로 다운로드 및 교체하는 방식으로 2MB를 사용하구요.

나머지는 영역에는 파일시스템을 탑재하거나, 별도의 데이터로 활용하면 됩니다.

아니면 그냥 F/W를 4세트로 넣어버려도 좋구요 ㅎ.ㅎ


사실 1MB 맵에서 공용 데이터를 제외하면 실제 메인 프로그램의 영역은 896KB가 되는데요.

이게 TCP/IP 및 RF 등의 기본적인 코드만 넣어도 700KB 수준이라서,

사용자가 추가할 수 있는 코드가 200KB 정도로 보시면 되겠습니다.


현재 WAU에서는 기본 F/W 1개, MP3 스트리밍 모드 전용(TCP 수신버퍼 최대활용) F/W 1개가 들어갑니다.

이제 플래쉬롬 2MB가 남았네요.

남은 부분으로 뭘 만들면 재밌을까요? ㅎ.ㅎ


Wi-Fi 모듈 및 USB-UART 모듈은 둘 다 UART 921KBPS를 사용합니다.

UART start 1bit, data 8bit, stop 1bit 세팅에서 92KB/s 전송이 가능합니다.


만약 전송되는 데이터를 몽땅 사운드 PCM으로 활용한다면, 오디오 디코더처럼 쓸 수 있겠네요!

16BIT MONO 44KHz PCM은 가능하겠죠? STEREO PCM이라면 16BIT 22KHz 또는 8BIT 44KHz가 되겠습니다.

전송되는 데이터는 88KB/s입니다.


사운드 테스트를 위해 S3M 플레이어를 넣어보았습니다.

RTOS와 최소한의 라이브러리만 남기고, 기본적인 S3M 플레이어 코드를 넣으니, 285KB 정도의 F/W를 만들 수 있네요.

896KB 범위 내에서라면... 608KB 정도의 S3M 데이터를 넣어서 실행가능합니다.


참고로, ESP8266 칩은 사용자용 램(캐시를 제외)이 80KB밖에 없어요.

따라서 프로그램에서 쓰는 변수 외의 const 데이터 테이블은 모두 SPI 플래쉬롬 상에서 직접 액세스해야합니다.

캐시도 작아서, 악기용 PCM 샘플과 노트 데이터를 연속으로 읽으면 캐시미스로 성능이 대폭 하락할 예정ㅋ


그래도 한번 해보면 재미겠죠? ㅎ.ㅎ


전체적인 프로그램의 흐름은 이렇게 되겠습니다.

1. MSX의 디스크에서 S3M 데이터를 읽어서 ESP로 전송합니다. (SPI 플래쉬롬 1섹터 4KB단위)

2. ESP에서는 전송받은 S3M 데이터를 플래쉬롬에 다운로드합니다.

3. 전송 및 다운로드가 완료되면, ESP에서 S3M 전용 F/W로 전환하고 리부팅합니다.

4. ESP의 S3M 플레이어는 최종 PCM 데이터를 생성 후 MSX로 전송(스트리밍)합니다.

5. MSX에서는 수신된 PCM 데이터를 WAU의 VS1003 디코더로 전송합니다.

6. 주기적으로 VS1003의 스펙트럼 애널라이저 데이터를 수신하여, PAC-V의 LED 비주얼라이저를 설정합니다.


이렇게 해서, 최종 오디오는 WAU의 HP출력단자로 나오게 되겠습니다요~ ㅎ.ㅎ/


그럼, 제 GT에서 동작하는 모습을 보시죠!




이번 S3M 플레이어는 이런식으로 Wi-Fi(ESP) 모듈을 활용할 수 있다...정도로 보시면 되겠습니다.

이미 문사운드용 MOD/S3M 플레이어가 있어서, 굳이 WAU-S3M을 사용할 이유는 딱히 없어요 ㅎ.ㅎ


그럼, 다음편에서 이어집니다...


2024년 10월 27일 일요일

WAU 제작 #6 - 윈도 VHD 활용

지난 '#5 - PC 리모트 드라이브' 글에서 PC의 이동식(Removable) 디스크를 WAU에 연결하는 것을 보여드렸는데요.

오늘 문득 이런 생각이 들더라구요.

'혹시 윈도의 VHD(가상 하드 디스크)가 Removable로 등록이 되었던가?'

.

.

.

그래서 해봤습니다 ㅎ.ㅎ


아래 스크린샷은 저의 윈도11 기준입니다. 혹시 윈도10을 쓰시는 분이라면 제어판이 조금 다를 수 있으니 참고하셔요.


제어판에서 '시스템 > 저장소 > 디스크 및 볼륨' 메뉴로 가면 VHD 만들기 항목이 나옵니다.

아래처럼 2GB 고정크기로 만들면 되겠습니다.



레이블은 적당히 MSX_WAU로 넣었구요. 파일시스템은 당연히 FAT으로 하셔야합니다. ㅎ.ㅎ

몇가지 테스트용 파일들을 복사해서 넣었습니다.



마운트 해제는 '꺼내기' 버튼을 누르시면 되구요.



다시 마운트하려면 VHD 파일에서 탑재 메뉴를 선택하면 되겠습니다.



이제 WAU Server를 실행해봅니다.

아래처럼 'V: MSX_WAU' 드라이브가 목록에 나옵니다. 짜잔~



아래는 실기에서 WAU로 연결한 모습입니다.




PC와 MSX 공유용 드라이브는 윈도의 VHD를 활용하는 편이 간단하고 좋네요 ㅎ.ㅎ/


그럼, 다음편에서 이어집니다...


2024년 10월 25일 금요일

WAU 제작 #5 - PC 리모트 드라이브

MSX와 PC가 네트웍으로 데이터를 공유한다면, 어떤 방식을 쓰는 것이 좋을까요?


이번에 WAU에서 구현된 'PC 리모트 드라이브' 기능은,

PC에 연결된 이동식(removable) 디스크의 RAW 섹터 액세스를 그대로 MSX에서 동작시켜주는 방식입니다.

실제 HDD는 PC에 연결되어 있지만, MSX 유저는 로컬 디스크를 쓰는 것처럼 모든 디스크 기능들이 그대로 동작되는 거죠.


왜 이동식 디스크라는 얘기를 썼냐면요.

윈도에서 물리적인 디스크 섹터의 액세스를 일반 프로그램에세 허용해 주는 것이 제한되어있습니다.

PC 본체에 물려진 내장 디스크는 접근이 안되거든요.

물론 커널 드라이버를 만들면 되겠지만... 어차피 MSX가 인식할 수 있는 게 저용량 FAT16이니까,

그냥 적당한 외장 디스크(USB 메모리스틱, USB HDD 등)를 붙입시다요~ ㅎ.ㅎ/


아래는 제가 백업용도로 쓰고 있는 USB HDD입니다.

용량이 2TB인데, 끝부분 2GB정도만 잘라서 FAT16으로 포맷 후 Y: 드라이브로 마운트했놨습니다.

테스트 용도로 폴더 및 파일들을 복사해놨구요.



PC와 MSX WAU간의 TCP 통신을 위해, 간단하게 만든 PC쪽 서버 프로그램을 실행해둡니다.


.

.

.

'이제 와우 서버에서 얼라이언스와 호드가 만나게 되는데...'는 아니구요.

WAU에서 요청하는 드라이브의 간접 액세스를 대신 처리하는 용도입니다 ㅎ.ㅎ


그럼, MSX쪽에서 서버 설정 및 드라이브 선택을 해야겠죠?

WAU프로그램에서 /D:IP주소 옵션을 입력하면, 아래처럼 PC의 드라이브가 연결됩니다.

PC의 Y: 드라이브를 MSX의 H: 드라이브로 동작이 됩니다. DOS의 DIR H: 명령이 실행된 모습이네요.




WAU의 드라이브 문자는 기존 일반 드라이브처럼 부팅 시 정해집니다만, 약간의 차이점이 있어요.


- 마스터 디스크롬으로 등록불가

  WAU를 빠른 슬롯에 꽂았을 때, WAU의 디스크롬이 마스터가 되어 부팅 드라이브 A:가 되는 것을 막기 위함입니다.


- 슬레이브 디스크롬으로 등록 순위

  WAU가 빠른 슬롯에 장착되어, 첫 디스크롬으로 실행되는 경우는 드라이브 등록을 취소합니다.

  따라서 다른 디스크롬이 부팅 드라이브 A:부터 점유하게 됩니다.

  이 때, MMC/SD V3 또는 V4가 존재한다면, MMC/SD 이후의 드라이브로 등록됩니다.


  예를 들어 FDD가 내장된 파나소닉 기종에서,

  SLOT 1   = WAU

  SLOT 2   = MMC/SD V4

  SLOT 3-2 = FDD

  로 배치했다면, V4 -> WAU -> FDD 순으로 드라이브가 등록됩니다

  만약 V3, V4 외의 대용량 디스크드라이브를 사용한다면,

  해당 디스크를 SLOT 1에 넣고, WAU를 SLOT 2에 장착하는 식으로 쓰면 됩니다.


  다른 예로 X-II에서,

  SLOT 2   = FDD

  SLOT 3-0 = V4

  SLOT 3-3 = WAU

  로 배치했다면, V4 -> WAU -> FDD 순으로 등록됩니다.

  X-II에서는 내장 FDD가 가장 늦게 리매핑이 되도록 해놨습니다.



아래는 M 파일매니저를 실행한 모습입니다.

그냥 MSX의 로컬 디스크를 쓰는 것과 동일하게 사용하면 됩니다.

DOS 커맨드를 쓰거나 Disk BASIC에서 명령들을 똑같이 쓸 수 있어요.



그럼, 실제로 사용하는 모습을 영상으로 보시겠습니다.





그럼, 다음편에서 이어집니다...