2023. 4. 26. 02:05

삼국지3의 Intro에서 사용되는 한글 추출하는 방법.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요.

Dosbox-X를 활용해서 삼국지 3의 Intro에서 사용되는 한글을 추출 하는걸 기록 해볼까 합니다.

log.txt
0.07MB

첨부된 Log 파일은 도스에서 발생되는 interrupt중 제가 관심있는 것만 Log를 찍게 해뒀습니다.

그러면 도스 부팅후 koei.com 실행 후 한글을 찍는 것에 대해 이야기 해보겠습니다.

위의 이미지에서 최초 실행되는 koei.com를 실행 하게 되면, INT 21, 4B가 호출되며 해당 파일이 Load 됩니다.

 

여기서 all_font.16p 파일이 먼가 싶어서 찾아 보니, koei에서 사용 하는 폰트 파일입니다.

github에 있는 all_font.16p의 내용.

파일 실행 후 여러파일을 open 하는데, 그중 하나가 font 파일입니다.

이제 그 font 파일을 토대로 한글을 찍는 원리에 관해 적어 보겠습니다.

위에서 open 된 font 파일의 핸들을 얻어서 해당 파일의 36122의 위치로 이동한다는 뜻입니다.

이후 INT 21,3F를 통해서 28 bytes를 읽어 들인다는 뜻입니다.

https://stanislavs.org/helppc/int_21-3f.html 를 토대로 AX의 log에 찍어보니 28 이 나오네요.

HEX Editor를 이용해서 36122의 HEX인 8D1A 부터 28 bytes를 뽑아 봤습니다.

보통 FONT는 8 * 8, 16 *16 비트로 되어 있어서, 8 bytes , 16 bytes 이렇게 올라가는데, 이건 28  bytes로 처리가 되어있네요.

참고로 앞부분의 2 바이트는 나머지 28바이트를 화면에 그릴때 left, right 비트 설정에 연산에 이용됩니다.

그래서 위의 INT 21, 42를 통해서 얻은 POS의 값들을 모아서 직접 all_font.16p에서 찾아봤습니다.

그리고 그 값을 SDL2로 그려보니 결과값은 이와 같습니다.

 

아직 테스트 버전이라서 콤마, 스페이스가 빠지네요.

예전부터 궁금했었던 내용을 이제라도 알게 되어서 다행입니다.

해당 폰트의 사용되는 전체 내용은 아래와 같습니다.

참고로 한 줄당 찍히는 글씨는 64개 입니다.

최초 '고' 의 위치를 계산 해보면  19열의 53번째에 위치해 있습니다.

즉 18 * 64 =  1152 에서 53번째를 더 더하게 되면 1205 번째가 됩니다. 

처음 시작된 바이트가 36122 이고 여기에 30 바이트씩 계산하게 되면 1204번째 다음이 1205 번째가 나옵니다.

이런식으로 순서대로 계산을 하면 될꺼 같습니다.

감사합니다.