2020년 12월 10일 목요일

M File Manager - %f를 써보아요

%f는 확장자 또는 펑션키 입력메뉴의 커맨드 문자열에서 사용되는 특수문자입니다.

M에서 현재 커서가 위치한 아이템(파일 또는 디렉토리)의 이름으로 치환되는 명령은 두가지 있습니다.

%s와 %f요~


만약 커서가 AUTOEXEC.BAT 파일에 위치한 상태라면,

%s는 AUTOEXEC.BAT 전체 파일명으로 치환되구요.

%f는 확장자를 제외한 AUTOEXEC으로 치환됩니다.


근데 %f를 쓸만한 경우가 잘 없을꺼에요.

요걸 아래처럼 한번 사용해봅시다요~


MMC/SD V3 또는 V4에서 YS2 HDD 이미지파일을 구동할 때, MMCSD.COM에서 /HD 옵션을 씁니다.

이 옵션을 M.INI의 DSK 확장자에 등록하지 않고, 별도의 HDD 확장자에 등록해서 실행해봅니다.

아래 사진처럼이요.






만약 YS2MMCSD.HDD 파일을 선택 후 실행하면,

M은 "MMCSD YS2MMCSD.DSK /HD"으로 실행하겠죠?



이렇게 YS2MMCSD.DSK를 간접실행(?)하려면 HDD 파일이 필요하겠네요.

그냥 이름만 YS2MMCSD.HDD가 되도록 파일을 하나 생성하면 됩니다.


아래처럼, 도스 프롬프트에서 COPY CON YS2MMCSD.HDD 명령으로 만들 수도 있어요.





꼼수지만... 이렇게 쓰는 방법이 있다는 것도 기억하시면 좋겠습니다 ㅎ.ㅎ


그럼, 이만~


2020년 11월 29일 일요일

SLT-Turbo 제작 #5 - I/O 프로세서 개선

V4 납땜하다가... 다시 SLT-Turbo로 달려봅니다요~

이번엔 데모 영상을 위해 X-II에 기기를 연결했습니다.




I/O 프로세서는 호스트의 CPU가 담당하지만, 실제 코드는 SLT-Turbo의 BUS Arbiter가 생성합니다.

예전에 이게 DMA 컨트롤러의 마이크로 코드 작업과 비슷하다...라고 설명했는데요.

코드가 동적으로 변경되는거라서 좀 차이는 있겠습니다요~ (사실 일반 DMAC는 구조가 간단합니다)


초기 버전과 현재 버전의 동작차이를 요약하면 이렇습니다.


@ 초기 버전

  모든 코드는 호스트 메모리에서 구동

  호스트 CPU가 SLT-Turbo의 BUS 상태를 체크하고 필요한 루틴을 실행


@ 현재 버전

  모든 코드는 SLT-Turbo 슬롯에서 구동

  BUS Arbiter가 필요한 코드를 생성함



호스트 CPU의 코드 공간(주소)는 Page 0 (0000H ~ 3FFFH) 입니다.

어차피 인터럽트 처리 때문에 Page 0을 쓰는게 공간을 적게 차지하겠습니요.

참고로 Page 1,2는 SLT-Turbo의 가상 슬롯 매핑에 쓰입니다. (자세한건 나중에 설명을~ㅋ)

Page 3는 호스트의 메모리 그대로 유지합니다. DATA, Stack 용으로 계속 쓰이는거죠.



이번에 데모로 찍은 영상은 X-II 순정에 V9958 교체 후 XII-V만 내장된 상태입니다.

그러니까 MSX-MUSIC이 없는걸로 보시면 맞습니다.


지난번 A1WSX로 데모했을 때에는 OPLL 칩이 본체에 내장되어있어서,

I/O 프로세서가 처리한 사운드 결과만 확인이 가능했는데요.

이번엔 XII-V(LED 비주얼라이저)가 호스트에 있고, OPLL은 SLT-Turbo에 있습니다.

그러니까, LED와 사운드가 동시에 동작하는걸 확인할 수 있다는 얘기입니다.



그럼 영상으로 확인해보시죠~ ㅎ.ㅎ

X-II의 전면 슬롯에는 MMC/SD V4가 있고,

후면 슬롯에는 50핀 케이블로 SLT-Turbo가 직결되어있습니다. (케이블은 27cm 정도 되네요)



아래는 영상 설명입니다.


00:00 Host MSX, Booting

-> 호스트 본체가 부팅됩니다.


00:35 SLT-Turbo, Illusion City

-> GT 모드로 구동 후 환영도시를 실행합니다.


03:30 SLT-Turbo, Fray

-> GT 모드로 구동 후 프레이(터보알 버전)을 실행합니다.


05:55 SLT-Turbo, Video Play

-> GT 모드로 구동 후 MV 영상 재생합니다.

원본 영상 속도와 거의 동일한걸 볼 수 있어요.



MV 재생 시, 음성이 약간 빨라졌다 느려지는 현상이 나오는데요.

이건 기기특성은 아니고, MMC/SD의 MV 플레이루틴이 기기를 진짜 A1GT로 착각해서 발생하는 현상입니다.

WSX, GT에서 쓰인 T9769는 VDP IO처리시 1클럭 wait가 더 추가됩니다.

이 때문에 일반 MSX2보다 조금 느리게 동작합니다.


MV 재생처럼 VDP를 과도하게 쓰는 경우는 이 차이를 사람이 느낄 수 있는 정도가 되거든요.

MMC/SD의 MV 플레이어는 1클럭 wait가 없는 기종에서는 속도 보상을 하도록 구현되어있습니다.

그래서 MSX2, MSX2+, turboR 모두 영상재생 속도가 동일하도록 처리됩니다.

.

.

.

사실 모든 기종을 다 커버하지는 못합니다 ㅎ.ㅎㅋ

MSX-ENGINE이 좀 다른 MSX2/2+ 기종이 있는걸로 알고 있어요.

지금 영상의 MSX2 본체에서 VDP를 V9958로 개조하고 SLT-Turbo를 구동하면,

현재의 MMC/SD의 MV 플레이어는 본체를 GT로 인식하게 됩니다. 이 경우도 커버가 안되는거죠.

이건 나중에 MMC/SD BIOS 업뎃할 때 지원하도록 하겠습니다.



그럼, 다음편에서 보아요~ ㅎ.ㅎ


궁금한 점 있으시면 댓글로 ㄱㄱㄱ


2020년 11월 1일 일요일

SLT-Turbo 제작 #4 - turboR 흉내내기

지난 글에서는 그냥 빠른 Z80에 대한 내용이었습니다.

그럼, 이번에는 터보알과 비슷하게 동작하도록 해봅시다요.

일단 사진 한장 올려놓고 시작을~ㅋ





[서론]

 

터보알은 동작 모드가 두개입니다. 다 아시는 그... Z80 일반 모드와 R800 고속모드욤 ㅎ.ㅎ


일반 모드에서는 MSX-ENGINE(T9769C)을 메인 칩으로 구동합니다.

기존 A1WSX 등의 MSX2+ 기종과 H/W적으로 똑같이 동작하니까, S/W 또는 H/W 호환이 100% 되는거겠죠?

R800 고속모드는 외부 슬롯은 3.58MHz의 기존 BUS를 유지한 상태로, 본체 내부만 고속으로 동작합니다.

외부 BUS가 고속으로 동작하면, 기존 H/W(외부 주변기기)들의 동작 보증이 안되니 어쩔 수 없는 선택이었겠죠.


그럼 외부 슬롯만 고려하면 될까요?

아니겠죠? 기존 3.58MHz 속도에 맞춘 S/W를 그냥 빠르게 돌리면 내장기기들도 엉망이 됩니다.


근데 SLT-Turbo를 만드는데 터보알 얘기를 자꾸 하는지 궁금하실 분들도 있겠네요.

만약 그냥 제 마음대로 만들게 되면, SLT-Turbo가 기존 ST/GT보다 활용도가 낮을 확률이 높습니다.

최소한 기존 터보알의 고속모드와 호환되는 동작모드가 있어야, 기존 고속모드 만큼의 효용은 생길 것 같아요.

물론 GT 클론을 만들겠다는 의미 보다는 S/W, H/W 호환기기에 의미를 두시면 되겠구요.


SLT-Turbo에 SLT-X를 합체(?)시킨 결과물도 결국 이 활용도 때문에... 이렇게 되었습니다요.

두 기기를 분리해서 만들면, 함께 사용하실 분들이 별로 없을 것 같아서요ㅋ



[본론]


제가 GT를 18년쯤 썼으니, 뭐 이정도면 대충 느낌 아니까...

적당히(?) 이것저것 넣으면 되지않을까 싶으네요 ㅎ.ㅎㅋ


지원되어야 할 필수 기능들을 적어봅시다~

- CPU 동작 모드 전환 (Z80 3.58MHz 일반모드, Z80 20MHz 고속모드)

- R800 명령어 지원 (8BIT/16BIT 곱셈)

- 고속모드에서 외부 슬롯 액세스 타이밍

- 고속모드에서 내장 기기 액세스 타이밍 (VDP, PSG, 키보드 등)

- 16BIT H/W Timer

- 8BIT PCM 출력, PCM Timer (15.7KHz)

- 메모리 매퍼 (512KB GT 모드, 4096KB Full 모드)


참고로, SLT-Turbo가 구동가능한 최소 사양은 MSX2 램64KB입니다.

만약 MSX2+ 기종을 쓰거나, MSX2의 VDP를 V9958로 개조하셨다면...

SLT-Turbo만 장착하면 본체를 터보알 수준으로 쓸 수 있게됩니다.


현재까지, R800 명령어를 제외하고 나머지는 모두 구현이 되었습니다.

최적화 이슈는 좀 남아있지만요 ㅎ.ㅎ


사실은 지난번 글 이후에 Z280 글을 올릴려고 계획했는데, 이게 성능 문제가 있어서 ㅎ.ㅎ;

R800 고속모드를 전체에 적용하기는 무리더라구요.

이것 저것 테스트를 많이 해봤는데 결국 내린 결론은...

'Z80 20MHz를 고속모드 기본으로 사용하고 Z280은 코프로세서로 사용'입니다.

이쪽은 다른 글로 올릴테니, R800 명령은 일단 스킵합니다요~



Z80 20MHz로 구현해서 테스트를 해보니, 요게 터보알 고속모드와 성능이 비슷하더라구요.

실기의 느낌적인 느낌으로는, 터보알이 기존 MSX에 비해 4~5배 정도의 체감성능이 나오는데요.

SLT-Turbo의 고속모드가 딱 비슷한 느낌입니다. ㅎ.ㅎ


말로 설명하는 것보다는 영상을 보시는게 빠르겠죠?

오랜만에 A1WSX를 꺼냈습니다. 참고로 요놈은 MSX2+ 기종입니다.

내장 메모리는 512KB로 증설되어있습니다.

이 정도로도 충분히 쓸만한 기종이지만, 터보알에 한번 맛들이면... 그냥 창고행~ ㅎ.ㅎ


SLOT 1에는 SLT-Turbo가, SLOT 2에는 MMC/SD V4가 장착되어있습니다.


SLT-Turbo는 A1ST의 수준의 BIOS 롬으로 구동이 됩니다.

내부 SLOT 3-0에는 메모리매퍼가 4096KB 풀로 채워져있구요.

외부 SLOT 1은 MMC/SD V4

외부 SLOT 2-1은 폰트팩, SLOT 2-3은 문사운드가 있습니다.


영상에서는 아래 순서로 나옵니다.

내부외부의 각종 기기들의 동작 모습을 볼 수 있습니다.

영상의 ASO 리메이크는 처음 릴리스했던 파일을 사용했습니다. (R800 곱셈 명령을 쓰지않는 버전)

이후 업뎃된 버전은 R800 명령을 쓰고 있어서, 현재의 SLT-Turbo에서는 실행되지 않습니다.


00:00 본체 부팅

00:37 SLT-Turbo turbo R mode @ 20MHz으로 기동

01:24 SLT-Turbo 일반모드의 속도측정

02:08 SLT-Turbo 고속모드의 속도측정

02:31 SLT-Turbo 칸지 스크린 테스트

02:47 SLT-Turbo 한글 폰트팩 테스트

03:25 SLT-Turbo 메가리포트

04:09 SLT-Turbo IMS 플레이

05:22 SLT-Turbo 프레이 터보알 버전

07:02 본체 리부팅

08:04 SLT-Turbo ASO 리메이크


아래는 유투브에 올린 영상입니다.

위의 설명과 함께 보시면 되겠습니다요~ ㅎ.ㅎ





그럼, 다음편에서 보아요~ ㅎ.ㅎ


궁금한 점 있으시면 댓글로 ㄱㄱㄱ