2025년 9월 21일 일요일

SLT-Turbo 제작 #13 - 내부 슬롯

고속 모드를 제대로 활용하려면, turboR처럼 동작해야 되겠죠? ㅎ.ㅎ



@ GT 모드


A1GT와 유사한 구조로 되어있구요. 내부 슬롯은 아래처럼 배치됩니다.


SLOT 0-0 = MainROM     (Page 0,1)

SLOT 0-1 = BASIC'N 2.1 (Page 1) + reserved (Page 2)

SLOT 0-2 = MusicROM GT (Page 1) + SLT-OPT  (Page 2)

SLOT 0-3 = CPU helper  (Page 0) + MSX LOGO (Page 1)


SLOT 3-0 = RAM 4096KB

SLOT 3-1 = SubROM      (Page 0) + KanjDRV  (Page 1,2)

SLOT 3-2 = DOS2 v2.31  (Page 1)

SLOT 3-3 = FontPack V2 (Page 1,2)


기존 turboR과 차이라면... BASIC'N, FontPack V2 내장 정도겠네요.

여기서 FontPack V2는 BIOS뿐만 아니라 한글폰트도 포함됩니다.

특별한 이유가 없다면 외부슬롯에 FontPack을 꽂을 필요가 없습니다.

내장 I/O로 빠르게 구동하는 쪽이 더 좋으니까요~ ㅎ.ㅎ/

(물론 내장 FontPack을 끄고 외장을 쓸 수 있습니다.)



@ X-II 모드


고속모드도 없는 MSX2 기종이지만, 옛날 국산 프로그램들을 실행하는 용도로 쓰려구요.

내부 슬롯은 아래처럼 배치됩니다.


SLOT 0-0 = MainROM      (Page 0,1)

SLOT 0-1 = Hangul/Hanja (Page 1,2)

SLOT 0-2 = RAM 4096KB

SLOT 0-3 = SubROM       (Page 0) + HangulROM (Page 1)


SLOT 3-0 = MusicROM     (Page 1) + SLT-OPT   (Page 2)

SLOT 3-1 = BASIC'N 2.1  (Page 1) + reserved  (Page 2)

SLOT 3-2 = DOS2 v2.31   (Page 1)

SLOT 3-3 = None


X-II에서 숨긴(?) 저작권 및 버전 표시는 다시 켜놨습니다.

내장된 완성형 한글폰트는 명조체가 아니라 '둥근모' 폰트입니다.


SLOT 3-3의 FontPack은 기본적으로 OFF됩니다.

대우의 SCREEN9 출력루틴과 조금 간섭이 되더라구요.

BIOS의 한글 입력기와 ANSI 스크린만 제외되는 것이라서,

일반 프로그램에서 한글 폰트 I/O는 그대로 활용가능합니다. (예: M 파일매니저)

물론 FontPack BIOS를 켜는 것도 가능합니다.


CPU 모드 설정을 위해 별도의 BASIC CALL CPUn 명령을 추가했습니다.

CALL CPU0, CALL CPU1, CALL CPU2 이렇게요.

숫자만 봐도 뭔지 아시겠죠? 노말모드, 고속모드(ROM), 고속모드(RAM)입니다.

(참고로 이 명령은 GT 모드에서도 똑같이 사용가능합니다.)



@ BIOS shadow RAM


고속모드에서는 BIOS를 RAM에 복사해서 wait 없이 빠르게 구동할 수 있습니다.

turboR의 shadow RAM과 같은 방식으로 동작합니다.

기존 turboR은 shadow RAM에 64KB를 할당하지만, SLT-Turbo에서는 256KB를 할당합니다.

내장 BIOS 대부분이 shadow RAM으로 전환된다고 생각하시면 맞습니다.


그 외 추가 256KB의 shadow RAM이 예약되어있습니다.

FontPack에서 128KB를 사용하는데요.

FontPack을 끄고 Kanji(또는 X-II 한글) 폰트를 shadow RAM으로 변경할 수도 있습니다.

MMC/SD V4의 Kanji RAM 기능과 동일합니다. 사용자가 원하는 폰트롬으로 로딩가능합니다.


전체 4096KB의 램에서 512KB가 shadow RAM으로 할당됩니다.

따라서 가용 메모리는 3584KB가 되겠습니다.



그럼, 실제로 동작하는 모습을 영상으로 보시죠!

GT 모드에서 FontPack 사용 및 X-II 모드에서 SCREEN 9를 사용하는 모습입니다.





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


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로 나오니 참고하셔요.



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