문제

나는 게임에 VM을 구축하려고 노력하고 있으며, 누군가가 로봇, 모터, 모터, 모터 제어와 같은 임베디드 프로젝트에 일반적으로 사용되는 정말 간단한 VM (RISC/PIC가 내가 원하는 것에 가깝다고 생각하고 있음)을 알고 있는지 궁금해하고있었습니다. 센서 등. 내 주요 관심사는 내 자신을 굴려면 컴파일러/어셈블러를 작성해야한다는 것입니다. 이미 나가거나 가장 간단한 형태의 도구를 사용하는 것이 좋습니다.

나는 여기에서 바퀴를 다시 발명하고 싶지는 않지만 가상 세계를 돌아 다니는 수천 개의 이들이 필요하므로 가능한 한 간단하고 빠르게 있어야합니다. 한 사람이 이미 언급했듯이 나는 또한 타이밍과 버스와 그 모든 재미있는 것들을 실제 세계 문제에 신경 쓰지 않습니다. 나는 그들의 가상 시계가 아주 느리게 제한 될 것이라고 생각합니다. 그리고 결국 나는 아마도 더 빨리 실행하기 위해 기본 컴파일을 살펴 봐야 할 것입니다. 그러나 지금은 일반적인 개념 증명을 얻기 위해 프로토 타입을 모았습니다.

입력으로서, 원통형 몸체 (16, 아마도 32 개) 주위에 장착 된 거리, 조명, 재료 및 터치 센서를 계획 한 다음 방향 출력을 위해 2 개의 모터를 사용하여 양쪽에 일종의 휠을 제어합니다. 본질적으로 처리는 너무 힘들지 않으며 세상은 단순한 작업에서 많은 처리 능력을 던질 필요가 없도록 세계가 충분히 간단 할 것입니다.

기억의 관점에서, 나는 그들이지도를 구축하고 통계를 수집하기 위해 개입하지 않고 며칠 동안 충분한 데이터를 홀로 남겨두기를 원합니다. 나는 8 비트가 처리 나 메모리를 위해 그것을 자르는 것을 좋아하지 않지만 16 비트는 분명히 경쟁자 일 것이다. 32와 64 비트는 단지 그것을 밀어 붙일 것이며 각 메모리의 1MB 이상을 가질 수있는 방법은 없습니다. 아마도 256-512K에 가깝습니다. (Bill One은 640K가 충분할 것이라고 말했다.

도움이 되었습니까?

해결책

현실 세계에 뿌리를 둔 것을 원한다면 가장 많이 포함 된 RISC 마이크로 컨트롤러 중 하나는 PIC 가족입니다. Google은 여러 에뮬레이터를 제공하지만 소스가 가장 많이 사용할 수 있다고 생각하지 않습니다.

또 다른 가능성은 QEMU이며, 이미 여러 팔 품종을 모방합니다.

물론 실제 장치를 모방하는 데 관심이 없다면 훨씬 쉽고 더 나은 성능은 자신의 것을 굴리는 것입니다. 필요한 것만으로도 주 깃발, 오버플로 비트, 제한된 버스 너비, 램 타이밍 등의 혼란에 빠지지 않습니다.

다른 팁

나는 썼다 약 16K의 RAM이있는 임베디드 컨트롤러에서 VM 언어를 실행하려는 친구에게. (그러나 코드에서 프로세스 당 최대 64k를 허용합니다.) 멍청한 작은 프로그래밍 언어를위한 컴파일러가 포함되어 있습니다. 그것은 전부입니다. 꽤 기본적이며 많은 사용을 보지 못했지만 첫 번째 단락에서 묘사 한 것입니다.

"가상 머신"은 그들이 오는 것만 큼 단순합니다. 16 비트 주소 공간 (일반적으로), 16 비트 데이터 단어, 두 개의 스택, 메모리. Loeliger의 "Threaded Interpretive Languages"는 Z80에서 Forth 통역사를 구축하는 방법에 대해 많은 것을 알려줍니다.

간단한 것을 원한다면 맨체스터 마크 I를 고려하십시오. 15 페이지를 참조하십시오. 이 PDF. 기계에는 7 개의 지침이 있습니다. 통역사를 쓰는 데 약 1 시간이 걸립니다. 불행히도, 지침은 매우 Dang Limited입니다 (이는 기계의 전체 사양이 한 페이지에 적합 할 수있는 이유입니다).

자비에르의 자신을 굴리는 접근 방식은 매우 실용적입니다. 작은 기계를 디자인하고 만드는 것은 이틀 동안의 작업입니다. 나는 몇 년 전에 프로젝트를 위해 작은 VM을 만들었고 간단한 시각적 디버거로 VM을 작성하는 데 이틀이 걸렸습니다.

또한 - RISC 여야합니까? 당신은 68K를 선택할 수 있습니다. 오픈 소스 에뮬레이터, 68K는 GCC의 잘 이해 된 목표였습니다.

많은 사람들이 게임 프로그램 및 기타 응용 프로그램을 작성하면 사용자가 소규모 프로그램을 작성할 수 있도록 응용 프로그램에 언어를 포함합니다.

내가 알 수있는 한 가장 인기있는 임베디드 언어 매우 인기있는 가장 인기있는 첫 번째 순서 ( "더 인기있는"은 반드시 "더 나은"것을 의미하지는 않지만) :

  • 이 하나의 특정 응용 프로그램에 대해 도메인 별 언어 사용자 정의 디자인 및 기타 어디에도 사용되지 않습니다.
  • 루아
  • TCL
  • 파이썬 , 종종 Pymite와 같은 단순화 된 서브 세트
  • 앞으로
  • 자바 스크립트
  • LISP
  • 천사 스크립트
  • xpl0
  • 다람쥐
  • Haskell
  • NPCI (나노 의사 C 해석)
  • 로봇 토크
  • 일부 하드웨어 기계 언어 해석 (왜 이것이 가장 인기가 가장 적은 선택입니까?

Gamedev StackexChange, 특히 다음과 같은 질문을 확인할 수 있습니다. "게임에 스크립팅 언어를 어떻게 추가합니까?".

StackoverFlow 태그에서 여기에서 몇 가지 질문을 확인할 수 있습니다. "내장 언어"; ~와 같은"임베디드 언어 선택", "내 소프트웨어 내부에서 스크립팅에 사용할 수있는 좋은 임베드 가능한 언어는 무엇입니까?" "임베디드 언어로서 루아의 대안?" "어떤 게임 스크립팅 언어를 사용하는 것이 더 좋습니다 : Lua 또는 Python?", 등.

이러한 언어의 많은 구현은 일종의 사용을 사용합니다바이트 코드 내부적. JavaScript와 같은 동일한 고급 프로그래밍 언어의 두 가지 구현은 종종 완전히 다른 두 가지 바이트 코드 언어를 사용합니다 ( ). 종종 여러 고급 프로그래밍 언어가 동일한 기본 바이트 코드 언어로 컴파일됩니다. 예를 들어, Python의 Jython 구현, JavaScript의 Rhino 구현, TCL, JSCheme의 JaCl 구현 및 여러 제도 구현 및 여러 구현 Pascal; 모든 JVM 바이트 코드로 컴파일합니다.

세부

하드웨어 기계 언어를 해석하는 대신 스크립팅 언어를 사용하는 이유는 무엇입니까?

"대체 하드 및 소프트 레이어"? 단순성과 더 빠른 개발을 얻기 위해.

더 빠른 개발

사람들은 일반적으로 컴파일 된 언어보다는 스크립팅 언어로 더 빨리 작업하는 것입니다.

초기 프로토 타입 작업을 얻는 것이 일반적으로 훨씬 빠릅니다. 통역사는 기계 언어가 명시 적으로 쓸 수있는 비하인드 스토리를 처리합니다. 변수의 초기 값을 0, 서브 루틴 프롤로그 및 서브 루틴 에피 로그 코드로 설정합니다. , malloc 및 realoc 및 무료 및 관련 메모리 관리 제품, 컨테이너가 가득 차있을 때 컨테이너의 크기를 증가시키는 등.

초기 프로토 타입이 있으면 새로운 기능을 추가하는 것이 더 빠릅니다. 스크립팅 언어에는 편집 컴파일-excute-debug주기의 "컴파일"단계를 피하기 때문에 스크립팅 언어에는 빠른 편집-excute-debug주기가 있습니다.

간단

우리는 임베디드 언어가 두 가지 방식으로 "단순"되기를 원합니다.

  • 사용자가 개념적으로 사소한 작업을 수행하는 작은 코드를 작성하려면 "Hello, $ User를 작성하기 위해 20 파운드의 책과 몇 달의 공부를하는 복잡한 언어 로이 사람을 놀라게하고 싶지 않습니다. "버퍼 오버플로가 없다.

  • 우리는 언어를 구현하고 있기 때문에 구현하기 쉬운 것을 원합니다. 아마도 우리는 주말에 간단한 통역사를 두 드릴 수있는 몇 가지 간단한 기본 지침 일 것입니다.

사람들이 CPU를 구축 할 때 하드웨어 제한은 항상 명령어 세트를 제한하게됩니다. 많은 개념적으로 "간단한"운영 (사람들이 항상 사용하는 것)은 결국 많은 기계 언어 지침이 필요합니다.

임베디드 언어에는 이러한 하드웨어 제한이 없으므로 (인간에게) 개념적으로 단순 해 보이는 일을하는보다 복잡한 "지침"을 구현할 수 있습니다. 이것은 종종 시스템을 더 간단하게 만듭니다 둘 다 위에서 언급 한 방법 :

  • 언어로 직접 글을 쓰는 사람들 (또는 언어에 대한 컴파일러를 작성하는 사람들)은 코드를 덜 작성하여 코드 디버깅을 통해 한 번의 시간을 더 적게 소비합니다.

  • 이러한 상위 수준의 각각의 각각의 경우, 복잡성을 컴파일러에서 통역사 내부의 명령 구현으로 전환합니다. 컴파일러가 중간 언어의 짧은 루프로 일부 상위 수준의 작동을 중단하는 것보다 (런타임에 통역사에서 해당 루프를 반복적으로 밟는) 컴파일러는 중간 언어 (및 귀하의 귀하의 귀하의 귀하가 귀하의 중간 언어로 하나의 지침을 제출합니다. 해당 중급 "명령어"를 통역사의 구현에 동일한 일련의 작업을 작성하십시오). 편집 된 언어 ( "내부"복잡한 지침)로 구현 된 모든 CPU 집약적 인 것들이 매우 간단한 통역사가 종종 충분히 빠릅니다. (즉, JIT를 구축하거나 다른 방식으로 속도를 높이려고 많은 시간을 소비하지 않습니다).

이러한 이유와 다른 이유 때문에 많은 게임 프로그래머는 "스크립팅"언어를 "임베디드 언어"로 사용합니다.

(이제 Javier가 이미 "임베디드 스크립팅 언어 사용"을 이미 추천했다고 생각합니다. 이는 하드웨어 기계 언어를 해석하고 특정 스크립팅 언어가 적합하지 않은 경우 대안을 지적하는 좋은 대안입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top