2024년 6월 12일 수요일

HI-TECH C v3.09 - Win32 Recompiled version test

모두(?)가 아시는 그 하이테크 C 컴파일러의 Win32 버전이 나왔습니다.

무슨 개소리냐구요? ㅎ.ㅎ


.

.

.


제가 20년 전에 처음 HI-TECH C를 쓸 때는 MSX 에뮬(paraMSX)을 이용했었습니다.

뭐, turboR 실기에서도 소스 컴파일을 할 수 있습니다만...

당시 GT + MMC/SD 조합으로도 긴~긴~ 빌드 타임을 기다리는 건 무리였죠ㅋ


암튼 그렇게 쓰다가, 2008년 부터는 성능이 괜찮은 윈도용 CP/M 에뮬을 발견해서 지금까지 활용했습니다.

커맨드 프롬프트에서 직접 실행 할 수 있어야, MAKE 등의 기타 툴을 활용하기 좋으니까요.

참고로 CP/M 에뮬은 일본 아자씨가 만든 CP/M EXEcutor입니다.


그러다가 개인 프로젝트의 소스가 점점 커지고 윈도에서도 작업 효율이 점점 안좋아졌는데요.

시간이 지나면 PC 성능도 함께 올라가니까 그럭저럭 에뮬로 버틸만 했습니다요.


시간은 흘러~ 1년, 5년, 10년, 15년...

어느날(며칠 전) HI-TECH C가 디컴파일이 되었다는 소식을 듣게 되었습니다 ㅎ.ㅎ


원래 HI-TECH C CP/M 버전은 ANSI C를 지원하는 상용 컴파일러입니다.

근데 20년 전에 제작사가 사후지원을 종료하면서, 프로그램을 공개(free)로 풀어버렸죠.

저도 옵티마이저, 뱅킹 툴 등을 만들고 짜깁기해서 지금껏 잘 쓰고 있는데요.


최근 이 CP/M용 실행파일을 디컴파일해서 활용가능한 수준의 C 소스로 만든 분이 나왔더라구요.

대충 히스토리를 보니...


먼저 CPP, P1, CGEN, ZAS, LINK 등의 기본 컴파일러, 어셈블러가 만들어졌구요.

https://github.com/nikitinprior?tab=repositories


다른분이 LIBR(라이브러리안)을 추가하고, 소스를 모두 묶어서 빌드할 수 있게 만들어놨네요.

https://github.com/ogdenpm/hitech


오~~ 필요한 거 다 있네요? ㄷㄷㄷ

궁금해서 바로 받아서 빌드해봤습니다 ㅎ.ㅎ

참고로, 최종 커밋은 지난 5월 31일에 들어갔네요.

https://github.com/ogdenpm/hitech/commit/6c762963ce7ab16fef74b7551588411abbc6e69a



간단한 Hello World 프로그램을 컴파일해서 비교해보니, 출력물이 오리지널과 똑같습니다. 굿굿!!


모든 툴이 진짜 다 괜찮은지 확인하려면, 큰 소스를 빌드해보는 방법뿐이겠죠?

M 파일매니저를 빌드해봅시다!


먼저, CP/M 에뮬을 쓰는 MAKEFILE을 뜯어고쳐서 Win32 리컴파일 버전을 쓰도록 수정했습니다.

참고로 CP/M은 서브디렉토리 개념이 없어서, 편하게 쓰려면 Tool, LIB, Source 등을 모두 개별 드라이브로 분리해야하는데요.

다행하게도 CP/M EXEcutor는 윈도의 폴더를 에뮬의 드라이브로 매핑해주는 기능이 있습니다.

그래서 제가 쓰는 툴들은 가상의 드라이브(A: B: C: D:)를 쓰도록 환경을 구성했었죠.


Win32 리컴파일 버전은 파일명에 디렉토리 패쓰를 쓸 수 있고, 긴파일명도 당근 지원됩니다.

M 파일매니저를 빌드해보니, 출력물은 거의 똑같네요.

바이너리에서 차이나는 부분은 사실 CP/M의 레코드 사이즈(128 바이트)로 인한 거였구요.

실제 동작하는 영역은 똑같았습니다. 완벽하네요!! ㅎ.ㅎb


아래의 M.COM 실행파일(멀티뱅크 로더)를 비교해보면, 끝부분의 dummy 영역만 차이가 나는 것을 볼 수 있습니다.




아래는 긴파일명(LFN)을 테스트해 본 모습입니다.

MPXFW.C였던 파일명을 길게~~ 30글자 넘게 만들어도 잘 컴파일됩니다.



링커의 MAP파일에서도 아래처럼 정상적으로 표시됩니다.

라이브러리도 디렉토리 패쓰를 지정할 수 있어서 좋아요.



아래는 MAP파일에서 조금 동작이 달랐던 부분인데요.

같은 오브젝트 내의 심볼을 이름으로 정렬하느냐, 주소로 정렬하느냐 정도의 차이였습니다.

어차피 사람이 인식하는데엔 별 문제없는 수준입니다요 ㅎ.ㅎ




그리고, 가장 중요한 빌드 타임을 비교해보아요~


CP/M 에뮬 + Z80 바이너리 VS Win32 네이티브 프로그램

얼마나 빨라졌을까 궁금하시죠? ㅎ.ㅎ


# M 파일매니저 빌드

CP/M 에뮬 조합 환경 -> 약 55초

Win32 리컴파일 버전 -> 약 16초


# C LIB x 8개 빌드

CP/M 에뮬 조합 환경 -> 약 10분

Win32 리컴파일 버전 -> 약 1분 15초


속도가 많이~많이~ 빨라졌네요!

참고로, C 라이브러리는 멀티코어로 8개 동시에 빌드한 상태였습니다.

이거 순차적으로 빌드하면 1시간 걸립니다요. (아마 MSX로 빌드하면 하루종일ㅋ)

제 PC는 라이젠5 7600입니다. 참고하셔요~



그럼, 이만...


댓글 없음:

댓글 쓰기