2020년 12월 26일 토요일

SLT-Turbo 제작 #7 - 코프로세서 모드

[서론]


처음 SLT-Turbo 설계할 때는 기존 turboR과 같은 CPU전환 방식이었습니다.

Z80 10MHz과 Z280 12.5MHz을 넣었었죠.

당연히 Z280 12.5MHz가 R800의 역할을 합니다.


turboR 고속모드에서 프로그램을 돌려보면 대략 Z80 노말모드에 비해 5배정도의 속도가 나오는데요.

만약 Z280 성능이 Z80의 1.5배 정도만 나와준다면, R800이랑 비슷한 속도가 나오지않을까...

대충 그렇게 생각했던거죠~ ㅎ.ㅎ

12.5MHz x 1.5배 성능이라면 Z80 18.75MHz 정도와 동급일테니까요.

그럼 18.75MHz / 3.58MHz = 5.24 이런 계산이면, Z80 노말모드의 5배 성능으로 추측해볼 수 있습니다.

이 때부터 희망회로가 불타기 시작ㅋㅋ


외부 OSC는 50MHz 정도를 사용합니다.

Z80은 본체의 3.58MHz와 OSC의 5분주 10MHz 사용하구요.

Z280은 OSC의 2분주 25MHz를 칩에 입력해서, CPU 코어는 절반의 12.5MHz로 돌아가게됩니다.


그리고 Z80은 3.58MHz 대신 10MHz 버전으로 넣은 이유는...

Z280을 메인으로 구동하는 동안 Z80을 서브 CPU로 활용하면 어떨까? 하는 마음이었습니다.


S/W를 만들 때, 주기적으로 동작하는 기능(예: BGM 처리)을 전담하는 서브 CPU가 있으면 좋을 듯 해서요.

메인 CPU가 바라보는 슬롯 맵과 서브 CPU가 보는 슬롯 맵을 다르게 할 수 있으면,

프로그래밍을 다양한 방법으로 할 수 있겠죠? 프로그래밍 재미도 늘어난다면 금상첨화~ㅋ

.

.

.

근데 첫 보드를 제작하고 CPU 성능 테스트를 해보니...ㅋ

Z280의 성능이 동클럭의 Z80에도 밀리는 상황이 나오더라구요. 캐시 OFF에 8비트 호환 BUS ㅠ.ㅠ

고민 끝에 Z80을 20MHz 버전으로 바꾸고, Z280을 서브 CPU로 만드는 방법을 생각하게 됩니다.

결국 turboR 스타일의 두 CPU 전환과는 다른 방식이 된거죠.



[본론]


그럼, SLT-Turbo에서는 CPU를 어떤식으로 써야할까요?


기본적으로 SLT-Turbo는 MSX turboR BIOS의 코드를 100% 그대로 사용가능합니다.

S1990의 시스템 컨트롤 레지스터(E4h ~ E7h)가 그대로 호환되기 때문에,

BIOS 루틴을 쓰지않고 레지스터를 직접 컨트롤해도 동작합니다.


성능을 보면,

일단 SLT-Turbo의 OSC는 60MHz를 사용합니다.

노말모드는 Z80 3.58MHz로 똑같이 구동이 되구요.

고속모드는 Z80 20MHz로 구동(OSC 3분주 클럭)합니다. 성능은 turboR의 R800 DRAM모드와 비슷해 보입니다.

Z280은 20MHz가 칩에 공급되고, CPU 코어는 10MHz로 동작합니다.


고속모드에서 R800의 전용 명령어의 처리만 제외하면, 기본적인 노말/고속모드는 turboR과 거의 같습니다.


R800 전용 명령을 처리하기 위해서는 기존 turboR과 다른 방식의 구현이 필요한데요.

Z280을 코프로세서 구조로 구동하는 방식을 사용합니다.


메인 CPU(Z80 20MHz)가 동작 중 해당 명령을 만나면...

1. Z80의 처리를 멈춤

2. 레지스터 데이터를 Z280으로 전달

3. Z280으로 명령 처리 후 결과값(레지스터)를 Z80으로 전달

4. Z80에서는 다음 명령부터 진행

이렇게 되는 것이죠.



참고로 R800은 곱셈 명령어 두개가 추가되어, 8비트 및 16비트 연산이 가능합니다.





두 명령어는 Z280에도 그대로 지원됩니다. 코드도 똑같이 할당되어있어요.

아래는 Z280에 추가된 2바이트 및 3바이트 명령어 모음입니다.




2바이트 명령어의 ED C0 ~ ED FF 영역이 많이 사용되는 곱셈, 나눗셈, 비교 명령어가 들어있어요.

참고로 이 명령어들은 Z80에서는 없는 명령어라서 그냥 00 00 으로 처리됩니다.

NOP x 2개로 시간만 때우는것이죠.


이 때 SLT-Turbo의 BUS 아비터는,

Z80에서 코드 실행 중 해당 범위의 명령어가 디텍션되면,

CPU 전환과 관련된 일련의 작업들을 처리하게 됩니다.

Z280은 멈춰서 대기하다가 요청이 들어올 때만 동작하게 되구요.


현재는 2바이트 명령어만 구현되어있습니다.

3바이트 명령어는 Z80에서 안전하게 skip 될 수 있을지 확인 후 구현예정입니다.

(귀찮으면 지원안하게 될지도요ㅋ)



아래는 8비트 곱셈, 나눗셈 명령어 두개를 테스트하는 프로그램입니다.

ST나 GT 갖고 계시면 한번 실행해보세요. ㅎ.ㅎ

Download: CPUTEST.ZIP



SLT-Turbo의 고속모드에서 실행하면 아래처럼 결과가 나옵니다.

turboR에서는 곱셈만 성공합니다만, SLT-Turbo의 Z280은 나눗셈도 처리가 됩니다요~ ㅎ.ㅎ






그럼, R800 곱셈 명령을 쓰는 실전(?) 프로그램을 돌려보아요~

제가 만든 ASO 리메이크는 turboR 전용 프로그램인데요.

처음 업로드했던 파일은 Z80 명령만 쓰는 버전입니다. 에뮬에서 쉽게 테스트하기 위함이었구요.

그 후 조이메가 지원을 넣으면서 R800 명령어를 쓰는 버전으로 교체한 파일을 업로드했습니다.


아래 영상에서는 CPUTEST.COM 프로그램을 실행 후 ASO R800 버전을 실행하는 모습이 나옵니다.

호스트 MSX는 MSX2+ 기종인 A1WSX를 사용했습니다.



00:00 Host MSX, Booting

00:32 SLT-Turbo, Booting as turboR mode

00:55 SLT-Turbo, Coprocessor mode

01:13 SLT-Turbo, Instructions executed by Z280

01:31 SLT-Turbo, ASO remake with MULT instruction



[결론]


한줄로 요약하면,

'turboR의 R800 고속모드와 유사한 성능을 제공하는 Z80 + Z280 코프로세서 모드를 구현'

으로 되겠습니다.



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


2020년 12월 20일 일요일

SLT-Turbo 제작 #6 - Z280의 운명은?

[서론]


MSX의 메인 CPU는 Z80 3.58MHz입니다. MSX1,2,2+,turboR 모두 기본은 똑같습니다.


마지막 기종인 turboR은 CPU가 두개가 들어있어서, 동작모드도 두가지로 분리됩니다.

외부 카트리지의 S/W를 구동하는 경우는, Z80 3.58MHz의 노말모드로 동작합니다.

MSX-DOS2 또는 DiskBASIC으로 부팅하면 R800 7.16MHz CPU를 사용하는 고속모드로 동작합니다.


물론 경우에 따라 특수한 동작모드(듀얼 CPU 및 고속 클럭)를 사용하는 기종도 있었고,

사용자가 고클럭으로 CPU를 개조하는 경우도 종종 있었습니다.

유럽에서는 7MHz 터보킷이 유행했던 것 같더군요. 아마 MSX2를 주로 쓰다보니 그런게 아닐까싶기도...


그리고, 본체와는 별개로 동작하는 외부 가속기 형태의 기기도 있었습니다.

저는 써보지 못했지만, Leonardo Padial 씨가 제작한 Z380 보드가 제일 먼저 떠오르네요.


Z80 3.58MHz 사용하는 표준 모드가 아닌 경우는 아래 두가지로 정리됩니다.


1. 메인 CPU의 클럭을 올리거나 고속 CPU로 전환 후 구동

2. 외부 CPU를 사용하여 빠른 S/W를 활용


1번은 메인 CPU의 동작모드가 바뀌는거니, 어느정도 기존 S/W의 호환성을 갖도록 설계가 가능합니다.

목적은 '기존 S/W의 고속화'과 'CPU 파워가 필요한 S/W 제작'이 되겠죠?


2번은 외부 CPU를 활용하는 전용 S/W 제작하려는 의도입니다.

단순 CPU 파워로는 어마어마한 이득을 볼 수 있겠지만...

전용 S/W가 없으면 무용지물이니, 기기가 많이 보급되기가 힘들다는 단점이 있습니다.

.

.

.

그럼, SLT-Turbo는 어느 방향을 보고 있을까요?

개발 초기 때에도 얘기했던 것 같지만... 다시 한번 적어보면요~ㅎ.ㅎ


목표는

- 일반 확장슬롯과 비슷한 형태의 기기처럼 보이도록(쓰이도록) 한다.

- 본체를 turboR과 비슷한 기기로 쓸 수 있도록 해준다.

입니다.


일단 터보 메인보드를 슬롯보드 아래에 숨겼습니다.

멀리서 보면 일반 확장슬롯과 구분이 안됩니다요~ 실제 동작도 확장슬롯과 비슷하죠.


근데 turboR 같은 고속모드를 만들기 위해서는 중요한 걸림돌(!)이 있는데요.

-> Z80/R800과 호환되는 동작 모드(H/W 타이밍 및 I/O 구조)를 갖는 CPU가 필요!!


근데 이게 해결책이 있을까요?

이제 turboR 나온지 30년이 지났는데요. 혹시 turboR 호환기종을 보신적 있으세요? (에뮬 말구요ㅋ)

사실 R800, S1990 칩을 못 구하니까 호환기종을 만들 수가 없습니다.


만약 '이런저런 칩들로 비슷하게 만들면 될 것 같은데, 왜 아무도 안만들었지?'라는 의문이 들면,

'그렇게 만들면 실패하는구나' <- 이게 떠올라야합니다.

좀 단정적으로 쓰긴 했지만, 대부분의 경우는 이게 맞아떨어집니다요~ ㅎ.ㅎ;


암튼 그렇게 30년이 흘렀습니다.

turboR 외에는 제대로 돌아가는 쓸만한 고속 기종은 나오지 못했어요.




[본론]


turboR과 똑같이 만드는건 힘드니, '비슷하게 돌아가는 쓸만한 놈을 만들어보자'에 집중합니다.


사실 오래전부터 생각했던 것은...

Z80 3.58MHz + eZ80 50MHz 듀얼 CPU를 사용하는 보드였습니다.

물론 본체의 CPU는 I/O 프로세서로 사용되구요.


천국동 오프모임에서는 단골메뉴로 나오는게 고속 MSX 제작인데요.

그럼, 기존 R800 S/W 호환이 필요할까?

CPU 성능이 높아지면, 활용하는 S/W가 많이 나올까? 이런 의문이 따라오게 마련입니다.

과연 내가 이걸 만들면 써보고싶은 사람이 과연 있을까? 흐... 애매합니다.


생각에 생각에... 결국 마음속으로만 남겨두다, 작년에 페북에서 Z280에 대한 글을 보게 되었습니다.

이 Z280을 넣은 CPU280이라는 이름의 보드 제작된 내용도 있었구요. (90년초 쯤인 듯 합니다.)


'어.. Z80, Z180, Z380 이렇게 나가는거 아니었던가? Z280은 처음 듣는데?'

이게 오래전 1987년 쯤에 나왔다가 90년대에 단종된 CPU인데요.

ebay에 가보니 중고품이 팔리고 있고~ PDF로 스캔된 매뉴얼도 구할 수 있었습니다요. 이게 뭐야?ㅋ


Z280 매뉴얼을 찾아보니 충격적인 내용이 나오네요.

- Z80 호환 16BIT CPU, 최고 12.5MHz 클럭

- 다수의 추가 명령어 내장 (R800 곱셈 명령도 포함됨)

- DATA BUS는 16BIT 또는 모드 8BIT 모드로 선택가능

- 256바이트의 캐시(I/D) 내장

- 24BIT memory 및 I/O address 사용 (헉!!)

- MMU, Refresh, DMA, CTC, UART 등을 내장


여기 가장 중요한 부분은

8BIT BUS모드로 설정하면 기존 Z80과 유사한 BUS 동작모드가 가능함

주변 회로를 복잡하게 만들지 않아도 기존 MSX의 Z80 버스에 물릴 수 있다는 얘깁니다.


물론 메모리 R/W가 opcode fetch와 별개로 동작하기 때문에 M1 사이클 신호는 없어요.

근데 이건 모든 Z80 후속 CPU의 숙명이니 어쩔 수 없겠습니다요~

(Z180는 M1 호환 모드가 있지만 I/O 문제로 예선 탈락 ㅎ.ㅎ;)


I/O 주소는 메모리와 동일한 24BIT인데, 상위 8BIT BANK + 하위 16BIT 주소로 구성됩니다.

여태 봐왔던 Z80 후속 CPU들은 내장 I/O들이 하위 8BIT 주소를 쓰고 있어서,

MSX I/O 주소와 정면으로 충돌했거든요.

Z280의 내장 주변기기는 FEh, FFh BANK에 할당되어 있습니다.

하위 BANK로 설정하면 내장 I/O와 겹치지않으니, 결국 메인 CPU로 쓸 수 있다는 얘기죠!

(오우~~ 왜 이 CPU를 이제서야 알았을까?)


R800의 곱셈명령(몇개 안되지만ㅋ)과 똑같은 명령이 포함된것도 아주~ 매력적입니다.

아마 R800과 Z280 사이에는 어떤 히스토리가 숨어있겠죠?

자일로그 CPU 중에서 R800 명령이 그대로 호환되는건 Z280뿐입니다.


캐시의 경우는 어차피 MSX의 슬롯, 메모리매퍼 때문에 못 쓰겠네요.

약간의 성능 하락이 예상됩니다.


DRAM Refresh 사이클은 Z80과 다르지만, R800 때에도 비호환이라서 별문제는 없겠습니다.

리프레쉬 얘기가 나왔으니 Z80, R800의 리프레쉬가 어떻게 다른지 한번 보실까요?


예전 paraMSX-R 개발 때, /RFSH 타이밍이 안맞아서 고속모드 지원은 포기했었는데요.

MMC/SD V4 보드로 로직 애널라이저 같은걸 만들어서, 신호를 캡쳐한적이 있습니다.


아래는 JP nn 명령과 OUT (n),A 명령 두개를 쓰는 경우의 신호를 잡은 모습이에요.


먼저 Z80입니다.

매뉴얼에 나오는 파형과 거의 똑같죠? M1 사이클에 RFSH가 연속해서 나오는 모습입니다.




R800입니다. /RFSH가 전혀 안움직이네요ㅋ

JP, OUT 명령만 있어서 Z80보다 적은 클럭으로 동작하는걸 볼 수 있습니다.




그렇다고 DRAM이 깨지는건 아니구요. 실제로는 리프레쉬 사이클이 랜덤한 위치에 나타납니다.

아래는 JP 명령 직전에 /RFSH가 움직인 모습을 잡은거에요.




이렇게 보면 R800에서 클럭을 더 많이 먹는 것처럼 보이지만,

일정한 주기로 리프레쉬 하니까 Z80보다는 R800으로 구동하는게 평균적으로 더 빠릅니다.


참고로, 캡쳐한 신호는 모두 A1GT의 슬롯1의 출력신호입니다. 모두 3.58MHz 타이밍이죠.

turboR에서 호환성을 위해 속도를 희생한 설계때문입니다.

.

.

.

Z280을 MSX 메인 CPU로 쓸 수 있다는 엄청난 희망을 안고 ebay로 달려갑니다!


일단 몇 개를 구해서 살아있는지 확인해보아요~

딱봐도 리마킹이라 좀 불안하네요. (2003년 생산이라니... 말도 안되는ㅋ)





어헛... 동작하는거 같아요! ㅎ.ㅎ





그럼 turboR의 Z80 3.58MHz + R800 7.16MHz와 유사한 Z80 3.58MHz + Z280 12.5MHz으로 구성해봅니다.

그렇게 만들어진 보드가 지난 10월초에 보여드린 사진이었지요.





흐흠.. 과연 ebay에서 온 Z280이 제대로 동작이 될까요?

Z280은 외부 BUS의 타이밍을 CPU와 1:1, 2:1, 4:1로 동작하도록 설정가능합니다.

CPU 클럭이 12.5MHz면 BUS 1:1로 하더라도, SRAM 55ns와 FlashROM 70ns를 돌리는데는 문제가 없어요.

물론 캐시는 모두(I/D) 끈 상태입니다.


12.5MHz로 돌아가는 Z280은 얼마나 빠를까요?

FOR 루프를 돌려봅시다!




어? 8BIT 모드에서는 메모리 R/W 속도가 절반으로 깎이니까, 성능하락은 어쩔 수 없지만...

이거 생각보다 많이 느리네요! @.@


참고로 아래는 Z80 12.5MHz로 구동한 모습입니다.

동클럭의 Z80이 훨씬 빠르네요ㅋㅋ




참고로 A1GT에서는 동일한 FOR 루프로 테스트하면 170정도가 나오구요.

Z80 20MHz로 돌리면 150정도가 됩니다. (자세한 내용은 지난 글을 보시면 되겠습니다요)



[결론]


'Z280을 8BIT BUS 모드로 구동하면 많이 느려짐'

'Z280의 캐시를 활용할 방법이 필요'


Z280을 고속모드로 사용하는건 성능이 아쉬우니 포기하고, Z80 20MHz를 고속모드를 쓰기로 합니다.

이전에 썼던 글들이 모두 Z80 20MHz 얘기만 나왔던게 이런 결과때문이었습니다. ㅎ.ㅎ


'어? SLT-Turbo는 turboR 호환이라고 하지않았나요? 그럼 R800 명령은 어떻게 되나요?'

네, 맞습니다. Z80으로는 turboR 전용 S/W를 구동하는게 불가능하죠.

.

.

그.래.서.

R800 전용 명령을 포함한 곱셈, 나눗셈 명령만 Z280으로 실행하는 방법으로 갔습니다.

Z280을 coprocessor의 형태로 동작하는 모습이 되었지요.


이 내용은 다음 글에서 이어집니다~ ㅎ.ㅎ/


그럼, 이만...


2020년 12월 11일 금요일

M File Manager - 내장 도움말을 바꿔보아요

M에서 #HELP 명령을 쓰면 내장 도움말이 화면에 표시됩니다.

아마 안해보신 분도 있으실거라 예상됩니다요~ ㅎ.ㅎ


단축키 설정을 안바꿨다면, F1 누르면 아래처럼 메뉴가 나올겁니다.

요기서 #HELP를 선택하시면 되겠어요.




도움말 자체는 M 프로그램 안에 내장된건 아니고, M.HLP 문서를 화면에 표시만 해줍니다.

44라인의 텍스트 문서를 두화면에 교대로 표시해주는거에요~


이미 M 사용법에 익숙하시다면, 이 파일을 본인이 원하는 방향(?)으로 편집해서 사용하셔도 됩니다.

MMCSD.COM에서 자주 쓰이는 기능을 도움말로 만들어보았습니다.


첨부된 텍스트 파일을 M.HLP로 이름을 바꿔서 쓰시면 되겠습니다요~ (기존 파일은 미리 백업을..)


아래처럼 M을 종료하지 않고 간단한 도움말을 볼 수 있습니다.

본인의 취향에 맞게 만들어 쓰시면 되겠죠? ㅎ.ㅎ





그럼, 이만~


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 리메이크


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

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





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


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


2020년 10월 16일 금요일

SLT-Turbo 제작 #3 - Z80 20MHz

터보 MSX를 만들 때 가장 중요한게 뭘까요?

속도? 물론 중요합니다만... 기존 S/W의 동작 호환성이 가장 중요하겠죠?


1.

Z80 매뉴얼에는 없는 비공식(hidden) 명령어를 쓰는 프로그램(일부 게임 등)이 제대로 동작되어야겠구요.


2.

I/O의 경우에도 Z80 3.58MHz 모드에서 기존 I/O와 똑같은 성능이 나와야 의미가 있습니다.

기존 MSX에 비해 느려도 안되고, 더 빨라도 안됩니다 ㅎ.ㅎ


3.

기존 터보 기종(ST/GT)의 호환성을 생각한다면, R800 명령어들도 제대로 지원이 되어야겠구요.

그게 안되면 turboR 딱지를 붙일 수가 없겠지요.


4.

기존 터보 기종보다 빠르게 동작하는 모드에서는 속도가 더 빨라도 문제는 없겠습니다.

S/W 개발하시는 분들이 잘~~ 알아서 만들어주시겠죠? (물론 당분간은 저혼자 원맨쇼를~ ㅎ.ㅎㅋ)




기존 S/W 호환성을 유지하고 3.58MHz 클럭에서 기존 Z80와 똑같은 성능을 내려면 어떻게 해야할까요?

가장 쉬운 방법은 Z80 칩을 사다가 붙이면 되겠습니다.

Zilog Z80 칩은 현재도 여전히 생산중인걸로 알고 있구요.

최대 동작 클럭은 20MHz까지 지원됩니다.


아래는 제가 작년에 엘레X츠에서 샀던 Z84C0020AEG 칩입니다.

십여년 전에 썼던 FEG 칩은 QFP 였는데, 이번 AEG 칩은 LQFP네요. 칩 높이가 절반입니다.

2018년 생산품이에요 ㅎ.ㅎ





20MHz 클럭은 주기가 50ns가 됩니다.

속도가 빨라지면 주변 장치(롬, 램)도 빠르게 동작할 수 있어야, 함께 빨라지겠죠?


그리고 3.58MHz MSX는 opcode fetch 시의 메모리 Read(M1 사이클)에 WAIT 1클럭을 넣어서 3클럭으로 동작합니다.

일반 메모리 R/W 사이클은 원래 3클럭이라서 변함이 없구요.

만약 M1 사이클에서 WAIT를 제거할 수 있으면 좀 더 빠른 시스템을 만들 수 있겠습니다.


Z80의 Memory R/W 사이클에서 /MREQ 구간은 2클럭으로 동작하지만,

Memory Write의 경우는 Write 펄스가 1클럭입니다.

이것 때문에 램을 사용할 때는 빠른 칩을 쓰거나, Write 시에만 WAIT를 추가하는 방법을 써야합니다.


일단 터보 보드에 장착할 SRAM을 좀 찾아봅시다요~ ㅎ.ㅎ

ALLIANCE 사의 SRAM은 요즘에도 생산이 되고 있어서 많이 쓰이는데요.

이번 SLT-Turbo에서는 8MB의 램을 쓰려고 합니다.

찾아보니 칩 하나가 나오네요 ---> AS6C6416-55TIN

액세스 타임이 55ns, R/W 사이클 타임도 55ns입니다. 20MHz 시스템의 2클럭이면 100ns니까 충분하네요.

그리고 중요한 Write 펄스 타임은 최소 45ns입니다. 1클럭에 처리가능하네요. ㅎ.ㅎb

SRAM은 이걸로 ㄱㄱ합니다요~


FlashROM은 M29W640 70ns 칩으로 쓰고 있는데요.

Memory read 사이클 2클럭, I/O read 사이클 2.5클럭이라 별 문제없을거라 생각합니다.

Write 펄스가 최소 35ns라서 괜찮을꺼 같은데...

잘 안되면 CPU 클럭을 낮추면 되니 대충 ㄱㄱ합니다~ ㅎ.ㅎㅋ



그럼 실제로 얼마나 빠른지 확인해봅시다!

현재 구현된 I/O 프로세서 로직이 느린편이니까 조금 고려하시고 봐주세요.

VDP I/O랑 인터럽트 처리가 꽤 느립니다ㅋ



아래는 20MHz로 구동한 모습입니다.

일반 MSX와 동일한 M1 사이클 3클럭 read로 되어있습니다. (WAIT 1클럭이욤ㅋ)




아래는 20MHz 속도는 같지만, M1 사이클의 WAIT를 제거한 상태입니다.

훨씬 빠릅니다.

사진에서는 "with M1 1clock wait"라고 되어있는데 'without'이라고 쓴다는게 실수였슴다 ㅋㅋ





참고로 아래는 제 GT의 R800 DRAM 모드에서 테스트한 모습이구요.

디스크롬이 동작중이라 약간 느리긴합니다. 참고하세요.





영상으로도 한번 찍어보았습니다.

뒷부분에 트윈비, 캐슬EX 구동 모습도 넣었어요. (CPU가 빨라지면 속도도 빨라지는 X같은 게임들ㅋ)





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


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


2020년 10월 12일 월요일

SLT-Turbo 제작 #2 - I/O 프로세서

설명에 앞서 일단 SLT-Turbo 겉모습부터 보시죠~ ㅎ.ㅎ


아래는 터보 보드입니다. 두장이 아니라 앞뒷면 사진이니 착오없으시기를...ㅋ

서브슬롯 보드와 합체 할 때 부품의 간섭이 생기지 않도록 머리를 많이 굴렸습니다.

보드 그리는데 한참 걸린 것 같아요 ㅠ.ㅠ





서브슬롯 보드를 합체한 모습입니다.

/SLTSL, /IORQ를 ON/OFF 할 수 있는 스위치가 있구요.

슬롯 SOUND 출력을 헤드폰 Left/Right로 나누어 출력할 수 있습니다.

본체의 SOUND IN으로 입력하거나 헤드폰 출력으로 따로 출력가능합니다. 물론 강제 모노도 가능하구요.

사용하려면 외부 DC 5V 어댑터가 필수입니다. 3A 정도면 힘이 남아돌겠죠?




처음부터 위아래 보드를 딱 붙이면 디버깅이 힘드니까, 분리할 수 있도록 핀헤더 소켓을 사용했습니다.






[본론]


대충 구경하셨나요? 그럼 I/O 프로세서 설명으로 넘어갑니다 ㅎ.ㅎ


SLT-Turbo는 MSX 본체가 아닌, 본체의 CPU를 고속으로 바꾸는 효과를 내는 'CPU 가속기'의 형태입니다.

메인 BIOS, 메모리 등의 고속으로 구동하는데 필요한 주변기기들은 모두 SLT-Turbo 보드에 내장됩니다.

근데 외부 기기는 본체 내부의 주변장치를 접근 할 수가 없죠.,

그래서, 본체에 내장된 CPU를 SLT-Turbo의 버스 아비터(Arbiter)와 결합해서 I/O 프로세서를 만듭니다.


"본체에 SLT-Turbo를 꽂고 동작하는 것" VS "본체를 고속 CPU로 개조 후 확장슬롯을 연결한 것"

사용자가 이 두가지 환경의 차이를 느끼지 못하도록 만드는 것이 I/O 프로세서의 역할인거죠.



구현방식은 여러가지가 있겠지만... 1차구현은 간단한 방식으로 시작해봅니다~


I/O가 처리되는 과정을 순서대로 적어보면 이렇게 됩니다.

1. 터보 보드의 CPU가 I/O 명령이 수행되면, 아비터가 CPU /WAIT를 유지하고 I/O 요청을 걸어놓습니다.

2. 본체의 CPU는 아비터에 걸린 I/O 요청이 있는지 폴링(Polling)하면서 대기합니다.

3. 본체의 CPU는 I/O 요청을 처리 하고 결과를 아비터로 돌려줍니다.

4. I/O가 완료되면 아비터는 BUS에 전달받은 데이터를 로딩하고 터보 보드의 CPU /WAIT를 해제합니다.


I/O 명령 시작부터 처리완료까지 시간이 꽤 걸릴거라고 예상가능하죠?

지금은 절뚝거리더라도 일단 달려야 되는 상황이니 이해해주세요.

뭔가 동작하는 상태를 만들어야 보드를 동작을 테스트할 수 있으니까요~ 흐흐...



그럼, 한번 달려봅시다~

터보 보드의 Z80 CPU에 3.58MHz 클럭을 연결하고 구동합니다.

SLT-Turbo쪽 슬롯 설정은 아래처럼 초간단 MSX2+ 모드로 해줍니다.

슬롯0 = MSX2+ BIOS

슬롯1 = SLT 서브슬롯

슬롯3 = RAM 64KB


그리고, I/O 프로세서는 아래의 장치들을 본체에서 대신 구동합니다.

PPI (A8H SLOT 제외), VDP, PSG, RTC



아래 영상을 보시면 어떻게 동작하는지 볼 수 있습니다.





영상에 대한 설명 나갑니다~


00:00 Host MSX, Booting

-> 기기를 연결하고 본체를 부팅합니다.


00:23 SLT-Turbo, Booting

-> 임시로 제작된 툴을 이용, SLT-Turbo를 MSX2+모드로 부팅합니다.


01:22 SLT-Turbo, PCM Play with Host Keyboard

-> SLT-Turbo쪽의 V4를 이용하여 44.1Hz PCM을 재생합니다.

PCM Player는 512bytes 재생할 때 마다 ESC 키를 체크합니다.

초당 86번의 PPI를 액세스합니다만, 부하가 작아서 귀로 느끼기는 힘드네요. 


03:07 SLT-Turbo, Video Play with Host VDP & Keyboard

-> SLT-Turbo쪽의 V4로 비디오를 재생합니다.

Video Player는 대부분의 시간을 VDP의 VRAM, 팔레트를 처리하는데 소진합니다.

I/O 프로세서의 처리시간이 얼마나 부담이 되는지 처절하게 느낄 수 있어요.

(사실 생각보다 빠른 듯해서 좀 놀랐습니다ㅋㅋ)


04:18 Host MSX, Re-booting

-> 본체를 재부팅합니다.


04:45 Host MSX, Video Play

-> 본체로 비디오를 재생해봅니다. 정상속도의 영상과 비교하기 위함입니다~



마지막으로 CPU 속도 테스트를 해봅니다.

FOR 루프를 구동하는 것이라 I/O 딜레이가 크게 부담되지않습니다.







[결론]


SLT-Turbo의 제작목표

-> 사용자가 외부에 CPU가 있다는걸 눈치채지 못하도록 자연스러운 고속 CPU 환경을 만드는 것


I/O 프로세서의 목표

-> 터보 보드의 I/O처리가 거의 딜레이없이 구동되도록 구현




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


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



2020년 10월 10일 토요일

SLT-Turbo 제작 #1 - 슬롯터보

[서론]


터보알이 등장한지 이제 30년이 된 것 같네요.

혹시 '이게 진짜 빠른 MSX가 맞나!?' 의심이 들었던 분 있으세요?

MSX를 주로 게이밍 용도로 쓰신다면, 터보알의 용도는 '환영도시 게임기'에 그치는게 맞겠죠? ㅎ.ㅎ


터보알은 고속의 R800 CPU와 내장기기, 그리고 3.58MHz 버스 타이밍이 공존하는 오묘한 MSX입니다.

제가 터보알을 처음 접한 건, ST/GT 실기가 아니라 NLMSX 에뮬레이터였는데요.

그 때는 빠른 MSX의 느낌보다는 '환영도시 게임기'에 가까웠습니다.

딱히 활용할 곳이 없었으니까요ㅋ


그렇게 몇해가 지나고 실제 GT를 구하게 되었습니다.

BASIC과 DOS2을 구동해보니...어? 이게 예상과는 좀 다르네요.

생각보다 너무 빠르더라구요.

이 때부터 MSX 실기를 계속(?) 써야겠다는 생각이 들었고, 이걸 어떻게 해야 쓸모있는 환경이 될까?

고민을 해봤습니다. 사실 정답은 정해져있습니다ㅋ


터보알의 외부 슬롯은 3.58MHz 타이밍이라서, 내장 메모리에서 프로그램이 동작해야만 고속으로 돌아갑니다.

제 개발 환경을 DOS2 기반으로 만들고, 메모리매퍼를 적극적으로 쓸 수 있는 툴을 만들기 시작했습니다.

HI-TECH C에 전용 툴을 섞는 식으로 만들었지요.


그렇게 차근차근 진행되어 처음 나온 프로그램이 HV 한글뷰어였습니다.

메모리 사용량과 인터레이스 스크린7을 보면 딱 느낌이 들죠? "이거 터보알 아니면 못 쓰겠네!"

그리고는 M 파일 매니저가 등장합니다. (본격적으로 터보알을 갈구는 프로그램이...)

MMC/SD V3,V4처럼 터보알 구조에서 빠르게 동작할 수 있는 기기도 만들게 되었구요.

아마 벤치마킹해보셨으면, 이게 3.58MHz 버스가 맞는지 의심이 갈 정도일겁니다ㅋ

.

.

.

그렇게 10년이 흘러 여기까지 왔습니다.

한때는 MSX 본체 메모리를 512KB로 늘려야한다고 얘기하면, DOL-A-I 취급당하던 시절도 있었는데...

이제는 많이 변했죠~ㅋ


하지만 여전히 문제는 있습니다... '고속 MSX를 어디에 써야하나?' 입니다.

활용할 방법이 없으면 고속 MSX도 필요가 없고, 고속 MSX 사용자가 적으니 활용할 H/W, S/W를 만들 이유도 없죠.

근데 '닭이 먼저냐 알이 먼저냐'라는 개발자의 고통을 20년동안 "떠들기"만 해서는 바뀌는게 아무것도 없습니다.

뭔가를 직접 만들고 보편화시키는 것 말고는 방법이 없...ㅋ


그.래.서.

이제 때가 된 것 같네요.

'고속 MSX를 활용할 수 있는 환경을 만들고 같이 활용해보자'로 가는겁니다요~ ㅎ.ㅎ


서론을 좀 주절주절 썼지만...

제가 나름 생각하는 '앞으로 가는 MSX 환경'에 공감하시는데 도움이 되고자 길게 적어봤습니다ㅋㅋ



[본론]


고속 MSX를 활용하려면? 뭐, 고속의 본체가 있어야겠죠? ㅎ.ㅎ;

ST, GT가 널려있다면 고민할 필요가 없는데 말이죠.

그래서 SLT-Turbo라는게 나오게되었습니다.


이름에서 대충 짐작하셨겠지만, 요놈은 SLT-X에 CPU 가속기가 합체된 기기입니다.

일반 MSX를 빠르게 구동하기 위한 가장 간단한 방법은 본체의 CPU를 고속으로 바꾸는건데요.

빨라진 만큼 외부 I/O에 WAIT를 넣는 식으로, 유럽에서는 MSX2 용 Z80 7MHz킷으로 쓰인 것으로 알고 있습니다.

그 외 스페인의 레오나르도 아자씨가 만든 Z380 카트리지도 있는데...

이건 I/O없는 단순한 코드를 빠르게 구동하는 것만 되는 듯 합니다.

저도 실사용하는걸 본적이 없어요. (사용자가 별로 없는 듯요)


SLT-Turbo는 MSX 표준 주변기기입니다.

기본슬롯에 꽂는 확장슬롯과 유사하게 생겼구요. 3.58MHz로 동작하는 일반 버스 타이밍으로 돌아갑니다.

BIOS를 포함 모든 코드는 SLT-Turbo의 터보 보드에서 구동이 됩니다.

본체에 내장된 키보드, VDP, PSG 등은 본체의 CPU가 처리를 대신하게 됩니다.


사실 MSX는 슬롯 구조를 쓰면서 얻는 장점이 매우 큽니다만...

Z80 상위 CPU의 Cache, MMU, DMA를 쓸 수 없는 단점을 갖고 있어요. (단점이라고 하긴 좀 그렇지만요ㅋ)

슬롯 외부의 CPU가 메인으로 구동하려면, 본체 내장 I/O는 본체의 CPU로 처리할 수 밖에 없는 구조입니다.


.

.

.

아마 이쯤에서 궁금한 부분이 하나 있으실 것 같은데...

'기존 MSX의 주변기기가 아닌 본체를 만드는게 더 좋지 않나요?'

사실 파라동 오프모임에서 단골 메뉴로 등장하는 얘기죠.


MSX2+, turboR 기종들이 나온지 30년 넘었는데, 이걸 제대로 활용하는 S/W, H/W도 잘 없어요.

근데 새로운 MSX가 나온다고해서 뭔가 달라질까 싶습니다.

혹시 뭔가 새로운걸 해보고 싶다면...

openMSX 소스에 가상의 주변기기를 추가하고 프로그램도 만들어서 돌려보시면 되겠습니다.


저의 희망사항은

'여러분들의 창고에 처박아둔 실기들이 책상위로 올라와서 전기를 먹는 모습'

정도로 많이(?) 소박합니다 ㅎ.ㅎ



프로젝트 소개는 요렇게 마무리합니다.

SLT-Turbo는 SLT-X에 터보가 추가된거라고 설명드렸는데요. 아래 PCB 사진을 보시면 납득이 되실겁니다요~

보드는 2층으로 합체합니다. PAC-V 구조를 생각하시면 비슷해요.





합체해서 케이스에 넣으면 이런모양입니다. 케이스는 오버리치 카트리지 1개가 필요합니다ㅋㅋ





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


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


2020년 8월 22일 토요일

paraMSX-R에서 산요 PHC-70FD 데모 디스크 구동

오랜만의 paraMSX-R 사용기입니다~


FDD가 내장된 MSX 본체를 구매하면, 대게 MSX-DOS 및 각종 유틸리티, 데모 등이 포함된 디스켓이 들어있습니다.

번들 프로그램 중에는 해당 기종에서만 실행이 가능한 것들도 있는데요.

Sanyo PHC-70FD 데모 디스크의 경우가 그렇습니다.


아래는 저의 GT에서 실행한 모습입니다.

PHC-70FD의 데모 소프트라고 나오네요. (일알못이라 나머지는 pass)




그럼, paraMSX-R 카트리지의 PHC-70FD 머신에뮬로 구동하면 어떨까요?

2DD 디스켓으로 느린 로딩을 감상해도 되겠지만, 귀찮으니 그냥 V4의 DSK 에뮬을 씁시다~ ㅎ.ㅎ


데모디스크는 자료실에 DSK 이미지파일이 있으니, 그걸 그대로 쓰면 되겠네요.

파일명은 PHC70FD.DSK입니다.



먼저 약간의 준비과정이 필요한데요.

예전 2DD로 구동되는 대부분의 프로그램들이 드라이브 A:로 부팅해서 자동실행되는 구조로 되어있습니다.

FDD가 비싼시절이었으니, 드라이브가 여러개인 환경을 고려할 필요가 없긴 했네요...


그럼 데모 디스크는 V4의 DSK에뮬로 구동하면 되는데,

paraMSX-R의 런처 프로그램(PARAMSX.COM)은 어떻게 실행하면 될까요?


MMC/SD는 여러장의 DSK 이미지를 에뮬할 수 있습니다.

그러니까 PARAMSX.COM를 실행하기 위한 DSK이미지와 데모 디스크 용 DSK를 함께 로딩하면 되겠네요.

DSK파일이 두개뿐이니 둘 중 하나를 USR 디스크(유저디스크)로 설정하거나,

그냥 DSK파일을 합쳐서 하나로 만들면 되겠습니다.


이번에는 DSK파일을 하나로 합쳐서 실행했어요.

윈도의 프롬프트에서 아래처럼 COPY 명령을 쓰면 파일을 하나로 만들 수 있습니다.

COPY /B PARAMSXR.DSK + PHC70FD.DSK PARA70FD.DSK


합쳐진 PARA70FD.DSK를 V4로 실행하면, paraMSX-R 런처(PARAMSX.COM)가 담긴 1번 디스크로 부팅되겠죠?

그럼 런처를 실행 후 V4의 DSK를 2번 디스크(PHC70FD 데모)로 변경하면 되겠습니다.


아래처럼 산요 기종으로 설정된 상태에서 잘 실행되네요!





영상으로도 한번 찍어보았어요.

데모 디스크의 1번 메뉴(자연화 사진 스크롤)과 3번 메뉴(BASIC 컴파일러 데모)의 동작모습입니다.





즐거운 주말되셔요~ ㅎ.ㅎ


2020년 7월 31일 금요일

T-Wave 제작 #8 - 라인아웃 어댑터

[ 서론 ]


T-Wave의 사운드는 헤드폰 단자로 출력됩니다.

근데 갑자기 왜 라인아웃 얘기냐구요? ㅎ.ㅎ


오디오 기기들의 아날로그 출력단자는 라인아웃, 헤드폰아웃 두 종류가 많이 쓰이는데요.

임피던스 차이로 인해 라인아웃은 구동 전류가 낮고, 헤드폰아웃은 높은 전류가 가능합니다.

헤드폰을 라인아웃에 꽂으면 소리가 잘 나오지않거나 작게 들리는게 이때문인데요.


근데, 헤드폰 출력단자를 오디오믹서의 라인인에 연결하면 어떻게 될까요?

특별한 문제는 없을거라 생각했거든요.

.

.

.

며칠전 MX-10 오디오믹서에 T-Wave 출력을 연결하면,

소리가 점점 작아지다가 결국 들리지않게 되는 현상이 나타난다고 알려주시더라구요.


맛탱이님께서 MX-10을 빌려주신다길래 일단 받아서 테스트를 해봤습니다.

... 진짜 소리가 줄어들더니, 뿅~하고 안들리게 되네요. ㅎ.ㅎ;;



[ 본론 ]


왜 이런 현상이 생기는지 봐야겠죠?

일단 위키에서 그림 한장을 퍼왔습니다.

아래는 오디오 라인 레벨을 표시한 그림입니다.





기준이 되는 dBV는 1Vrms입니다.

1 Vrms = 0 dBV, 이게 peak to peak 로는 2.828 Vpp가 되는데요.


일반적인 상용 오디오는 라인레벨이 -10 dBV = 0.894 Vpp

프로(?) 오디오는 +4 dBV = 3.472 Vpp라고 하네요.


T-Wave의 헤드폰 출력은 2.64 Vpp입니다.

아래는 1KHz WAV 파일을 MMC/SD로 재생했을 때의 모습입니다.




일반적인 오디오 믹서의 라인인에 그대로 연결해도 별 문제는 없는데, 왜 MX-10은 이상하게 동작할까요?

이유는 하나뿐이겠죠? -10 dBV보다 출력이 높아서?ㅋ

검색을 해보니... 일반기기의 라인아웃 레벨이 2 Vpp정도라고 하네요.

그러니까 일반적인 헤드폰 출력에 비하면 조금 낮습니다.


참고로 휴대폰 출력의 경우는,

예전 갤럭시들이 2.3 Vpp 정도이구요. 아이폰은 2.8 Vpp정도였습니다.

당시 기억으로는 갤럭시 헤드폰 출력이 너무 작은거 아니냐고 원성이 자자했던...ㅋ

요즘 폰들은 얼마인지 찾아보진 않았는데, 아마 좀 더 높을꺼에요.


그래서 MX-10의 라인인에 출력을 낮춰서 넣어보았습니다.

RCA 단자 4개를 붙여서 이렇게 어댑터를 만들었어요.





510옴 저항으로 출력이 반으로 낮춰 1.32 Vpp가 되었네요~





MX-10의 채널1,2 입력에 연결하고 출력을 최대로 올려서 테스트해보니,

... 소리가 잘 나오네요~ ㅎ.ㅎ

2 Vpp 넘어가면 문제가 되는걸까 싶은데... 출력을 이리저리 바꾸면서 테스트해보진 않았습니다.

더 궁금하신분 계시면 가변저항을 달아서 테스트해보셔요 (응?)



[결론]


결론은 'MX-10은 라인인 입력레벨이 너무 높으면 문제가 발생함'이 되겠습니다.


테스트는 했으니, MX-10 문제현상을 알려주신 분께 테스트 용 어댑터를 보내드려야겠죠? ㅎ.ㅎ

요렇게 만들었습니다.


재료: RCA 커넥터 4개, 510옴 저항 2개



1. 커넥터를 짧게 자르고, GND핀을 서로 연결합니다.





2. 저항을 연결 후, 커넥터의 플라스틱을 녹여서 서로 붙입니다. (인두로 지지직~~)





3. 검정색 종이테입으로 마무~으리!





4. 신호선에 저항이 연결된 것 뿐이니, 방향성은 없습니다.

입출력 케이블이 서로 마주보도록 연결하면 OK입니다요~






혹시 MX-10 외 다른 오디오 믹서/앰프에서 오동작하는 경우가 생기면...

간단하게 DIY해서 쓰시면 되겠습니다.

.

.

.

근데 옥션에 3.5파이 볼륨조절 케이블이 2450원이네요 -_-;

그냥 사서 쓰는게 낫겠습니다ㅋㅋ





즐거운 주말되세요~ ㅎ.ㅎ


2020년 7월 23일 목요일

T-Wave Tool v1.01


Download: 20200723_T-Wave_101.zip


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

T-Wave(tm) Tool v1.01

    By Yeongman Seo <sharksym@hitel.net>

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



[ 변경 내용 ]


- WSG 세팅값 모니터링 옵션 /T 추가

  예) TWAVE /T




[ TWAVE.COM ]


- 카트리지가 장착된 슬롯과 SCC-I 메모리 모드가 표시됩니다.


- WSG 세팅값을 저장(Save) 및 복구(Load)할 수 있습니다.

  저장 시, 32바이트 크기의 파일이 생성됩니다.

  예) TWAVE RISEOUT.WSG /S

      TWAVE RISEOUT.WSG /L


- WSG 세팅값을 모니터링 할 수 있습니다.

  실행 후 조그 다이얼을 조작이 가능합니다.

  예) TWAVE /T


  ESC를 눌러 프로그램을 종료합니다.


- SCC-I RAM에 롬파일을 로딩할 수 있습니다. (SCC 매퍼 전용)

  예) TWAVE MGEAR2.ROM


  /R 옵션을 추가하면, 롬파일 로딩 후 소프트리셋합니다.


- SCC-I 메모리 모드를 변경할 수 있습니다.

  4가지 모드가 있으며, 변경 후 본체 리셋 시 설정 유지됩니다.


  /I0: 512KB 최대 메모리 모드

  /I1:  64KB 스내처 모드

  /I2:  64KB SD스내처 모드

  /I3: 128KB 확장 모드 (파워온 기본값)


  예) TWAVE /I2


2020년 7월 21일 화요일

GitHub 계정에 'Arctic Code Vault Contributor' 배지 획득

제 GitHub의 메인 화면에 이런 알림이 하나 뜨더라구요.


https://github.com/sharksym






구글링해보니, GitHub 블로그에 내용이 나오네요! ㅎ.ㅎ

GitHub Archive Program에 관련된 것이군요.


https://github.blog/2020-07-16-github-archive-program-the-journey-of-the-worlds-open-source-code-to-the-arctic/






암튼 제가 올린 코드들은 북극 저장소로 들어갔네요ㅋ


그럼, 즐거운 하루 되세요!


2020년 7월 18일 토요일

T-Wave 1차 제작 완료!

이번 T-Wave 카트리지는 보드 및 케이스 제작에 시간이 꽤 걸렸습니다.

보드제작도 힘들었지만, 케이스/레이블 가공도 역대급으로 어려웠네요~ ㅎ.ㅎ


아래 사진은 케이스 작업이 완료된 모습입니다.

맛탱이님, 아스테리스님 고생많으셨습니다요~






그럼, 이만~~

2020년 7월 10일 금요일

M File Manager v3.0 for MSX-DOS2



Download: M_v3.0_20200710.zip


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

    M File Manager v3.0 for MSX-DOS2 (2020-07-10)

        By 서영만 <sharksym@hitel.net>

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


* 변경 내용


  - 기능 개선/변경


    기본모드와 Lite 모드를 하나의 OVL로 통합

    -> 가용 메모리 용량에 따라 동작모드가 자동설정됩니다.


    VDP ADJUST 리셋 문제를 수정

    -> BASIC에서 사용자가 설정한 SET ADJUST 값을 유지합니다.


    키입력, 그래픽라이브러리 등의 성능개선



* M File manager


  M은 MS-DOS에서 널리 쓰이던 Mdir과 유사한 파일관리자입니다.

  노턴 커맨더의 두패널 방식으로 동작하며,

   각종 파일, 디렉토리 관리 및 프로그램 실행을 도와줍니다.


  인터레이스 모드에서는 완성형(KS-5601) 한글 출력이 가능하며,

   넌인터레이스 모드에서는 아스키 문자만 출력됩니다.


  한글 FontPack 카트리지를 사용하면,

   확장완성형 한글(CP949) 및 한자 표시도 가능합니다.


  일부 멀티미디어 파일의 재생, 디스플에이가 가능합니다.

   IMS Player, MP3/WMA Player, Graphic Viewer 등



* 요구 사항


  MSX-DOS2, V9938/9958 VRAM 128KB

  기본 메모리매퍼 192KB (Lite 모드 시 128KB)

  

  주의: 보조 메모리매퍼를 지원하지 않습니다.

        turboR은 본체 내장된 메모리가 기본 매퍼로 동작합니다.

        따라서 FS-A1ST에서는 메모리 부족으로 실행되지않습니다.

        (FS-A1ST의 내장 메모리를 512KB로 증설해야 구동가능)



* 옵션 사항


  한글 FontPack 카트리지 (한글, 특수 문자, 한자 표시)

  MPX R1.0/R1.1 카트리지 (MP3, WMA 오디오 플레이어)

  MoonSound/달소리 (IMS 오디오 플레이어)

  PAC-V/XII-V 카트리지 (LED 비주얼라이저)



* 설치 방법


  1. 압축파일을 M 디렉토리에 풀어넣습니다.

  2. M.INI 파일을 자신의 환경에 맞게 편집합니다.

  3. M 디렉토리를 AUTOEXEC.BAT의 PATH 설정에 추가합니다.



* 사용법


  DOS2 프롬프트에서 M [리턴] 하면 실행됩니다.


  램상주 된 M 프로그램을 메모리 해제하려면,

   DOS2 프롬프트 상에서 M /r를 입력하면 됩니다.


  파일 뷰어 상에서의 동작키에 대한 설명은,

   M 실행 후 F1을 눌러 #HELP를 실행하면 볼 수 있습니다.



* 단축키 목록


  키 목록의 ^는 CTRL키, #는 SHIFT키를 의미합니다.


  #ESC    : M을 종료하고 DOS2로 복귀

   ESC    : DOS2 프롬프트 화면 보기 / 각종 명령창 취소선택

   TAB    : 두 패널간의 커서 이동


   UP     : 커서를 이전(위)   항목으로 이동

   DOWN   : 커서를 다음(아래) 항목으로 이동

   LEFT   : 커서를 이전 페이지로 이동

   RIGHT  : 커서를 다음 페이지로 이동


   RETURN : 파일 실행 / 서브디렉토리 열기 / 드라이브 열기

  ^RETURN : 타겟 패널에서 열기 (서브 디렉토리, 드라이브)

  #RETURN : 파일 또는 디렉토리 속성 표시


  F1 ~ F5 : 펑션키 메뉴 실행 (#:F6~F10, #^:F11~F15)

  #A ~ #H : 드라이브 빠르게 열기


   \      : 루트 디렉토리로 이동

  #\      : M 디렉토리로 이동

   BS     : 상위 디렉토리로 이동

   /      : 도스 커맨드라인 열기

  #/      : 도스 커맨트라인 열고 선택된 파일 붙여넣기


   SPACE  : 파일 선택 또는 해제

  #SPACE  : 모든 파일 선택 또는 해제

   INS    : 파일 또는 디렉토리 복사

  ^C      : 파일 또는 디렉토리 복사 (INS 기능과 같음)

  ^M      : 파일 또는 디렉토리 이동

  ^S      : 리스트 정렬방식 변경

   DEL    : 파일 또는 디렉토리 삭제 (ReadOnly 속성 제외)

  #DEL    : 파일 또는 디렉토리 삭제 (ReadOnly 속석 포함)


  ^K      : 디렉토리 생성

  ^R      : 파일 또는 디렉토리 이름 변경


  ^A      : 선택된 파일을 LZH로 압축

  ^E      : LZH 파일을 압축해제


  ^I      : 인터레이스, 넌인터페이스 모드 전환



* M.INI 설정


  사용자 환경 설정은 M.INI 파일로 저장됩니다.

  펑션키 및 파일 확장자별 실행 프로그램을 설정합니다.

  자세한 설명은 M.INI 파일 내부의 주석을 참고하세요.


  확장자에 따른 글자색(16진수 사용)을 지정할 수 있으며,

   배경색도 바꿀 수 있습니다.

  파일의 기본색은 회색(E)이며, 배경색은 파란색(BG:4)입니다.


  프로그램 설정시 %s는 현재 선택된 항목으로 대체되며,

  세미콜론을 쓰면 여러개의 명령을 등록할 수 있습니다.

  예) TXT:5:HV %s;APED %s

      MP3:9:#MPXP %s;MPXTOOL %s /v2


  기본적으로 TSR(램상주) 옵션이 켜져 있습니다.

  본체 메모리가 256KB 이하인 경우는 TSR 해제하는 편이 좋습니다.

  TSR 기능을 끄려면, <OPT> 그룹에서 TSR:0으로 설정하세요.



* 임시 파일 생성


  LZH 압축 파일 처리시 _M$.BAT 파일이 임시로 생성됩니다.

  정상적인 동작 후 삭제되니 참고하세요.



* 명령어 접두사


  *: 명령어/실행파일 구동 시,

     M이 점유중인 메모리가 해제된 후 프로그램 실행됩니다.

     (메모리 부족한 환경에서 유용함.)

     M으로 복귀 시, 다시 메모리에 상주합니다.

     예) *MEMORY


  ]: 명령어/실행파일을 Full Path로 입력하면,

     해당 디렉토리로 이동 후, 프로그램이 실행됩니다.

     M으로 복귀 시, 기존 디렉토리로 돌아옵니다.

     예) ]B:\M\APED M.INI


  /: 명령어/실행파일 구동 시,

     DOS 텍스트 모드로 전환하지 않고, M 화면을 유지합니다.

     그래픽을 쓰지 않는 프로그램 실행 시 편리합니다.

     예) /MMCSD MUSIC.MA



* 내장 프로그램


  #HELP: 도움말 출력 (M.HLP 표시)


  #CDD : 드라이브/디렉토리 이동

         예) #CDD B:\UTILS


  #CPU0: turboR Z80 모드 변경

  #CPU1: turboR R800 ROM 모드 변경

  #CPU2: turboR R800 DRAM 모드 변경


  #MPXP: JunSoft MPX 카트리지를 사용하는 MP3/WMA 플레이어입니다.

         화면 하단에 MP3/WMA 진행바가 표시되며,

         MP3 ID3 태그 및 WMA info 태그를 지원합니다.

         PAC-V/XII-V LED 비주얼라이저를 지원합니다.


  #IMSP: MoonSound 카트리지를 사용하는 IMS 음악 플레이어입니다.

         (Lite 모드에서는 사용불가)

         PAC-V/XII-V LED 비주얼라이저를 지원합니다.

         R800 고속모드에서 ISS 가사표시(화면 하단)를 지원합니다.


  #VGMP: 외부 프로그램인 VGMPlay을 활용한 VGM 플레이어입니다.

         GD3 태그를 지원합니다.


  #GV  : 그래픽 뷰어

         GE5/7, SRn, Snn, SCn, PIC, YJK, ILn, SGX



* 마지막으로


  M 파일 매니저와 함께 편리한 MSX-DOS2 환경을 즐기세요!


2020년 6월 28일 일요일

MMC/SD Drive V4 제작 #14 - CPC-400의 슬롯3에서 부팅?

오랜만에 V4 얘기가 나갑니다~ ㅎ.ㅎ


[ 서론 ]


MSX에서 각 슬롯의 ROM S/W가 초기화되는 순서는 아시죠?

-> SLOT 0-1, 0-2, 0-3, 1-0, ... 3-3


디스크롬은 초기화 때, 자신이 갖고있는 드라이브의 정보를 WORKAREA에 따로 등록하게 됩니다.

결국 드라이브의 문자 할당은 디스크롬의 초기화 순서에 영향을 받게되겠죠?

낮은 슬롯에 꽂은 디스크가 드라이브 문자를 먼저 가져갑니다.


아시다시피 CPC-400은 FDD가 내장되어 있습니다.

기본슬롯 한개를 몽땅 먹는 것도 아까운데, 디스크롬이 슬롯 가운데(SLOT 2)에 탑재됩니다.

만약 외장 디스크로 부팅하고 싶으면 전면슬롯(SLOT 1)에 외장 디스크를 연결해야합니다.


제가 만든 MMC/SD Drive는 ONE Drive라는 기능이 있어요.

본체에 내장된 FDD를 무시하고 MMC/SD 하나의 드라이브만 인식/부팅하게 도와주는 기능인데요.

가만 생각해보니, 본체 FDD의 디스크 등록정보의 위치를 바꾸면 드라이브 순서를 바꿀 수 있겠더라구요.



[ 본론 ]


이렇게 사용하는 시나리오를 생각해보세요.

SLOT2 = 내장 FDD

SLOT3 = MMC/SD Drive


부팅 시, 슬롯3의 MMC/SD 초기화 시,

1. 이미 설정된 슬롯2의 등록정보를 제거

2. MMC/SD 초기화 및 등록

3. 슬롯2의 FDD를 다시 초기화 및 등록


이게 제대로 동작 되면,

기존 디스크롬을 개조하지 않더라도 드라이브 등록 순서를 바꿀 수 있겠죠?

V3, V4 등의 외장 디스크를 후면슬롯에 꽂아서 부트 드라이브(A:)로 쓸 수 있겠습니다.


아래는 바뀐 MMC/SD BIOS로 부팅되는 모습입니다.




슬롯2의 FDD는 드라이브 G: H:로 밀려난 것을 볼 수 있죠?





아래는 실제 동작되는 모습입니다.

- MMC/SD로 기본 부팅(DOS2)하는 경우, FDD를 재설정해서 뒷쪽 드라이브로 변경합니다.

- DSK 에뮬 모드에서는 FDD가 없는 것처럼 동작합니다. (기존 ONE Drive와 동일)

- 메가램 모드에서는 FDD 등록정보를 바꾸지 않습니다. (FDD로 세이브/로드 가능)


영상의 CPC-400에서는 이렇게 구동되었습니다.

SLOT1 = FMPAC

SLOT2 = 내장 FDD

SLOT3 = MMC/SD Drive V4





그럼, 이만~~


2020년 6월 24일 수요일

[2020] 네덜란드에서 10대 소년에게 인종차별적 발언과 폭행

지금 2020년인데 유럽애들은 변함없네요.

아시아 사람들이 욕안먹으려면, 관광지 가서 돈 쓰는 것 뿐... -_-


원문 뉴스 링크는 아래에~

https://newsis.com/view/?id=NISX20200623_0001070406&cID=10101&pID=10100


[서울=뉴시스] 김광원 기자 = 네덜란드에서 10대 한국계 소년이 인종차별적 발언을 하는 무리에게 폭행당한 사건이 일어나 공분을 사고 있습니다. 피해자는 네덜란드에 사는 16세 한인 소년으로 가해자에게 발로 머리를 가격당했으며 폭행 상황이 담긴 영상도 공개됐습니다.




2020년 6월 23일 화요일

T-Wave 제작 상황입니다.




현재 보드제작이 완료되었구요.

케이스 및 레이블은 맛탱이님과 ASTERiS님께서 작업하고 계십니다.


조금만 더 기다려주세요~ ㅎ.ㅎ/~


그럼 편안한 밤 되세요.


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


[블로그 용]


T-Wave 버스가 곧 출발합니다~ ㅎ.ㅎ


[사진]


예상했던대로 납땜하는데 시간이 많이 걸리네요.

PAC-V 다음으로 힘든 작업인 것 같아요ㅋ


일단 제가 할일은 마무리되었으니, 다음 프로젝트로 ㄱㄱ해야겠죠? ㅎ.ㅎ/