삼국지3의 Intro에서 사용되는 한글 추출하는 방법.
안녕하세요.
Dosbox-X를 활용해서 삼국지 3의 Intro에서 사용되는 한글을 추출 하는걸 기록 해볼까 합니다.
첨부된 Log 파일은 도스에서 발생되는 interrupt중 제가 관심있는 것만 Log를 찍게 해뒀습니다.
그러면 도스 부팅후 koei.com 실행 후 한글을 찍는 것에 대해 이야기 해보겠습니다.
위의 이미지에서 최초 실행되는 koei.com를 실행 하게 되면, INT 21, 4B가 호출되며 해당 파일이 Load 됩니다.
여기서 all_font.16p 파일이 먼가 싶어서 찾아 보니, koei에서 사용 하는 폰트 파일입니다.
파일 실행 후 여러파일을 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 번째가 나옵니다.
이런식으로 순서대로 계산을 하면 될꺼 같습니다.
감사합니다.
'습작 및 R&D' 카테고리의 다른 글
Hello World 가 .com 파일과 .exe 용량이 다른 이유. (0) | 2023.04.21 |
---|---|
DOSBOX 빌드 관련. (0) | 2023.04.20 |
ascii 에 할당된 캐릭터 값의 의미. (0) | 2023.04.12 |
CHIP8 Brix 관련 분석 내용. (0) | 2023.04.11 |
x86은 encoding 자체가 너무 복잡하네요. (0) | 2022.02.21 |