2025년 9월 15일 월요일

SLT-Turbo 제작 #12 - Z80 30MHz, OPLL wait

1) Z80 30MHz


지난번에 28.63MHz로 구동했었는데요. 클럭을 더 올려서 테스트를 해봤습니다.


일단 최대치라 생각되는 33MHz까지 올려보니, 아래처럼 속도가 나옵니다.




이 상태로 게임을 돌려봤는데, 시간이 5분쯤 흐르니 SLT-Turbo가 멈추거나 리부팅되는 등 난리네요 ㅎ.ㅎㅋ


조금 낮춰서 30MHz로 테스트해봅니다.

M1 wait를 끈 상태에서 루프 카운트가 딱 100으로 나오네요ㅋ




GT와 X-II에서 테스트를 해보니, 1시간 넘게 게임을 돌려도 괜찮았습니다.


근데 지난번 보다 왜 클럭을 더 올려서 테스트했냐구요?


아무래도 20MHz로 구동하면 turboR 실기와 비슷한 성능이 나오잖아요?

20MHz랑 30MHz 두개의 모드를 넣으면 좀 더 유용하지 않을까? 그런 생각이 들더라구요.


기본 고속모드는 그냥 30MHz로 사용하구요.

기존 turboR 전용 프로그램을 구동 시, 타이밍 문제가 생기는 경우에 20MHz로 낮추면 좋겠죠!

.

.

.

사실은 60MHz 오실레이터 하나로 2분주된 30MHz, 3분주된 20MHz, MIDI용 31250Hz를 쉽게 만들 수 있거든요.

현재 보드에는 오실레이터 2개 박혀있는데, 하나 제거하면 CPLD 여유핀이 1개 생기게 되어서...읍읍...ㅎ



2) OPLL wait


OPLL을 써서 프로그래밍 해보신 분은 아시겠지만, 이 칩이 액세스 사이클이 좀 느립니다.

turboR에서는 VDP I/O에는 auto wait가 구현되어있지만, OPLL쪽은 이 기능이 없어요.

그래서 Z80, R800 공용으로 코드를 만들게 되면 라이브러리 사이즈도 커지고... 그런 단점들이 있습니다.


아마 turboR 나오기 전에 발매된 게임들을 강제 고속모드로 돌려보신 추억이 있으시죠?ㅋㅋ

Z80 3.58MHz에 맞춰 제작된 게임들은 죄다 OPLL 소리가 먹통되거나 요상한 소리가 나오게 됩니다.

이 때문에 고속모드 패치 중에는 OPLL 코드도 함께 패치가 들어있는 경우도 있고 그랬습니다요.


암튼, SLT-Turbo에서는 OPLL를 액세스 할 때 자동으로 wait가 처리되도록 했습니다.

CPU 속도 3.58MHz, 20MHz, 30MHz 상관없이 코드가 잘 돌아가도록이요~ ㅎ.ㅎ



그럼, 실제 동작 모습도 구경하셔요!

- 30MHz 모드로 부팅 후 BASIC 루프 테스트 

- FMPAC 데모 프로그램에서 OPLL 동작 확인

- 프레임 싱크가 메롱인 게임 테스트(트윈비)





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


2025년 9월 9일 화요일

SLT-Turbo 제작 #11 - Z80 28.63MHz

칩 번호가 Z84C0020 으로 시작하는 Z80은 최대 20MHz로 동작합니다. 

이 상태에서 turboR과 비슷한 성능이 나온다는 걸 보셨을텐데요.

기억 안나시면 V1 제작글을 찾아보세요~ ㅎ.ㅎ


구글링 해보니, '이 칩들을 33MHz로 오버클럭을 해도 잘 동작함'이라는 내용의 블로그가 나오더라구요.

그래서, 이번 SLT-Turbo v2.1에서는 3.58MHz x 8 = 28.63MHz로 한번 돌려보기로 합니다!


28.63MHz 클럭은 주기가 약 35ns인데요.

보드에 10ns 타입의 SRAM을 넣어놨기 때문에 대충 돌려도 타이밍 문제가 없도록 해놨습니다.


간단한 VDP 테스트 코드를 한시간 정도 돌려보니 괜찮은 듯 하군요.



BASIC으로 루프 테스트를 해보면, 아래처럼 나옵니다.


제 실기 turboR(R800 DRAM mode)에서는 TIME 카운트가 174로 나오니 참고하셔요.



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


2025년 9월 7일 일요일

SLT-Turbo 제작 #10 - 보드 v2.1로 변경

2020년에 SLT-Turbo V1가 나온 후 5년이 지났습니다. 시간 참 빨리 가네요...


아시다시피 2021년에 진행했던 SLT-Turbo V2 프로젝트는 컨셉이 애매해서 중단이 되었는데요.

그동안 확장슬롯 부분을 SLT-X V2로 만들었구요.

오디오 부분도 작년에 나온 WAU를 많이 쓰시는 걸로 알고 있습니다. 맞나요?ㅋ


이제 주변 환경이 좀 정리(?)되었으니, SLT-Turbo v2.1로 가보아요~~ ㅎ.ㅎ/


아래는 SLT-Turbo v2.1 보드의 모습입니다.




SLT-Turbo v2.1의 기능들을 정리해봤습니다.


1. 외부 슬롯


기존 v2는 6개의 슬롯 커넥터가 있었죠.

기본슬롯(SLOT 1) + 확장슬롯(SLOT 2-x) + 고속BUS 슬롯(I/O 전용)


v2.1에서는 외부 슬롯이 없는 대신 SLT-X V2를 연결해서 사용합니다.

참고로, Bypass용 커넥터도 들어있는데요.

여기에 연결하면 SLT-Turbo 기능은 OFF되고, SLT-X V2만 동작하게됩니다.



물론 기존 v2에 있던 고속 BUS용 IO 슬롯은 제외입니다.

고속으로 동작하는 기능들은 SLT-Turbo 내장 기능들만 가능하다고 보시면 되겠습니다.


2. R800 곱셈 등의 추가된 CPU 명령어


기존 v2와 동일합니다. 추가 명령어는 CPLD 로직으로 구현되며, CPU는 Z80 한개만 사용합니다.

R800 곱셈 외의 다른 명령어를 추가할지는 아직 미정입니다.



3. 내장램


기존 v2와 동일한 SRAM 4MB를 사용합니다.

BIOS, Kanji Shadow로 예약되는 영역이 있어서, DOS2에서 사용자가 쓸 수 있는 램은 약 3MB입니다.



4. 고속 모드용 내장 기기


4.1 디스크 드라이브


v2의 SD 드라이브는 제외되었습니다.

물론 빠르게 동작하는 디스크가 있으면 좋습니다만...

아무래도 실기 MSX를 쓴다는 컨셉(?)에서는 본체 내장된 FDD를 활용하는 것이 맞다고 생각되네요.


paraMSX-R의 V-Disk 에뮬과 동일한 방식으로 구현됩니다.

예를 들어 X-II에서 SLT-Turbo v2.1를 구동하면,

SLT-Turbo의 디스크(SLOT 3-2)를 액세스 시 X-II 본체의 FDD(SLOT 2)가 동작하는 식이죠.


4.2 비디오


사실 요놈 때문에 오랫동안 고민했었는데요.

추가된 비디오 기능을 활용할 수 있는 시나리오를 결국 못 찾았습니다 ㅠ.ㅠ


결론: 비디오 기능은 제거


4.3 오디오


v2에서 VS10x3, I2S DAC 정도를 고려했었는데요.

이젠 WAU가 있어서, 딱히 MP3, PCM 오디오를 추가 할 필요는 없어졌습니다.


결론: 오디오 기능은 제거



5. DMA 컨트롤러


기존 v2와 동일합니다.

약간의 차이라면...

v2는 슬롯 신호(/SLTSL)가 내장이라서, 외부 슬롯의 Memmory mapped I/O 사용 시 편리한데,

v2.1은 외부의 SLT-X를 컨트롤을 해야되니, 약간의 추가 클럭을 소진하게 됩니다.

아마 실제 활용은 I/O mapped 기기들이 될 확률이 높겠죠.



6. turboR 호환 기능들


기존 v2의 H/W Timer, 8BIT PCM 출력, MIDI 출력은 동일하게 들어갑니다.

단, MIDI OUT 포트는 2개에서 1개로 줄었습니다.


Z80 DRAM, R800 DRAM 모드는 BIOS Shadow포함 turboR 그대로 호환입니다.

Kanji Font는 Shadow(RAM)로 구현되어서, 런타임으로 폰트를 바꾸는 것도 가능합니다.


SLOT 3-3의 매퍼(일명 Panasonic mapper 8K)는 지원되지 않습니다.



마지막으로 보드 납땜 확인하느라 찍은 사진을 올려봅니다요.


MSX1 JP BIOS를 로딩해서 BASIC 루프 테스트를 한 모습입니다.



Z80 3.58MHz에서 M1 wait 클럭을 제거 및 Z80 7.16MHz로 구동한 경우의 모습입니다.



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