2021년 1월 16일 토요일

파라동 31주년 기념 이벤트 용으로 제작된 '요술나무 스코어 어택' 버전의 공략입니다.




게임을 시작하면 30초 카운트다운이 시작됩니다.

0초가 되면 게임이 강제로 끝나게 되지요~ ㅎ.ㅎ

화면 하단에 녹색의 바의 밝기로 시간을 대충 알 수 있습니다.


플레이 중 점수를 얻게 되면, 해당 점수에 따라 시간 보너스가 적용됩니다.

보너스 없이 진행하면 1스테이지 첫화면 끝에서 게임오버됩니다요ㅋ


게임 상에서 얻을 수 있는 점수를 대충 적어보면 이렇습니다.


아이템 왕관   = 1000점

아이템 화살   = 2000점

아이템 칼     = 3000점

사과 먹기     =  100점

부엉이 공격   =  500점 (사과를 떨어뜨려서 맞춰야함)

나무구멍 보석 =  200점 / 400점 / 600점 (나무구멍에 사과를 넣으면 보석 생성)


그 외 스테이지 클리어 시 2000점 보너스가 있습니다.


시간 제한은 30초인데요, 점수 보너스로 시간이 늘어나더라도 최대치는 30초입니다.

게임오버 되지않으려면 정신없이 달려야합니다ㅋㅋ


국딩시절에 요술나무 엔딩을 보신 분들이라면, 아주 신나게 즐기실 수 있을 듯 합니다.

(농담 아니라 진짜로요~ ㅎ.ㅎ;)



그럼, 공략에 도움이 될만한 그림을 올려드릴테니 참고하세요.


점수를 획득할 때 시간 보너스가 선형으로 올라가지는 않습니다.

아이템 점수가 높아서 밸런스 조절이 되어있어요.

그래프로 그리면 이렇게 됩니다.

가로축 = 획득 점수

세로축 = 보너스 시간(초)




그림에서 파란색이 보너스 점수입니다.

2000점을 넘어가면 포화되기 시작합니다.


녹색은 동일 점수를 두번 연속 획득했을 때의 그래프입니다. 비교용 그림ㅋ

예를 들어,

왕관(1000점)을 두번 먹으면 보너스가 5.25초 x 2 = 10.5초인데,

화살(2000점)을 먹으면 보너스가 8.83초입니다.


결론적으로 화살, 칼 등의 아이템만 먹고 빨리 올라가는 것 보다는...

부엉이도 잡고, 나무구멍에 사과넣어서 보석도 먹고 가는게 더 유리하다는 얘기입니다.


그럼, 일요일 마감까지 화이팅입니다! ㅎ.ㅎ/


PS.
오늘 제 기록을 한번 올려봅니다.
높이는 모자이크 처리 ㅋㅋ



2021년 1월 7일 목요일

2021년엔 파란색 불꽃으로 갑니다요~

어쩌다보니 제 PAC-V가 하나밖에 안남았더라구요.

그나마 이것도 /SLTSL 핀을 개조한거라서..ㅋ

정품(?)으로 새로 납땜했습니다.




사진 상으로는 기존 보드랑 차이는 없지만, 파란색 LED바가 들어있습니다~ ㅎ.ㅎ


구동하면 요런 모습이에요.

왼쪽은 검정색 반투명 케이스, 오른쪽은 파란색 반투명 케이스를 사용했습니다.





그럼 이만...


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 코프로세서 모드를 구현'

으로 되겠습니다.



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