Retro Game & PC/매뉴얼 팁 작업

Apple2 도트 프린터 출력 에뮬레이션 (영문 텍스트, 그래픽 프린트)

smores 2023. 12. 7. 15:09

드디어 엡슨 ESC/P 인터프리터에 해당하는 파이썬 프로그램을 찾았다.

 

https://github.com/MurphyMc/EPHEX-80/tree/master

 

GitHub - MurphyMc/EPHEX-80: Epson FX-80 (and compatible) printer emulator

Epson FX-80 (and compatible) printer emulator. Contribute to MurphyMc/EPHEX-80 development by creating an account on GitHub.

github.com

 

 

안타깝게도 Python 2.x 버전으로 개발된 상태이다. 하지만 나의 경우 아나콘다(python 3.6 대응 옛 버전)를 쓰기에 간단히 python 2.7 용 가상환경을 만들어서 쉽게 사용할 수 있었다. 개인적으로는 파이썬의 프로젝트별로 가상환경을 구축하는 것 보다, 개발 환경 자체를 원하는 버전의 파이썬 또는 라이브러리로 구축하는 아나콘다가 더 맘에 든다. 현재 파이썬 3.10과 이번 기회에 2.7 용 가상환경을 만들어 놓은 상태.

 

일단 Apple2 의 프린터 출력을 파일로 덤프를 해서 사용해야 하는데, 텍스트 기반의 프린트, 예를 들어 카타로그나 프로그램 리스트 등을 출력하는 경우는 AppleWin 이 편하다. 문제는 AppleWin 은 그래픽 바이너리 출력을 지원하지 못한다. 때문에 그래픽 출력(프린트샾, 중앙한글 등)은 MAME 의 apple2e 에뮬레이션으로 하면 잘 된다. 반면 MAME 의 경우 텍스트 프린트는 이상하게 바이트별 +128 만큼 큰 값으로 데이터를 출력했고, 이는 위의 EPHEX-80 으로도 바로 대응이 안되서 한번 데이터 컨버전을 해야 하기에 그럴 바에는 그냥 AppleWin 에서 텍스트 프린트 덤프를 하는 편이 편한 것으로 결론을 내렸다.

 

어쨌거나, 덤프된 파일은 일단 나의 경우 확장자 .PRN 을 붙여서 준비했고, 위의 라이브러리에서 ephex.py 에 입출력 파일 이름만 직접 부여할 수 있게 살짝 수정해서 돌리고, 변환 과정을 화면에 보여주지 않고 (일일히 프린트를 하면 시간이 많이 걸리기 때문) 파일로 저장한다. 저장된 파일은 SVG 벡터 그래픽 데이터인데 거의 대부분이 도트 위치만 정의하는 텍스트 파일이다.

 

이렇게 변환된 SVG 가 준비되면, 다음으론 SVG 에서 도트 위치 데이터만 추출해서 postscript -> PDF 로 바꿔준다.이를 위한 코드는 print_dump_svg_to_ps.py 이다. 

 

 

각 단계별로 조금 더 상세한 설명을 하자면

 

1. AppleWin 에서 파일로 프린트 내용 덤프하기 위한 셋팅

 

 

2. MAME 에서 프린트 내용을 파일로 덤프하기 위한 셋팅

 

 

 

3. PRN 을 SVG 로 변환한 결과의 예제

 

 

4. SVG 를 PDF 로 변환하는 작업 예시

 

 

 

5. print_dump_svg_to_ps.py 코드에서 셋팅에 주의할 부분

 

1) 반드시 PyPDF2 구버전 (2.0.0) 을 사용할 것. 신버전과의 호환성 문제가 있다. 라이브러리 설치시 pip install PyPDF2==2.0.0 로 하면 된다.

 

2) 반드시 ghostscript 와 gsview 를 설치해 놓고, 설치된 경로를 올바르게 셋팅해 놓아야 한다. 예를 들어 나의 경우 집에서는 gsviwer 9.27 을, 회사에선 9.26 버전을 설치해 놓았기에 거기 맞춰서 셋팅값을 조절해야 한다.

 

 

6. 생성된 PDF 의 사례들

 

영문 텍스트 - 프로그램 리스트 (엡슨 자체 폰트 에뮬레이션)

 

중앙한글 자체 폰트 그래픽 출력

 

 

프린트샾 멀티페이지 배너 출력

 

 

 

프로그램 코드와 실행 결과 (PRN, SVG, PDF 등)

Epson Dot Printer Emulation.zip
12.64MB