에뮬레이터 공부 질문

redrow99의 이미지

안녕하세요

c언어랑 자료구조 알고리즘 정도 알고있는 초보인데요..

독학이구요..ㅠㅠ

제가근데 xmame 같은 에뮬레이터 게임구동해주는 프로그램을 만드는쪽으로

공부해보고싶은데 뭘 공부해야할지 물어볼 아는사람도없고 모르겠어서..

뭘공부해야할지 조언점 부탁드려도 될까요 답변부탁드려요

세벌의 이미지

https://linux.die.net/man/6/xmame

뭘 공부해야할지 모른다면 영어를 공부하시라고 말씀드리겠습니다.

구글에서 xmame 찾아보셔요.

.의 이미지

에뮬레이터도 종류마다 다양하지만, mame 같은 에뮬레이터는 규모가 큰 편이죠.
이런 거대한 프로젝트는 대부분 새로운 개발자가 접근하기 그렇게 수월하진 않습니다.
즉 모든 파트를 다 알고 가는 건 애초에 상당히 힘듭니다.
리눅스 커널 같은 프로젝트도 한 명이 모든 파트를 아는 게 아니듯이요.

특히 mame 같은 경우 너무나 다양한 기판을 에뮬레이팅하기 때문에
더더욱 그런 면이 있습니다. 또 커널에 비유하면 거의 개개의 드라이버 소스같은 거죠.

당연하지만 일단 해당 프로젝트에서 사용하는 언어를 잘 알야아 합니다.
mame 의 경우 C++ 이니 일단 일반적인 C++ 소스 해독에 무리가 없어야 하고요.

그리고 에뮬레이터의 경우 결국 가장 중요한 핵심 요소는 두가지입니다.

1. 에뮬레이팅 대상 하드웨어 구조
2. 에뮬레이터를 실행하는 컴퓨터의 구조

1번은 당연한 거고, 2번의 경우 좀 더 정확히 말하면 에뮬레이터마다 다릅니다.
2D 게임만 있는 하드웨어를 에뮬레이팅하면 경우가 좀 다르지만, 3D 가 필요할 경우
대부분 현대 GPU 로 렌더링이 가능하도록 구현을 합니다. 속도 문제도 있고 하니.
당연히 그냥 되는게 아니기 때문에, 결국 현대의 GPU 및 DirectX 나 OpenGL 등을
잘 알아야 합니다. 그냥 현대 하드웨어에서 게임 개발하는것보다 더 깊게 들어가야 하죠.

저도 정확히는 모르지만, mame 는 굳이 속도를 위해 고레벨 에뮬레이션을 하는 경우는
거의 없다고 알고 있습니다. 따라서 2번의 중요성이 비교적 낮기는 합니다. 거기다
지원하는 아케이드 게임의 대다수가 2D 이기도 하고요.

그리고 1번의 경우 뭐 너무나 당연한 거라 굳이 말 할 필요도 없겠지요.
대상 하드웨어의 구조 및 동작 관련 문서를 달달 외워야 됩니다. 어느 정도
노가다성이긴 한데 당연히 수월하게 이해하려면 결국 기반 지식이 필요합니다.

그리고 이게 준비가 되었다면 다음은 결국 대상 프로젝트 소스 분석입니다.
어차피 전부 다 볼수는 없으니, 일단 프로젝트에서 제공하는 docs 를 달달 외우고
본인이 작업하고싶은 파트를 정하고 그것에 필요한 소스를 하나씩 분석해가는 식으로
하면 됩니다.

사실 개인적으로 시작부터 mame 같은 걸 분석하는 건 별로 권장하지 않고요.
그나마 가장 간단한 Gameboy 에뮬레이팅 같은걸 먼저 해보시길 권합니다.
구글에 찾아보면 바닥부터 게임보이 에뮬레이터를 만드는 괜찮은 글도 있었던거 같네요.

Stephen Kyoungwon Kim@Google의 이미지

저는 보통 일을 시작할 때 높은 추상 수준에서 어느 정도 이해를 한 다음 제가 하고자 하는 특정 프로젝트의 세부 사항을 보기 시작하는 편입니다.

에뮬레이터는 아마 게이밍 머신 하드웨어의 ISA와 I/O를 호스트 머신(에뮬레이터를 돌리는 머신)의 하드웨어 ISA 및 I/O로 맵핑하는 것으로 볼 수 있을 것 같습니다.

최소한 어셈블리 언어 수준에서 보이는 컴퓨터 구조를 이해하셔야 할 것 같구요, 다음으로는 당시 게이밍 머신에서 I/O가 어떤 식으로 처리되어야 하는지 이해할 필요가 있을 것 같습니다. 다음으로 이 I/O가 호스트 머신의 I/O로 어떻게 구현될지 이해하는 것이 필요하구요. 마메의 경우 롬파일을 돌리는 걸로 기억하는데, 이 경우 각 게임의 소스 코드는 없고 바이너리 뿐일 거예요. 보통 이 바이너리를 하나 하나 읽어서 호스트머신 컴퓨터 명령어로 번역하는 게 가장 소박한 방식입니다. 그런데 만약 호스트 머신에 100만번 수행되는 루프가 있다면, 이걸 100만번 파싱하고 호스트 머신 인스트럭션으로 번역하는 건 별로 바람직하지 않을 겁니다. 여러 가지 최적화 기법이 다양한 맥락에서 존재하는데, 아래 책이 출판된 지는 오래 되었지만 고전으로 가치는 충분한 것들 중의 하나 같습니다.

https://www.amazon.com/Virtual-Machines-Versatile-Platforms-Architecture/dp/1558609105/ref=sr_1_3?keywords=virtual+machine&qid=1577927887&sr=8-3

모든 부분이 다 게이밍 머신 에뮬레이터와 관련이 있지는 않습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.