1) Z280 호환 명령
turboR 호환기를 만들기 위해서는 R800에 추가된 곱셈 명령도 구현이 필요합니다.
SLT-Turbo V1에서는 Z280을 활용했지만, 이번에는 그냥 CPLD의 도움으로 처리했어요.
Z80 명령어 ED C0 ~ ED FF, 총 64개 명령어 공간을 사용합니다.
오리지널 Z80에서 이 명령어를 쓰면 그냥 무시됩니다. NOP 명령을 2개 쓴 효과랑 같아요.
참고로, Z280의 경우는 이 영역 대부분이 확장 명령어로 들어 있습니다.
8bit 곱셈/나눗셈, 16bit 곱셈/나눗셈, signed/unsigned 다 있죠.
R800은 unsigned 8bit, 16bit 곱셈 명령어 중에서 극히 일부인 6개만 들어가는데요,
SLT-Turbo에서는 unsigned 곰셈 명령어 10개를 넣었습니다.
ED C1 ; MULUB A, B -> HL ; Z280/R800
ED C3 ; MULUW HL, BC -> DE:HL ; Z280/R800
ED C9 ; MULUB A, C -> HL ; Z280/R800
ED D1 ; MULUB A, D -> HL ; Z280/R800
ED D3 ; MULUW HL, DE -> DE:HL ; Z280
ED D9 ; MULUB A, E -> HL ; Z280/R800
ED E1 ; MULUB A, H -> HL ; Z280
ED E3 ; MULUW HL, HL -> DE:HL ; Z280
ED E9 ; MULUB A, L -> HL ; Z280
ED F3 ; MULUW HL, SP -> DE:HL ; Z280/R800
한가지 주의할 부분은 이 곱셈 명령어들의 결과 flag 처리는 넣지 않습니다요.
(사실 곱셈결과에 의미있는 flag가 없...ㅋ)
간단한 테스트 프로그램으로 곱셈 결과가 맞는지 확인해보아요~
그나저나, turboR이 나온지 거의 35년이 됐는데, R800 곱셈을 쓰는 상용프로그램이 없다는 게 참 신기하죠?
제가 만든 ASO remake가 유일한 R800 테스트 프로그램이라고 볼 수 있겠는데요.
지난번 동작하는 영상을 보셨을테니 ASO는 넘어갑니다~ ㅎ.ㅎ
2) X-II BIOS 확장
X-II의 BIOS는 롬영역을 다 쓰고 있어서, 추가 코드를 넣을 공간이 없습니다.
심지어 BIOS 엔트리까지 다 잡아먹고 있죠. (역시 내일이 없는 회사ㅋ)
CHGGPU(0180H), GETCPU(0183H) 루틴을 명령어 하나로 대체하도록 해봤습니다.
ED FE ; CHGCPU
ED FF ; GETCPU
원래 BIOS 엔트리는 JP NN 코드(3바이트)를 넣게 되어있는데,
확장 명령어가 2바이트니까 RET 명령까지 다 넣으면 딱 3바이트로 끝나게 됩니다.
아래처럼 되겠네요 ㅎ.ㅎ
음... 사실 굳이 이렇게 만들 필요는 없는데요.
예전 paraMSX-R과 MMC/SD V4에서는 BIOS롬을 뱅킹으로 처리해서 코드를 확장하긴 했었죠 ㅎ.ㅎ
3) 고속 LDIR
Z80에서는 LDIR, OTIR의 비중이 큰데요.
OTIR, OUTI 등의 경우는 주변장치의 속도(VDP 등)때문에 고속으로 최적화할 여지가 별로 없겠구요.
LDIR은 LDI x N개로 풀어(unroll)쓰는 걸 많이 사용합니다.
메모리 여유가 있다면 루프 명령을 쓰는 것 보다는 많이 빠르니까요.
물론 기존 디스크롬들은 이미 다 적용이 되어있죠.
지금 해보려는 건... 고속모드에서 더 빠르게 돌리기 위해 메인램에서 코드를 구동하는 것입니다.
요약하면, '외부 슬롯의 코드에서 LDI x N 풀어쓰기가 필요할 때 메인램에서 구동'입니다.
일단 2개의 명령어를 만들어봤어요.
ED CF ; LDIR
ED DF ; LDIR256
ED CF는 기존 LDIR과 똑같은 기능이지만 속도만 더 빠른 버전이구요.
실제로는 RAM에서 LDI x 32개로 풀어진 명령어로 최적화가 됩니다.
ED DF는 LDIR 수행 시 반복(루프)를 256 배수일 때 쓰면 더 빠른 버전입니다.
실제로는 RAM에서 LDI x 256개가 루프를 돌게 됩니다요.
보통 디스크에서 섹터를 읽게 되면 1섹터 512바이트씩 전송을 하니까 이 경우 꽤 쓸모가 있어요.
turboR에서는 MMC/SD V4로 DOSSCAN을 돌려보면 520~540KB/s 정도가 나오는데요.
SLT-Turbo + V4에서 구동하면 470KB/s 정도가 나옵니다.
이걸 LDIR 최적화 명령어를 이용하면 560KB/s 수준으로 빨라지게 됩니다.
아래 사진 참고하세요.
그럼, 다음편에서 보아요~
댓글 없음:
댓글 쓰기