프로그래밍 글은 오랜만에 쓰네요. 지난 글을 검색해보니 마지막 글이 2016년이었..ㅎ.ㅎㅋ
지난 송년회 때 ROM파일 관련 얘기가 나와서, 관련 내용으로 글을 한번 적어봅니다.
일단, 여기서 설명하는 'HI-TECH C'는 제가 만든 뱅킹 툴과 결합된 툴체인을 의미합니다.
기존 CP/M 및 MS-DOS 버전과는 차이가 있으니, 잘 모르는 부분이 있으시면 지난 글을 검색해서 보시면 좋겠습니다.
CFG 파일에서 설정된 app-mode에 따라 DOS1 또는 DOS2용 실행파일(COM 또는 COM + OVL)이 생성됩니다.
이건 뭐 다 알고 계시죠? ㅎ.ㅎ
그러면, 생성된 실행파일을 롬 카트리지로 제작하려면 어떻게 해야될까요?
몇가지 방법이 있습니다.
1. 플래쉬롬 카트리지 사용
프로그램 종류에 맞는 부팅 디스크에 완성된 프로그램을 넣은 후,
DSK2ROM 등의 프로그램으로 롬디스크 이미지를 만듭니다.
롬디스크는 보통 DOS1 커널이구요. 각종 플래쉬롬 카트리지 등에 다운로드해서 사용가능합니다.
읽기전용 디스크로 동작하지만, 프로그램에서 디스크 쓰기를 하지 않는다면, 이정도로 충분하겠죠.
만약 DOS2 프로그램을 실행해야 한다면?
본체에 별도의 DOS2 카트리지가 있거나 turboR 같은 DOS2 내장 기종이 필요합니다.
2. MMC/SD V1 및 V2 카트리지 사용
요즘은 보통 V3나 V4를 쓰시겠지만, 구버전인 V1, V2는 플래쉬롬의 일부분을 부팅 디스크로 사용이 가능합니다.
이 롬디스크는 R/W가 가능하도록 설계되어 있어서, 실제 디스크처럼 사용가능합니다.
단, DSK 이미지 용량이 384KB로 제한이 되어있어요.
512KB 플래쉬롬에 MMCSD BIOS 128KB + DSK 이미지 384KB를 붙여서 다운로드합니다. (ATLOAD 툴 사용)
만약 MMC/SD 보드를 자작한다면, 매뉴얼에 나와있는 회로도의 SCC 카트리지 파트만 제작하시면 되는데요.
이제와서 이걸 만드실 분은 아마 없으시겠죠? ㅎ.ㅎ
3. Flash Drive 사용
DOS1 및 DOS2 커널이 내장되어 있어서, 자작한 DOS2 프로그램을 실행하는 용도로 쉽게 사용가능합니다.
플래쉬롬의 일부분을 쓰기가능한 디스크섹터로 구성되어있어서,
디스크 세이브/로드가 필요한 때에 활용하면 좋습니다. 디스크 용량도 1.44MB이구요.
참고로, 제가 샘플로 보여드린 활용법은, GRUN 세이브 및 YS2 HDD 버전 세이브였습니다.
관련 글은 Flash Drive로 검색하시면 볼 수 있어요.
.
.
.
뭔가 생각하시는 것과 거리가 있나요? ㅎ.ㅎ
다른 분들이 원하시는 것은 보통 이렇더라구요.
-> 디스크 루틴이 필요없는 32KB, 48KB 등의 저용량 롬팩용 프로그램 제작
원래 제가 HI-TECH C 뱅킹 툴을 만든 목적은,
- DOS2에서 대용량 프로그램(32KB 뱅킹) 제작
- turboR의 빠른 내장 메모리 매퍼를 활용
- 비트맵 그래픽, 한글 디스플레이 활용
입니다.
그렇게 제작된 것들이 ASO remake, M 파일매니저, HV 한글뷰어, 한자/특수 문자 로더, MMCSD 툴 등의 프로그램입니다.
자낙, 마성전설 같은 32KB 게임팩 제작과는 한참 떨어진 거라고 봐야겠죠.
그.래.서. 하나 더 추가합니다.
@ 32KB/48KB/64KB 넌매퍼 롬 카트리지 사용
작년에 TapTapRevolution을 구상하면서,
메인 프로그램을 HI-TECH C로, 디스크 없는 환경 용도로 만들어볼까? 라는 생각이 들더라구요 ㅎ.ㅎ
프로그램은 DOS 환경과 똑같은 램 64KB 영역에서 동작하지만,
프로그램 로더는 일반 32KB 롬팩처럼 실행됩니다.
기존 라이브러리에서 디스크 루틴 외에는 구동할 수 있도록, BDOS의 루틴들도 구현이 되어있구요.
64KB 롬팩으로 구현하는 경우는 마지막 16KB 영역을 그래픽 데이터로 활용하는 것도 구현되어 있습니다.
프로그래머 입장에서는 HI-TECH C로 DOS1용 프로그램을 빌드하는 것과 같은 방식으로 제작이 가능합니다요.
CFG 파일에 새로 추가된 rom-mode 스위치를 사용하면 ROM파일로 출력물이 생성됩니다.
아래는 샘플 프로그램인 0HANGUL.ROM 디렉토리의 CFG 설정부분입니다.
'app-mode = 0' 및 'rom-mode = 2'로 설정되어 있습니다.
프로그램 로딩 및 실행은 카트리지의 INIT 루틴에서 이루어집니다.
따라서 프로그램이 종료되면 DOS로 복귀하는 게 아니라, 메인 BIOS의 슬롯 INIT 루틴으로 복귀합니다.
github의 EXAMPLE 디렉토리에 ROM 샘플이 있으니 참고하시구요.
-> 0BGM.ROM, 0HANGUL.ROM, 0HELLO.ROM, 0TETRIS.ROM
아래는 blueMSX에서 0HANGUL.ROM을 실행한 모습입니다.
롬 카트리지를 만들 때에는 넌매퍼 타입의 보드를 사용하면 되겠습니다.
48KB로 빌드된 ROM과 VRAM data 16KB를 붙여서 64KB의 롬 카트리지도 가능하구요.
마지막으로,
HI-TECH C 패키지 전체를 받으시려면, 아래의 오늘자 release 링크를 이용하셔요!
https://github.com/sharksym/CPMEMU_HI-TECH_C/releases/tag/2024-12-03
그럼, 이만...
댓글 없음:
댓글 쓰기