Just a Blog

Apple II 에뮬레이터인 'Apple2ix'가... 본문

Game

Apple II 에뮬레이터인 'Apple2ix'가...

wehong 2022. 1. 13. 01:09

예전에 여러 환경에서 Apple II 에뮬레이터를 소개하는 글을 올린 적이 있다.

 

'Apple II 에뮬레이터'들을 살펴 보다

검색하다가 우연히, 과거 가정용 게임기 '재믹스'의 새로운 복각판이 발표되었다는 기사를 보게 되었다. 재믹스의 기반인 MSX 플랫폼으로는 '재믹스 미니', '재믹스 슈퍼 미니' 뿐 아니라 'One Chip M

wehong.tistory.com

그런데 그 후 언젠가, 안드로이드 환경에서 사용할 수 있던 무료 에뮬레이터인 'cAndy Apple' 및 'Apple2ix'가 구글 플레이 스토어에서 사라졌다. 구글 플레이 스토어를 통해 설치할 수 없고 APK 파일 설치의 형식(APK 설치는 보안 문제로 추천하지 않는 방법이다)으로만 사용할 수 있게 된 것이다.

 

Apple2ix는 개인적으로 AppleWin, AppleInPC와 함께 매우 선호하는 Apple II 에뮬레이터이다. 안드로이드에서 구동 가능해서 스마트폰이나 태블릿에서도 구동될 수 있다는 장점도 있고, 화면과 사운드 표현도 여타 에뮬레이터에 비해 매우 준수하다. 특히 Color CRT TV 효과는 매우 강력해서, Apple II 에뮬레이션 전용 머신이 있다면 그 머신은 Windows 기반 아니면 안드로이드 기반이여야 한다고 생각하기도 했다.

 

아쉬움에 'Apple2ix'를 검색하다가 제작자 사이트로 보이는 곳(https://deadc0de.org/)을 발견했는데, 거기에 Apple2ix의 내용(https://deadc0de.org/apple2ix/)이 있었다. 제작사로 보이는 사이트 주인은 Apple2ix의 안드로이드 버전 페이지와 소스 코드를 올린 GitHub 페이지를 공개해 놓았다.

인상적인 것은 소개 페이지에 유닉스 계열 OS(UN*X)에서도 구동할 수 있다고 소개하고 있다는 것인데, 더 놀라운 것은 GitHub 페이지의 소스 코드를 보면 UN*X 소스 코드는 물론이고 안드로이드 프로젝트 파일과 macOS의 Xcode 프로젝트 파일까지 마련해 놓고 있다는 점이다. 그래서 GitHub에서 소스를 내려 받아 리눅스와 macOS에서 빌드를 시도해 보았다.

 

일단 빌드 과정에 대한 설명이 부족해서 많이 곤란했다. macOS에서는 Xcode 프로젝트 파일을 읽어 빌드 하는데, 'rom.c' 파일이 없다고 에러가 발생했다. 리눅스에서는 autoconf와 flex를 추가로 설치하고 'reconf.sh' 실행과 './configure' 명령으로 Makefile을 만들었는데, make 하는 과정에서 'apple_iie_rom'과 'slot6_rom'이 없다고 중단되었다. 두 경우 다 롬 파일을 통해 C 파일을 만드는 과정이 없어서 그런 것인데, 이것에 대한 설명이 README 등 어느 파일에도 없었다('src/rom/'에 롬 파일을 두면 'genrom'이 롬 파일을 rom.c로 변환한다).

그냥 X11 기반으로 빌드할 수도 있지만, 그래픽 품질과 성능이나 사운드 재생을 위해서 OpenGL과 OpenAL 라이브러리를 포함해 빌드하는 편이 나았다.

결과는, macOS 쪽에서는 UI만 뜨고 에뮬레이션이 안되었고 리눅스 쪽에서는 일단 동작을 하는 수준으로 만들었다. 리눅스 쪽에서의 동작에 대해 기대가 컸는데, 리눅스에서 동작 가능한 linapple와 그 fork 에뮬레이터는 화면 효과가 마음에 안들었으니 Apple2ix가 리눅스에서 동작한다면 그 점을 보완할 수 있을 것 같았기 때문이다.

 

 

실제로 여러가지를 테스트 해 보니 리눅스에서 꽤 괜찮은 느낌을 받았다. 자세히 소개하면 다음과 같다.

 

1. 화면

화면 표현 방식은 안드로이드 Apple2ix와 비슷한 방식이어서 만족스럽다. linapple의 화면이나 MicroM8의 화면과는 비교할 수 없을 정도로 발군이다. 처음에 색상이 이상해 오류가 있다고 생각했는데, OpenGL 라이브러리를 사용해서 빌드 하니 색감이 정상으로 돌아왔다.

화면 표현은 이 에뮬레이터에 대해 호감을 갖게된 가장 큰 이유인데, 타 에뮬레이터와의 비교 내용은 별도의 글에서 소개한다.

 

2. 사운드

처음 빌드 시에는 소리가 전혀 나지 않았는데 OpenAL 라이브러리를 사용해서 빌드하니 스피커 소리를 들을 수 있었다. Mocking Board는 기본으로 슬롯 4, 5번에 할당되어 있고 잘 된다.

 

3. 디스크 읽기/쓰기

안드로이드용 Apple2ix의 단점 중 하나가 디스크 읽기에 시간이 많이 소요된다는 것이었다(앱의 설정에 실험적(experimental) 기능으로 디스크 입출력 속도를 올리는 옵션은 있었다). 리눅스에 빌드한 버전도 그에 못지 않은 시간이 소요되었다. X11 기반으로만 빌드하면 디스크 읽기/쓰기 상태를 알 수 없어 시스템이 멈춘 게 아닌가 의심이 될 때도 있었는데, OpenGL로 빌드하고 나니 안드로이드 Apple2ix 앱에서 처럼 디스크 읽기/쓰기 상태가 표시되어 상황을 알 수 있게는 되었다. 소스를 컴파일 할 때 DISK_TRACING과 CONFORMANT_TRACKS 정의(definition)를 빼고 TESTING 정의를 활성화시키도록 컴파일 해 봤는데, 속도가 조금은 나아진 것 같지만 타 에뮬레이터에 비해 여전히 느린 것 같다.

디스크 이미지를 선택할 때, 파일을 그냥 'Enter' 키로 선택하면 읽기 모드여서 쓰기가 안되므로 쓰기가 필요하다면 'W' 키를 눌러 디스크 이미지 파일을 선택해야 한다.

한 가지 더 아쉬운 점은 하드디스크(HDD) 이미지를 지원하지 않는다는 점이다.

 

4. 인터페이스

터미널에서 X윈도우로 구동하는 형식이라서 메뉴와 설정 인터페이스가 텍스트 기반이다.

macOS의 경우 AppleWin 수준으로 GUI가 갖추어져 있기는 하다.

 

5. 성능

리눅스에서 에뮬레이터를 실행시키고 'Snake Byte'를 실행시켜 봤는데, Windows OS의 AppleWin이나 안드로이드의 Apple2ix 수준으로 플레이 할 수 있었다. 처음에는 입력이 늦게 되는 것이 아닌가 싶었는데, 다른 에뮬레이터와 비교하니 비슷했다.

동일 환경(Ryzen 3 프로세서, 8GB RAM)의 노트북에서 Windows 10의 AppleWin과 Ubuntu 18.04 리눅스의 Apple2ix 성능은 비슷하게 느껴졌다(아래 이미지 처럼 Snake Byte에서 Level 5까지 진행할 수 있을 정도로 문제가 없었다).

 

 

총평을 해보면, 리눅스에서 linapple이나 MicroM8의 Apple II 화면 에뮬레이션에 아쉬움을 느꼈다면 사용해 봄 직하다고 생각한다. 개인적으로 리눅스 환경에서는 가장 마음에 드는 에뮬레이터이다. 이 정도이면 리눅스에서도 AppleWin 수준의 Apple II 에뮬레이터를 비로소 갖게 되었다고 생각한다.

macOS 버전은 정상적으로 빌드가 안 되어 평을 하기 어렵고, 안드로이드 버전은 직접 빌드한 것은 아니지만 예전 구글 플레이 스토어에 있던 앱을 기준으로 보면 훌륭했다.

 

 

((업데이트: 21.1.17))

여러 리눅스(Ubuntu) 머신에서 빌드해 봤는데, 몇몇 머신에서 빌드 완료 후 실행 시 OpenGL Shader 관련한 ASSERT 경고로 실행이 안되는 현상이 있었다. '(sudo) make install'을 실행하지 않고 'make'로 만들어진 실행파일을 실행시키려다 보니 그런 현상이 발생했다. 'make' 후 '(sudo) make install' 까지 완료하고 '/usr/local/bin'에 있는 'apple2ix' 파일을 실행하는 것을 추천한다.

대략적인 리눅스 타켓 빌드 절차는,

(1) GitHub 클로닝

(2) 'apple2' 디렉토리가 있는 디렉토리('apple2' 내부 아님)에 'apple2-rom' 디렉토리와 'apple2-images/disks' 디렉토리 생성

(3) 'apple2-rom' 디렉토리에 롬 파일('apple_IIe.rom', 'slot6.rom') 위치

(4) 'apple2-images/disks' 디렉토리에 'apple2/disks'에 있는 파일들 모두 복사

(5) OpenGL 및 OpenAL 등 관련 라이브러리 설치 (zlib1g-dev, mesa-common-dev, freeglut3-dev, libglu1-mesa-dev, libglew-dev, libopenal-dev)

(6) 'apple2' 디렉토리에서 'reconf.sh'을 실행하여 config 파일 생성 (필요시 autoconf 설치 필요)

(7) 'apple2' 디렉토리에서 './configure'를 실행하여 Makefile 생성 (configure 결과에서 video/audio renderer에 OpenGL, OpenAL이 설정되었는지 확인)

(8) make

(9) sudo make install

 

Comments