Lobsters

ASM Bots: Core War in real 8086 machine code

ASM Bots: 실제 8086 기계어로 벌이는 코어 워

ASM Bots는 실제 8086 어셈블리로 전투 프로그램을 작성해 64KB 메모리 코어에서 겨루는 Core War 게임입니다. 한 명령씩 번갈아 실행하는 전투와 디버거, 순위전·토너먼트를 제공하며, 결정론적 실행으로 대전을 재생하고 검증합니다.

AI 요약

ASM Bots는 Core War의 전투 규칙을 8086 어셈블리 환경에 적용한 웹 프로젝트입니다. 참가자는 1바이트부터 4KB까지 다양한 크기의 봇을 작성하고, 64KB 코어에서 다른 봇과 겨룹니다. 별도 설치 없이 편집기에서 코드를 작성하고 디버거로 실행 과정을 살펴볼 수 있습니다.

코어와 실행 규칙

모든 봇은 각자 시작 주소를 받아 하나의 64KB 메모리 코어에 적재됩니다. CPU는 각 프로세스를 라운드로빈 방식으로 실행하며, 한 차례에 명령 하나씩 처리합니다. 0바이트 명령을 실행한 프로세스는 종료되고, spl 명령은 프로세스를 분기합니다. 봇 하나는 최대 64개 프로세스를 운용하며, 한 전투는 최대 100,000사이클 동안 진행됩니다.

이 시스템은 실제 8086 인코딩을 기반으로 한 명령어 집합 x16c를 사용합니다. 제작자가 공개한 설명에 따르면 8086에 세 가지 변경을 더했습니다. 0x00은 실행한 프로세스를 죽이는 DAT이고, 0x60부터 0x62까지는 프로세스를 분기하는 SPL 변형입니다. 메모리는 바이트 단위로 주소를 지정하고 명령어 길이는 가변입니다. 따라서 공격 코드가 명령어 한가운데에 기록되면, 해당 위치부터 다른 명령으로 다시 해석될 수 있습니다. 이런 특성이 전략의 일부가 됩니다.

작성·전투 도구

편집기는 입력하는 즉시 코드를 어셈블하고, 봇 크기 제한을 넘는 줄을 표시합니다. 디버거에서는 명령어를 한 단계씩 앞뒤로 이동하며 레지스터와 메모리에 기록한 바이트를 확인합니다. 커뮤니티 글에 따르면 중단점, 감시 항목, 실행 추적 기능과 최대 256단계 되감기도 지원합니다.

아레나에서는 두 봇이나 여러 봇을 한 코어에 올려 전투를 볼 수 있습니다. 본문은 최대 여덟 봇을 함께 불러올 수 있다고 설명하고, 제작자는 커뮤니티 댓글에서 최대 16개 봇이 하나의 코어를 공유한다고 밝혔습니다. 전투 화면은 초당 60프레임으로 갱신됩니다. 같은 봇과 시드로 실행하면 결과가 같아 링크로 대전을 재생할 수 있습니다. 제작자는 브라우저, CLI, Cloudflare Worker에서 같은 전투 해시가 나오며 클라이언트에서 리플레이를 검증한다고 설명합니다.

순위전과 구현

힐(Hill)에 봇을 제출하면 등록된 봇과 대결하고, 순위가 점수가 됩니다. 가중치 등급별 힐과 주간 챔피언십도 운영합니다. 토너먼트 형식으로는 대진표, 라운드로빈, 난전이 제공됩니다. 점수 산정에는 pMARS 스타일 방식과 Glicko-2 레이팅을 사용한다고 제작자가 밝혔습니다.

게임 엔진은 TypeScript로 작성했으며, 서비스는 Cloudflare Workers, D1, Durable Objects, R2, KV를 사용합니다. 소스 코드는 MIT 라이선스로 공개돼 있습니다. 제작자는 현재 힐이 초기 단계라 좋은 봇이 상위권에 오를 여지가 있다고 설명하며, 특히 명령어 집합 설계에 관한 의견을 요청했습니다.

Lobsters 반응

  • @sirbrightool — Core War를 처음 읽었을 때부터 이런 걸 만들어보고 싶었습니다. ASM Bots에서는 Redcode 대신 실제 8086 어셈블리(NASM 문법)로 전사를 작성합니다. 최대 16개 봇이 64KB 코어를 공유하고, 마지막까지 실행 중인 봇이 이깁니다. 설계 관련 내용을 몇 가지 덧붙이겠습니다. 명령어 집합 x16c는 세 가지 변경을 문서화한 8086 자체 인코딩입니다. 0x00은 DAT라서 실행한 프로세스가 죽고, 0x60부터 0x62까지는 프로세스를 분기하는 SPL 변형입니다. ndisasm -b 16으로 모든 봇을 읽을 수 있습니다. 코어는 바이트 단위로 주소를 지정하고 명령어 길이는 가변이므로, 폭탄이 명령어 중간에 떨어지면 그 위치부터 다른 명령어로 재해석됩니다. 전략의 상당 부분이 여기서 나옵니다. 엔진은 결정론적인 TypeScript입니다. 브라우저, CLI, Cloudflare Worker에서 같은 전투가 같은 해시를 내며, 리플레이는 클라이언트에서 검증합니다. 브라우저 편집기와 디버거에는 중단점, 감시 항목, 추적, 256단계 되감기가 있습니다. 힐은 pMARS 스타일 점수와 Glicko-2 레이팅을 사용하고, 대진표와 주간 챔피언십도 운영합니다. Cloudflare Workers, D1, Durable Objects, R2, KV에서 실행합니다. 소스 코드는 MIT 라이선스입니다. 힐은 아직 초기 단계라 좋은 봇이 정상에 오를 수 있습니다. 특히 명령어 집합 설계에 대한 의견을 듣고 싶습니다.

원문: ASM Bots / 번역·요약: Trawling