Tự chơi Contra NES ngay trên trình duyệt: dự án port từ hợp ngữ 6502 sang C rồi WebAssembly

Công nghệ31 tháng 10, 2026·3 phút đọc

Một lập trình viên đã chuyển toàn bộ game Contra (1987) trên NES từ hợp ngữ 6502 sang C, sau đó biên dịch sang WebAssembly để chạy trực tiếp trong trình duyệt. Điểm nhấn là chế độ chơi co-op hai người qua Internet, cùng quy trình kiểm thử từng khung hình so với bản gốc trên giả lập Mesen.

Tự chơi Contra NES ngay trên trình duyệt: dự án port từ hợp ngữ 6502 sang C rồi WebAssembly

Cộng đồng lập trình viên vừa chứng kiến một dự án hoài cổ đáng chú ý: toàn bộ game Contra (1987) trên hệ máy NES được chuyển từ hợp ngữ 6502 sang ngôn ngữ C, rồi tiếp tục biên dịch sang WebAssembly để chạy mượt trong trình duyệt. Không chỉ dừng ở việc "chơi lại ký ức", bản port còn bổ sung chế độ co-op hai người qua Internet.

Hai bước chuyển đổi đầy công phu

Nền tảng của dự án là bản dịch ngược mã nguồn (disassembly) có chú thích chi tiết do vermiceli thực hiện và công bố trên GitHub. Từ đó, tác giả tiến hành port theo hai giai đoạn rõ ràng:

  • Bước 1 — từ hợp ngữ sang C: logic game được dịch từng routine một từ mã 6502 gốc, thay vì viết lại theo cảm hứng.
  • Bước 2 — từ C sang WebAssembly: mã C sau khi hoàn thiện được biên dịch sang Wasm để chạy trong trình duyệt mà không cần giả lập.

Điểm đáng nói là quy trình kiểm thử. Tác giả đối chiếu từng khung hình giữa bản port và bản gốc chạy trên giả lập Mesen — một trong những giả lập NES chính xác nhất hiện nay. Cách làm này giúp đảm bảo hành vi của game, từ tốc độ di chuyển đến va chạm và logic kẻ địch, không bị lệch so với bản gốc.

Việc dịch từng routine và so khớp theo khung hình là minh chứng cho thấy đây không phải bản "làm lại cho vui" mà là một bản port trung thành về mặt kỹ thuật.

Chơi co-op hai người qua mạng

Phần "cherry on top" — như cách tác giả gọi — chính là multiplayer trực tuyến. Hai người chơi có thể vào co-op với nhau qua Internet: một người chọn Host online 2-player game, người còn lại nhấn Join, sau đó chia sẻ liên kết mời.

Về điều khiển, cả hai người chơi dùng chung một bộ phím trên máy của mình:

  • Phím mũi tên để di chuyển
  • A hoặc Space để nhảy
  • S để bắn
  • Enter là Start, Shift là Select

Trên thiết bị di động, giao diện hiển thị nút cảm ứng với A là nhảy, B là bắn. Ở màn hình tiêu đề, người chơi 1 chọn 2 PLAYERS bằng phím Shift để kích hoạt chế độ hai người.

Góc nhìn cho người chơi Việt Nam

Với những ai từng lớn lên cùng chiếc máy điện tử 4 nút và những quán game nhỏ trong ngõ, Contra là cái tên gắn với vô số ký ức — từ màn thác nước đến màn đếm ngược thoát khỏi căn cứ. Điều thú vị là giờ đây không cần giả lập, không cần ROM, không cần cấu hình máy: chỉ cần một trình duyệt là có thể chơi.

Dự án cũng là ví dụ điển hình cho sức mạnh của WebAssembly trong việc đưa các ứng dụng "nặng" vốn chỉ chạy native lên web, với hiệu năng gần như gốc. Đây là hướng đi mà nhiều nhà phát triển game và ứng dụng đang quan tâm, đặc biệt khi nhu cầu chơi game trên trình duyệt và thiết bị yếu ngày càng tăng.

Mã nguồn của dự án được công bố mở, cho phép cộng đồng tiếp tục nghiên cứu, tối ưu hoặc học hỏi từ cách tiếp cận "dịch từng routine, kiểm thử từng khung hình" — một phương pháp đáng tham khảo cho bất kỳ ai muốn port game cổ điển lên nền tảng mới.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗