Ở cốt lõi, hệ thống giải trí Nintendo (NES) được cung cấp năng lượng bởi một biến thể tùy chỉnh của vi xử lý 6502, nhưng điều thực sự làm nên sự khác biệt của nó là cách các thành phần hoạt động cùng nhau. Không giống như các console khác cùng thời, NES đẩy mạnh một phương pháp thiết kế module khác biệt. Các thành phần phần cứng của nó tương đối đơn giản, nhưng kiến trúc của NES cho phép các băng game (cartridge) trở thành một phần mở rộng của hệ thống, xử lý các tác vụ mà các console khác tích hợp cứng vào bo mạch chủ của chúng.
Sự linh hoạt này đã mang lại cho các nhà phát triển không gian để phát hành một số trò chơi hay nhất thời đại, đồng thời đảm bảo NES sẽ duy trì sự phù hợp trên thị trường game gần một thập kỷ. Ngay cả bây giờ, 40 năm sau, một số người vẫn có thể chạy .NET trên phần cứng NES gốc.
Hãy cùng congnghethuthuat.net khám phá cách kiến trúc NES được thiết kế, kiểm tra các thành phần cốt lõi của nó, và tìm hiểu cách mọi thứ phối hợp với nhau để mang lại trải nghiệm chơi game mang tính biểu tượng của nó.
Bên trong NES: Ba nhóm thành phần, một hệ thống thống nhất
Cartridge đã mở rộng khả năng của console như thế nào?
Kiến trúc NES có thể được chia thành ba nhóm chính: các thành phần liên quan đến CPU, các thành phần liên quan đến PPU và các thành phần dành riêng cho băng game. Cùng nhau, các nhóm này xử lý logic, hình ảnh và các cải tiến dành riêng cho trò chơi, giao tiếp thông qua một hệ thống bus được phối hợp chặt chẽ. Bằng cách chuyển một số khả năng nhất định sang băng game, Nintendo đã giữ cho console có giá cả phải chăng trong khi trao quyền cho các nhà phát triển đẩy phần cứng đi xa hơn với mỗi trò chơi mới và tăng tuổi thọ của hệ thống.
Kết nối khe cắm băng 72 chân của Nintendo NES
- Nhóm liên quan đến CPU bao gồm bộ xử lý trung tâm (CPU), bộ xử lý âm thanh (APU) và một chip RAM tĩnh 2KB (WRAM). Các thành phần này phối hợp với nhau để thực thi logic trò chơi, xử lý âm thanh và quản lý dữ liệu tạm thời.
- Nhóm liên quan đến PPU được dành riêng cho việc hiển thị hình ảnh. Nó bao gồm bộ xử lý hình ảnh (PPU) và RAM video (VRAM) liên quan, quản lý mọi thứ từ các sprite nhân vật đến các ô nền (background tiles).
- Nhóm cartridge bao gồm ROM chương trình (PRG-ROM) và bộ nhớ ký tự (CHR-ROM hoặc CHR-RAM), và nhiều băng game còn có thêm các thành phần bổ sung như bộ điều khiển ánh xạ bộ nhớ (MMC) hoặc thậm chí là chip VRAM 8KB riêng trên băng để xử lý các trò chơi phức tạp hơn.
Trong khi nhiều console cùng thời chủ yếu sử dụng băng game làm phương tiện lưu trữ, NES đã tạo sự khác biệt bằng cách tận dụng khe cắm băng để giao tiếp trực tiếp với cả nhóm CPU và PPU. Thiết kế này cho phép tích hợp phần cứng tùy chỉnh, như các MMC và VRAM mở rộng, ngay trong các băng game. Việc tích hợp khe cắm băng với PPU và CPU cho phép các băng game trực tiếp điều chỉnh các khía cạnh chính của đồ họa, âm thanh và bộ nhớ, mang lại cho các nhà phát triển sự linh hoạt hơn để mở rộng khả năng của hệ thống. Đây là lý do tại sao chúng ta thấy sự tiến bộ ổn định của các trò chơi chất lượng tốt hơn trong suốt vòng đời của NES.
Các khối cấu tạo module của NES
Nhìn kỹ hơn các thành phần cốt lõi
Các thành phần liên quan đến CPU: Bộ não của NES
Trái tim của NES là CPU của nó, một chip Ricoh tùy chỉnh (RP2A03 cho các vùng NTSC và RP2A07 cho các vùng PAL) dựa trên bộ xử lý MOS Technology 6502 được sử dụng trong Apple II. Không giống như 6502 tiêu chuẩn, phiên bản NES thiếu hỗ trợ cho các hoạt động BCD (binary-coded decimal), hữu ích trong các ứng dụng như máy tính hoặc phần mềm kinh doanh nhưng phần lớn không liên quan trong trò chơi. Chế độ BCD đã được cấp bằng sáng chế bởi MOS Technology và, bằng cách vô hiệu hóa mạch BCD, Nintendo và Ricoh có thể tránh phí cấp phép mà họ lẽ ra phải trả cho MOS Technology.
Ảnh cận cảnh chip CPU Ricoh 6502 tùy chỉnh của Nintendo NES
Điều làm cho CPU của NES trở nên độc đáo là nó không chỉ là một bộ xử lý – nó còn chứa bộ xử lý âm thanh (APU). Bộ đồng xử lý này tạo ra âm thanh bằng cách sử dụng năm kênh: hai kênh xung (pulse) cho giai điệu, một kênh tam giác (triangle) cho âm trầm, một kênh nhiễu (noise) cho bộ gõ và một kênh DMC để phát âm thanh mẫu. APU đã mang lại cho NES âm thanh 8-bit đặc trưng của nó.
Chip RAM làm việc (WRAM) 2KB trên bo mạch chủ NES
RAM làm việc (WRAM) 2KB với nhãn BR6216C-10LL được sử dụng để lưu trữ dữ liệu có thể thay đổi — thông tin có thể được thay đổi hoặc sửa đổi sau khi tạo. Mặc dù bị giới hạn, lập trình thông minh đã cho phép các nhà phát triển tận dụng tối đa dung lượng thấp này. Ví dụ, thay vì giữ toàn bộ bản đồ trong bộ nhớ, các trò chơi như The Legend of Zelda đã sử dụng các thuật toán để tự động tạo dữ liệu bản đồ trong quá trình chơi.
Nói một cách đơn giản, CPU là “bộ não” của NES, chạy mã trò chơi, xử lý các đầu vào và ra lệnh cho các thành phần khác. Phần APU của CPU kiểm soát âm thanh, và WRAM đóng vai trò là không gian làm việc để theo dõi mọi thứ đang diễn ra trong trò chơi.
Các thành phần liên quan đến PPU: Hình ảnh của NES
Đồ họa của NES được xử lý bởi Bộ xử lý hình ảnh (PPU), một chip Ricoh tùy chỉnh có nhãn RP2C02H-O. Trong khi CPU thực thi logic của trò chơi, PPU chỉ tập trung vào việc hiển thị hình ảnh lên màn hình. Nó được thiết kế để vẽ hai lớp riêng biệt: các ô nền (background tiles) và các sprite, về cơ bản là các đối tượng có thể di chuyển như nhân vật, kẻ thù hoặc đạn.
Hình ảnh cận cảnh chip PPU Ricoh RP2C02H-O của hệ máy NES
Không giống như các GPU hiện đại, PPU không thể lập trình trực tiếp. Thay vào đó, CPU điều khiển nó thông qua các thanh ghi I/O được ánh xạ bộ nhớ (memory-mapped I/O registers), đóng vai trò như một cầu nối giữa hai thành phần. Các thanh ghi này cho phép CPU ra lệnh cho PPU vẽ những ô nào, đặt chúng ở đâu và tô màu chúng như thế nào. Chẳng hạn, khi Mario nhảy trong Super Mario Bros., CPU cập nhật các thanh ghi PPU để di chuyển sprite của Mario theo chiều dọc trong khi vẽ lại các ô nền thích hợp khi anh ấy di chuyển.
Chip VRAM (video RAM) 2KB được sử dụng trong Nintendo NES
Hỗ trợ PPU là 2KB VRAM (RAM video), cùng loại SRAM được sử dụng cho WRAM. VRAM này lưu trữ các bảng tên (name tables – ánh xạ vị trí các ô xuất hiện trên màn hình), các bảng thuộc tính (attribute tables – xử lý gán màu cho các nhóm ô), và các bảng màu (palettes – các màu cụ thể mà mỗi ô có thể sử dụng). Các bảng này cho phép các nhà phát triển tạo ra hình ảnh phức tạp mặc dù phần cứng của NES có giới hạn.
Để tiết kiệm tài nguyên, NES chỉ có đủ VRAM để hỗ trợ hai màn hình bảng tên, đó là lý do tại sao các trò chơi như Metroid sử dụng kỹ thuật “mirroring” để tái sử dụng các phần hiển thị khi cuộn ngang hoặc dọc. Các nhà phát triển có thể kiểm soát mirroring này bằng cách sử dụng các thanh ghi ánh xạ bộ nhớ, đảm bảo trải nghiệm chơi game mượt mà ngay cả với phần cứng hạn chế.
Nói một cách đơn giản, nhóm PPU hoạt động tương tự như nhóm CPU nhưng được dành hoàn toàn cho đồ họa. Trong khi CPU xử lý logic của trò chơi, PPU xử lý mọi thứ liên quan đến hình ảnh — vẽ nền, nhân vật và hoạt ảnh trên màn hình bằng cách sử dụng dữ liệu được lưu trữ trong VRAM.
Các thành phần liên quan đến Cartridge: Mở rộng khả năng của NES
Trong khi PPU và CPU tạo thành lõi của NES, các băng game đã thêm vào phép màu làm cho mỗi trò chơi trở nên độc đáo. Băng game không chỉ là một thiết bị lưu trữ — nó là một phần mở rộng của console, giao tiếp trực tiếp với cả CPU và PPU thông qua một đầu nối 72 chân.
Cận cảnh kết nối 72 chân trên khe cắm băng NES, cầu nối với CPU và PPU
Mỗi băng game chứa một chip Program ROM (PRG-ROM), lưu trữ mã của trò chơi, và một Character ROM (CHR-ROM) hoặc CHR-RAM, lưu trữ dữ liệu ô (tile data) cho đồ họa. Đối với các trò chơi sử dụng CHR-ROM, đồ họa được tải sẵn vào băng, trong khi các trò chơi sử dụng CHR-RAM cho phép CPU sửa đổi đồ họa một cách linh hoạt trong quá trình chơi.
Một số băng game còn bao gồm RAM tổng quát bổ sung (lên đến 8KB) để mở rộng bộ nhớ của NES và lưu trữ dữ liệu chơi game. Các băng này thường có một pin CR2032 được hàn vào PCB, được sử dụng để bảo toàn tiến độ đã lưu ngay cả khi console đã tắt — một tính năng được sử dụng trong các trò chơi như The Legend of Zelda.
Bảng mạch in (PCB) bên trong một băng game Nintendo NES với các chip ROM
Một trong những tính năng sáng tạo nhất của NES là khả năng tích hợp Bộ điều khiển quản lý bộ nhớ (MMC) vào các băng game. Các chip này cho phép các nhà phát triển vượt quá giới hạn bộ nhớ địa chỉ 64KB của console bằng cách cho phép chuyển đổi ngân hàng bộ nhớ (bank switching). Bằng cách hoán đổi các khối bộ nhớ vào và ra khỏi phạm vi truy cập của CPU, các nhà phát triển có thể đưa các trò chơi lớn hơn và phức tạp hơn vào một băng game duy nhất. MMCs cũng giới thiệu các tính năng như cuộn mượt (smooth scrolling) và bảng màu mở rộng.
Một số băng game tiên tiến thậm chí còn có VRAM riêng trên bo mạch, cho phép chúng xử lý dữ liệu đồ họa độc lập với VRAM tích hợp của console. Ví dụ, các trò chơi như Kirby’s Adventure đã sử dụng những cải tiến này để vượt qua giới hạn của những gì NES có thể hiển thị.
Nói một cách đơn giản, băng game không chỉ là một phương tiện lưu trữ — nó thực sự là một phần không thể thiếu trong kiến trúc của NES. Bằng cách nhúng phần cứng bổ sung trực tiếp vào băng, các nhà phát triển có thể thoát khỏi những hạn chế của console và đẩy giới hạn của những gì có thể làm được vào thời điểm đó.
Cách mọi thứ giao tiếp: Hệ thống bus của NES
Các thành phần của NES hoạt động cùng nhau thông qua một hệ thống bus dữ liệu và bus địa chỉ được phối hợp tốt. CPU luôn được kết nối với các bus này, điều khiển luồng dữ liệu giữa WRAM, PPU, APU và băng game.
Hình ảnh bo mạch chủ của Nintendo NES từ mặt dưới, thể hiện hệ thống bus
- Bus dữ liệu: Bus song song 8-bit này mang thông tin thực tế, như hướng dẫn trò chơi hoặc dữ liệu đồ họa, giữa các thành phần.
- Bus địa chỉ: Bus 16-bit này xác định nơi dữ liệu cụ thể được lưu trữ, dù là trong WRAM, VRAM hay băng game.
Mỗi thành phần đều có một tín hiệu chọn chip (chip-select signal), được điều khiển bởi một chip logic rời rạc có nhãn 74LS139, đảm bảo chỉ thành phần chính xác phản hồi khi dữ liệu được truy cập. Ví dụ, khi CPU cần cập nhật vị trí của Mario, bus địa chỉ xác định vị trí bộ nhớ chính xác trong WRAM, trong khi bus dữ liệu gửi tọa độ mới.
Để duy trì hiệu quả, NES đã sử dụng I/O được ánh xạ bộ nhớ (memory-mapped I/O), chia bộ nhớ 64KB của CPU thành các vùng được gán cho các thành phần cụ thể. Thiết lập này cho phép CPU tương tác liền mạch với tất cả phần cứng, xử lý PPU, APU và băng game như thể chúng chỉ là các vị trí bộ nhớ bổ sung.
Nói một cách đơn giản, hệ thống giao tiếp của NES hoạt động như một mạng lưới các “người đưa tin”, mỗi người chịu trách nhiệm mang thông tin cụ thể giữa các thành phần. CPU đóng vai trò là người điều phối trung tâm, đảm bảo rằng logic trò chơi, đồ họa và dữ liệu âm thanh đều đến đúng nơi vào đúng thời điểm.
Một kiệt tác module của lịch sử gaming
Giải mã quá khứ
Thiết kế phần cứng của NES là độc đáo vào thời điểm đó, và nó chắc chắn đã mang lại hiệu quả. Bằng cách chuyển một phần phần cứng của console sang băng game, Nintendo đã tạo ra một hệ thống vừa tiết kiệm chi phí vừa có khả năng thích ứng vô hạn. Đó là điều đã giúp nó duy trì sự phù hợp gần một thập kỷ và cho phép các nhà phát triển vượt qua giới hạn của những gì có thể trong thiết kế trò chơi.
Máy chơi game Nintendo NES và súng quang Zapper, biểu tượng của thời đại 8-bit
Ngày nay, chúng ta có thể tháo rời những cỗ máy này, phân tích từng đường mạch trên bảng và hiểu đầy đủ cách chúng hoạt động. Mức độ truy cập này là một phần của điều khiến máy tính cổ điển trở nên hấp dẫn – bạn có thể theo dõi mọi kết nối, xem mọi thứ khớp với nhau như thế nào và thậm chí tự tái tạo phần cứng với các dự án như OpenTendo.
Tại sao ngày nay không còn cảm giác đơn giản này nữa?
Đáng tiếc, với máy tính hiện đại, loại hiểu biết sâu sắc, thực tế đó dường như gần như không thể đạt được. Với các bộ xử lý chứa hàng tỷ bóng bán dẫn và phần mềm dựa trên các lớp trừu tượng, ý tưởng tháo dỡ hoàn toàn một hệ thống hiện đại theo cách chúng ta làm với NES dường như là không thể. Đối với nhiều người trong chúng ta, chiếc máy tính mạnh mẽ nhất chúng ta sở hữu có lẽ nằm trong túi của chúng ta. Liệu có ai, hàng thập kỷ sau, sẽ giải mã công nghệ ngày nay theo cùng một cách không? Hay kỷ nguyên thực sự hiểu cách một thứ hoạt động, xuống đến từng mạch điện cuối cùng, đã qua đi rồi?
Dù bằng cách nào, có một điều gì đó thật thỏa mãn khi đào sâu vào phần cứng, dù là phân tích kiến trúc của một console cổ điển hay làm việc trên các dự án của riêng bạn ngày nay. Nếu bạn đã đọc đến đây, rất có thể bạn cũng chia sẻ sự tò mò đã truyền cảm hứng cho rất nhiều người thử nghiệm với NES vào ngày xưa. Vì vậy, có lẽ đây là dấu hiệu để bạn cuối cùng bắt đầu dự án Arduino đó, tự xây dựng máy tính để bàn của riêng mình hoặc biến chiếc laptop cũ thành một NAS. Rốt cuộc, cách tốt nhất để hiểu một hệ thống là tự tay trải nghiệm nó.