Lập trình game NES

Asm65816 viết

Dẫn nhập

Từ khi cho ra đời bản dịch Fire Emblem Việt ngữ đầu tiên trên hệ máy SNES vào đầu năm 2010 đến nay, có nhiều người đã hỏi tôi rằng “làm thế nào để dịch game ABC, XYZ…”. Mặc dù đã có một bài hướng dẫn về dịch game console (cũng như PC) đăng trên diễn đàn GameVN từ năm 2010, nhưng nhiều hình ảnh minh họa đã không còn nên gây ra sự khó hiểu đối với người đọc. Sau đó, tôi cũng đã viết một số bài hướng dẫn tập trung cụ thể vào những game nhất định như Resident Evil 5 (PC), Fire Emblem V, Final Fantasy IX (PlayStation) nhưng nhìn lại vẫn còn khá khó hiểu với đa số người đọc vì quá chuyên sâu vào một game nhất định và đặt tiền đề là người đọc đã có những nền tảng cơ bản nhất định.

Bí quyết của việc dịch/hack game là ở chỗ nắm rõ cách thức nó được viết ra, hay nói nôm na là ngôn ngữ lập trình của nó. Đối với các thế hệ console trước đây thì người ta không dùng các ngôn ngữ cao cấp như C để viết, mà sử dụng loại ngôn ngữ cấp thấp (ngôn ngữ giao tiếp với máy) gọi là Assembly (viết tắt là Asm) để viết. Dĩ nhiên là từng loại máy sử dụng từng loại Asm khác nhau, chẳng hạn máy NES sử dụng Asm6502, máy SNES sử dụng Asm65816,… nhưng chúng có nhiều ý niệm cơ bản tương đồng nhau. Vì vậy, loạt bài viết này giới thiệu đến bạn đọc từ cái nhìn tổng quát cho tới chuyên sâu vào ngôn ngữ Asm của NES thông qua những chương trình đơn giản (có thể chạy được bằng giả lập NES) để từ đó người đọc nắm bắt được những nét cơ bản, tạo dựng nền tảng và sự hứng thú để học hỏi tiếp ngôn ngữ ở các hệ máy khác như dòng PlayStation, dòng Xbox….
Dự định loạt bài này gồm hơn 20 bài, đi từ những nền tảng cơ bản nhất đến chi tiết với độ khó tăng dần. Những kiến thức trong loạt bài này là kết quả tiếp thu từ nhiều nguồn khác nhau trong nhiều năm tháng qua, và phần lớn kiến thức đều dẫn từ sách “ngôn ngữ Assembly 6502/65C02” của tác giả Leo J. Scanlon, bản tiếng Nhật do Yonamine Keiko dịch.

*Những khái niệm cơ bản như bit, byte, hệ thập phân, nhị phân và thập lục không được đề cập ở đâu. Nếu muốn thì người đọc có thể tự tìm hiểu thêm.

[​IMG]

Bài 1: khái quát về máy NES

Family Computer (viết tắt là FC, hay gọi tắt kiểu Nhật là Famicom) là loại máy chơi game thuộc thế hệ thứ 3 do hãng Nintendō phát triển, bán ra thị trường Nhật Bản vào ngày 15 tháng 7 năm 1983. Các thị trường Mỹ (1985), Gia Nã Đại, Trung Quốc, Hương Cảng (1986), Úc Thái Lợi (1987), Đại Hàn (1989) lần lượt sau đó. 
Máy được nhà sản xuất đề nghị giá bán lẻ là 14.800 En và có tên mã là HVC-001. HVC là chữ viết tắt của Home Video Computer. Trong nước Nhật, nó được gọi tắt là Famicom hay FC, nhưng lại được biết đến rộng rãi trên Thế giới với tên gọi NES (Nintendō Entertainment System).

Có thể nói sự thành công của NES là một điểm nhất trong lịch sử video game. Nếu không có NES thì có lẽ đã không có SNES, PlayStation hay Xbox sau này. Nếu NES không thành công vang dội thì có lẽ Thế giới đã không chú ý đến việc phát triển video game, nên đừng nói là ảnh hưởng đến các loại console mà có thể nó còn ảnh hưởng đến cả mảng game cho PC.

Thành phần chính cấu thành nên một máy NES (FC) như sau:

+ Rom Casette (Cartridge): băng chứa nội dung game, cắm vào máy để chơi. Với băng chính hãng thì mỗi băng chỉ chứa một trò, sau phát sinh băng lậu chứa nhiều hơn, từ vài trò đến vài trăm trò trong một băng.
+ CPU: RP2A03 của hãng Rihco.
+ APU: bộ xử lý âm thanh.
+ PPU: bộ xử lý hình ảnh Rihco RP2C02.
+ Working Ram: 2 kb.
+ Video Ram: 2 kb.
+ Độ phân giải: 256 x 240 đường, độ phân giải này thay đổi tùy vào hệ màu của TV.
+ Controller.

NES là hệ máy có các thanh ghi (Register) 8 bit (1 byte) và Address bus (hình dung nó như chiếc xe bus chạy đến các địa chỉ) 16 bit (2 byte) nên nó có thể truy cập $FFFF (65535) địa chỉ trong bộ nhớ. Vì vậy nên địa chỉ NES cơ bản có dạng như $8000, $1A0E,…. 
Dấu $ đứng đầu con số cho biết nó được thể hiện ở hệ số thập lục.
Dấu % đứng đầu con số cho biết nó ở dạng nhị phân, chẳng hạn 010111. Còn khi con số đứng độc lập mà không kèm các ký hiệu trên thì có nghĩa nó là số thập phân.

2 bình luận :

  1. This comment has been removed by a blog administrator.

    ReplyDelete
  2. This comment has been removed by a blog administrator.

    ReplyDelete

 
Top