2025년 1월 19일 일요일

A1GT에 장착된 삼성FDD에 덮개를 달아주었습니다

2023년에 클랴님이 제작하신 FDD덮개를 구했는데요.

1년만에 장착을 해보았습니다 ㅎ.ㅎㅋ


FDD덮개는 아래처럼 생겼습니다.

스프링이 도망가지 않게 글루건으로 조금 쏴주었어요.




덮개를 장착해보니, FDD 안쪽의 부품에 걸리네요.

아마 FDD 모델에 따라 편차가 있겠지만, 제 경우는 저기 걸려서 안나오더라구요 ㅎ.ㅎ




니퍼로 살짝 잘라주니 잘 움직이네요!




제가 쓰는 삼성FDD는 REV.T9입니다. 혹시 같은 모델을 쓰시면 참고하셔요.




그럼, 이만...

2025년 1월 18일 토요일

WAU 제작 #12 - 터미널용 폰트

Wi-Fi도 있고, UART도 있으면 터미널(단말기)로 활용하는 것이 먼저 떠오르긴 하는데요.

MSX를 터미널로 만들어서 뭘 할 수 있을까요?

.

.

.

2025년 현재, 아무리 머리를 굴려도 반짝하고 떠오르는 건 딱히 없네요 ㅎ.ㅎ

뭐, '못쓰는 것'과 '안쓰는 것'은 조금 차이가 있긴 합니다요.


MSX2의 텍스트2 모드는 SCREEN 0에서 WIDTH 80 명령을 쓰도록 되어있습니다.

이 모드는 80 x 24 텍스트로 동작하니까, 터미널 기본 화면으로 딱 맞습니다.

근데, 이대로 쓰는 건 재미없으니까, 고해상도 그래픽 모드로 한글도 쓸 수 있도록 해보아요~


스크린7 인터레이스 또는 스크린6 인터레이스 모드를 위한 폰트를 만들어봅시다.

참고로, 화면 해상도는 512 x 424입니다.

영문 6 x 16, 한글 12 x 16 픽셀이 필요하겠네요.


먼저 ASCII 영역의 폰트를 에디터로 대강 찍어보았습니다.




한글 폰트는 둥근모 폰트를 폭을 줄여서 만들어봤습니다.

세로 라인들이 1픽셀로 바뀌어서 그런지, 둥근모의 느낌이 많이 사라지더라구요.




한자폰트는 워낙 많아 손으로 수정하는 건 불가능해서,

그냥 기존 폰트를 대충 스케일다운해서 넣었습니다.

모양이 안좋습니다만... 없는 거 보다는 낫겠죠? ㅎ.ㅎㅋ





WAU의 폰트 I/O는 한글 폰트팩의 그것과는 조금 구현이 다르게 되어있습니다.

WAU쪽은 1BPP, 4BPP 데이터만 처리가능하구요.

I/O포트로 읽을 때 16bit 어드레싱을 쓰도록 되어있습니다.

만약 IN A,(N) 명령을 쓰려면, 매번 A레지스터로 상위 8bit 주소를 넘겨야하니 쓰기 힘들겠네요.

그냥 IN r,(C), INI, INIR 등의 명령을 써야합니다.


보통 1BPP 폰트는 램으로 전송 후, 그래픽 모드에 맞춰서 다시 그려주니까...

폰트를 읽을 때에는 B레지스터를 16(영문) 또는 32(한글)로 놓고 INIR로 주르륵 가져오면 되겠습니다.


4BPP 폰트는 1BPP의 1/0가 아닌 15/0으로 데이터가 들어옵니다.

폰트팩의 경우는 컬러매핑 기능이 있어서, 설정된 컬러값으로 자동변경됩니다만,

WAU의 폰트는 컬러 변경을 SW로 해야합니다요~ 컬러값과 AND 연산을 해주면 되겠죠.


폰트를 연속으로 읽으려면,

먼저 B레지스터를 0으로 설정 후 IN r,(C)로 읽고, DEC B로 주소를 카운트다운합니다.

IN 및 DEC를 반복으로 하면 되겠죠.

한글폰트의 경우 96바이트를 읽게 됩니다.


참고로 한글코드는 CP949를 지원합니다.

WAU의 내장 FlashROM 절반을 폰트데이터로 쓰고 있어요ㅋ


아래는 영문 6 x 16 폰트 및 한글 12 x 16 폰트를 출력해본 모습입니다.

메인 BIOS의 영문 6 x 8 폰트도 함께 표시했으니, 사이즈를 비교해보셔요~





실제 터미널 프로그램에서는 어떻게 표시되는지 볼까요?

간이 텔넷 프로그램을 만들어보았습니다. 요건 영상으로 보시죠.

고해상도 그래픽이라 많이 무겁습니다만, turboR의 도움을 받으시면 좋아요 ㅎ.ㅎ




WAU의 기본 기능은 이정도로 마무리합니다~ ㅎ.ㅎ/

PS. 2025-01-19
한글 머드 서버가 있어서 접속해보았어요!




2025년 1월 12일 일요일

WAU 제작 #11 - LPT & AUX Driver

기본적으로 UART Tx/Rx는 COM 디바이스로 사용합니다.

근데, BASIC과 DOS에서는 LPT(또는 PRN) 및 AUX 디바이스가 미리 등록되어있어서,

Hook을 이용하면 이 디바이스를 사용자가 원하는 입출력으로 바꿔서 활용할 수 있습니다.

WAU의 UART를 LPT(PRN), AUX 디바이스로 등록하여 사용하는 방법을 보여드리겠습니다요~


@ LPT-UART


원래 LPT(PRN) 디바이스는 본체 후면에 연결되는 프린터 포트로 동작합니다.

WAU의 LPT-UART 드라이버를 설치하면, LPT가 UART-TX로 바뀌어 동작하게 됩니다.

DOS에서 WAU.COM /LPT 명령을 쓰면 설치됩니다.


아래는 DOS에서 AUTOEXEC.BAT 파일을 PRN 디바이스로 출력(하드 카피)한 모습입니다.



아래는 BASIC의 LLIST 명령을 실행한 모습입니다. UART Tx를 프린터처럼 쓸 수 있어요.



이번에는 LPT 디바이스에 문자를 직접 출력해보았습니다.

간단하게 OPEN 후 PRINT 명령이 실행된 상태입니다. COM 디바이스로 출력하는 것과 똑같죠 ㅎ.ㅎ




@ AUX-UART


AUX는 DOS에서 자동으로 등록되는 디바이스입니다.

DOS에서 WAU.COM /AUX 명령을 쓰면 드라이버가 설치됩니다.


그럼, DOS에서 AUX 디바이스로 데이터를 받아서 파일로 저장하는 걸 보시죠~


먼저 COPY AUX MSX.TXT 명령으로 AUX 입력을 처리하도록 합니다.



PC쪽 터미널에서 텍스트파일(MSX_LOGO.txt)을 UART로 전송합니다.



MSX에서 AUX 입력을 중지하려면 CTRL-STOP을 눌러줍니다.

아래처럼 TYPE 명령으로 저장된 파일의 내용을 확인해봅니다.

(ASCII 아트로 만든 MSX 로고에요 ㅎ.ㅎ)



이번엔 반대로 MSX에서 AUX로 파일을 출력해봅니다.

PRN으로 출력하는 것과 똑같은 방법입니다. PC쪽 터미널에도 잘 나오네요.



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


2025년 1월 11일 토요일

WAU 제작 #10 - Serial BIOS

일반적으로 MSX에서 처리속도와 멀티 I/O가 필요한 곳은 Memory mapped I/O를 주로 쓰고,

I/O 접근 편의성이 더 중요한 곳은 I/O Port를 씁니다.


WAU는 SPI, UART 등 모든 I/O에서 Port mapped I/O를 사용합니다.

MP3 모듈, Wi-Fi, UART를 동시에 활용하는 등의 여러가지 상황에서 편하게 쓰기 위함이 목적이죠.

뭐, 조금 아쉬운 거라면 Z80에는 port to port 전송명령어가 없다는 것 정도네요.

port to mem, mem to port 명령어 두개로 처리해야되지만, 어차피 주변장치(SPI, UART)가 느려서 딱히 손해는 없습니다요! ㅎ.ㅎ


WAU의 Serial BIOS는 ASCII MSX-SERIAL232 BIOS v1.0과 호환됩니다.

참고로 BIOS v1.0은 I/O Port를 사용하구요. v2.0은 Memory mapped I/O를 사용하니까 시리얼 카트리지를 여러개 꽂을 수 있어요.


오리지널 BIOS의 Baudrate는 19200 이하에서 설정하도록 되어있는데요.

WAU는 921600bps로 고정되어 있습니다.

프로토콜도 START 1bit + DATA 8bits + NO PARITY(0bit) + STOP 1bit 으로 고정되어있어요 ㅎ.ㅎ

참고로, COMINI 등의 초기화 명령으로 파라미터를 바꾸더라도 무시됩니다~~ 유후~~


PC와 MSX를 연결 시, 921600bps 및 H/W Flow control (RTS/CTS)을 사용해야합니다.

아래는 제가 주로쓰는 테라텀의 포트 설정입니다.




그럼, 테라텀으로 간단한 BASIC 로딩을 해보아요~

MSX쪽에서는 LOAD"COM:" 명령으로 로딩을 해줍니다.

참고로 COM:은 시리얼 디바이스 이름이구요. 여러개 있을 때에는 COM1, COM2 이런식으로 할당됩니다.

WAU는 멀티 카트리지를 지원하지 않으니까, 그냥 COM만 쓰시면 되겠어요!



PC쪽 터미널에서는 원하는 파일(TUTOR_F.BAS)을 바이너리 전송모드로 전달합니다.

테라텀에서는 파일을 드래그 & 드랍해주면 아래처럼 전송 메뉴가 뜹니다.



전송이 완료되면, LIST 명령으로 소스를 확인해보아요.



실행해보니 아래처럼 잘 나오네요 ㅎ.ㅎ



그 외 COM 디바이스의 OPEN, READ, WRITE 루틴으로 BASIC 프로그램에서 활용할 수도 있겠습니다.

(쓰실 분은 거의 없겠지만요... 저도 물론이구요ㅋㅋ)



Serial BIOS에는 간이 터미널도 내장되어있습니다.

BASIC에서 CALL COMTERM 명령으로 실행합니다.


아래는 윈도의 터미널에서 'Hello MSX!'를 입력하고,

MSX의 COMTERM에서 'Hello Windows!'를 입력한 모습입니다.



여담이지만, COMTERM 프로그램은 KANJI 스크린 및 폰트팩의 한글 ANSI 스크린에서는 오동작합니다.

이게 초기 MSX1 시절에 나온 구닥다리 프로그램이라서 그런지, 호환성이 안좋은 것 같더라구요.

음, 그러니까 COMTERM으로 한글 채팅이라도 해보실 분들은 미리 포기하시는 편이... ㅎ.ㅎ;


제가 언젠가는 한글 터미널을 만들게(?) 되겠지만,

아직까지는 쓸 곳이 없어서 개발 우선순위에서는 한참 밑에 뒀습니다. 흐흐...



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


WAU 제작 #9 - USB-UART

구닥다리 PC에서 가장 유명한 시리얼 인터페이스라면? RS-232C가 먼저 생각나는데요.

이젠 MSX에서 RS-232C를 활용할 주변기기도 별로 없군요.

생각해보니, 최근 십여년은 윈도 PC와 파일을 주고 받는 용도로만 쓴 것 같네요 ㅎ.ㅎ


아래는 예전에 자작해서 쓰던 RS-232C 카트리지입니다.



WAU에서는 RS-232C 대신 USB-UART를 쓰는 것으로 정했습니다.

PC와 MSX를 연결하는 용도로만 쓸 수 있겠습니다!

USB-C 타입이니 참고하시구요.

(근데 그거 아시나요? 이미 USB가 나온지 30년 됐다는 사실ㅋ)


WAU 카트리지 오른쪽에 USB 포트가 있습니다.




UART Baudrate는 115k, 230k, 460k, 921k로 사용가능합니다.

기본설정은 921kbps이구요.


참고로 보드의 CPLD에는 UART와 SPI 컨트롤러가 들어있습니다.

UART는 Wi-Fi 모듈 및 USB-UART 모듈과 연결이 되구요.

SPI는 MP3 모듈과 직결되어있습니다.


UART 컨트롤러에는 패스쓰루(passthrough) 기능이 있습니다.

통상적으로는 Wi-Fi 모듈과 MSX가 연결되고, USB-UART 모듈도 MSX랑 연결되지만...

Wi-Fi 모듈과 USB-UART를 연결해서 PC에서 Wi-Fi 모듈을 컨트롤 할 수도 있구요.

Wi-Fi 모듈과 MSX가 연결 중일 때, Wi-Fi의 출력을 USB-UART로 빼서 모니터링도 가능합니다.

흐~~ 사실 이건 디버깅 목적이에요 ㅎ.ㅎ



그럼, 다시 MSX와 USB-UART 연결의 주용도로 넘어옵니다.

이렇게 연결이 되겠죠?

MSX <-> WAU (USB-UART) <-> PC


UART 921kbps 속도라면 90KB/s 정도의 전송이 가능하니까, PC의 자원을 끌어다쓰는 용도로 써도 괜찮습니다.

근데 이미 Wi-Fi도 있는데, 굳이 USB 케이블 연결해서 쓰실 분이 얼마나될까 싶긴 합니다만,

아무래도 UART를 쓰는 프로그램(PC 및 MSX)을 만드는 게 더 쉽겠죠.

(심심하실 때 SW개발도 해보세요. 잼납니다요~)


일단은 이미 만들어진 파일 전송 기능을 봅시다.

제 경우는,

- 윈도에서 MSX 프로그램을 개발 후 MSX로 전송

- BAT, ROM파일 등의 사이즈 작은 파일들을 MSX로 전송

시 사용합니다.


전송용 툴은 윈도용 콘솔 프로그램이구요. 이름은 MSX_FX입니다.

저는 윈도의 '보내기(SendTo)' 메뉴에 등록해서 쓰고 있습니다. 이게 젤 편하죠.


아래는 윈도에서 M 파일매니저의 파일들을 MSX로 보내는 모습입니다.




MSX에서는 WAU /RX 명령으로 아래처럼 주르륵~ 파일들을 받을 수 있습니다.



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


2025년 1월 6일 월요일

소스없이 네오지오로 포팅된 시노비

사에바료님의 엑스에서 봤는데, 재밌는 프로젝트 같아서 소개해보아요~ ㅎ.ㅎ


아케이드용 시노비 게임은 세가의 시스템16 기판으로 구동됩니다.

이걸 비슷한 H/W 사양인 네오지오로 포팅한 것인데요.


두 시스템을 비교해보면...

시스템16 -> CPU(68K 10MHz + Z80 4MHz) + 비디오(320 x 224) + 오디오(YM2151 + ADPCM)

네오지오 -> CPU(68K 12MHz + Z80 4MHz) + 비디오(320 x 224) + 오디오(YM2610)

으로 구성됩니다.


참고로 YM2610은 ADPCM-A 6채널 + ADPCM-B 1채널 출력이 들어있어요.

시스템16의 ADPCM은 3채널입니다.


스펙만 보면, 네오지오쪽이 약간 고성능으로 볼 수 있겠습니다.


그.래.서.


시노비의 코드를 디스어셈해서 비디오/오디오를 네오지오로 구현한 프로젝트가 만들어졌네요.

아래는 제작자의 홈페이지입니다.

https://h0ffman.itch.io/shinobi-neogeo


원문을 조금 긁어보면 이렇습니다.


This port was made by disassembling the arcade back into source code which ensure all gameplay logic is exactly like the original game.


Features

- Compatible with all NeoGeo systems - MVS/AES/CD

- Arcade dip switch settings ported to software dips

- Additional setting to allow continue on Mission 5 ( for that 1CC training )

- Additional cheats setting



실제 동작 모습은 아래 영상으로 구경하셔요~


이 프로젝트를 보면서 좀 흥분했던 이유가...

제가 2년전에 Ponpoko Remake를 만들었던 게 떠올랐기 때문이에요!

https://sharksym.blogspot.com/2023/09/ponpoko-remake-2.html


아케이드 너구리는 CPU가 Z80 3MHz인데 MSX는 3.58MHz죠.

MSX의 약간 넘치는 CPU 파워로 MSX의 비디오, 오디오를 구현해서 돌렸던 거랑 꽤 비슷합니다.

물론 시노비쪽이 그래픽, 사운드 처리하려면 훨 힘들었겠지만요 ㅎ.ㅎ


간만에 재밌는 프로젝트를 보게되서 즐거웠습니다요.


그럼, 이만...