a5k - Another World / Out of This World được port sang FPGA
(github.com/sylefeb)- Đây là một dự án tri ân cá nhân hiện thực VM, blitter và rasterizer của Another World / Out of This World bằng phần cứng FPGA mà không dùng CPU tiêu chuẩn
- Thiết kế cốt lõi gồm việc biến VM thành một bộ xử lý tùy biến thực sự, kết hợp thành một SoC với blitter phụ trách sao chép/đổ đầy giữa các framebuffer, rasterizer vẽ polygon và phần cập nhật hiển thị
- 128KB SPRAM của Lattice UP5K vừa khít với 4 framebuffer 320x200 4-bit, trong đó mỗi khối SPRAM 32KB tương ứng với một framebuffer, tạo thành bố trí bộ nhớ
- Dữ liệu game không được bao gồm trong kho lưu trữ; cần sao chép
BANK01~BANK0DvàMEMLIST.BINvào thư mụcGAMEDATAthì mới có thể dùng gói dữ liệu và bitstream - Cách chạy hỗ trợ cả mô phỏng lẫn bo mạch thực
- Với mô phỏng, sau khi cài Silice có thể chạy phần intro bằng
make simul1 - Phần cứng hỗ trợ icebreaker + VGA PMOD, mch2022 badge và ULX3S HDMI
- Có kèm bitstream dựng sẵn, nhưng vẫn cần dữ liệu game riêng
- Với mô phỏng, sau khi cài Silice có thể chạy phần intro bằng
- Việc chạy VM lấy lệnh và toán hạng từ bộ nhớ SPI, và để giảm độ trễ sẽ đọc trước 64 byte vào một bộ đệm BRAM nhỏ
- Đường đi đồ họa sử dụng 4 framebuffer, double buffering, giới hạn truy cập trong vùng
vblankvà cơ chế phân xử truy cập framebuffer giữa blitter và rasterizer - Rasterizer vẽ các polygon lồi của Another World dưới dạng các span ngang; để tạo hiệu ứng trong suốt, nó có thể đọc và sửa giá trị pixel hiện có hoặc sao chép pixel từ một framebuffer nguồn khác
- Kết xuất văn bản và một phần nền của part 6 được xử lý bằng cách lưu các pixel buffer đã render sẵn trong ROM rồi sao chép qua đường
op_drawString, do ngân sách LUT còn lại hạn chế - Các giới hạn và việc còn lại được nêu rõ gồm: chưa có âm thanh/nhạc, cần bitstream và gói dữ liệu riêng cho từng part, chưa kiểm chứng xong toàn bộ quá trình chơi game, cần chỉnh lại timing đang nhanh hơn bản gốc, và đang tìm cách nối các part
- Giấy phép gồm: thiết kế Silice theo MIT License, tài liệu theo CC BY-NC-SA 4.0, bản port C++ đã chỉnh sửa vẫn giữ GPL gốc, còn dữ liệu game thuộc phạm vi bản quyền
1 bình luận
Ý kiến trên Hacker News
Đó là lần đầu tôi thấy những đoạn cắt cảnh hoạt họa hoàn chỉnh như vậy trên Sega, và chúng thật sự rất ấn tượng. Dĩ nhiên đồ họa sau này đã đẹp hơn, nhưng tôi vẫn cảm thấy Another World đến nay vẫn đứng vững về mặt nghệ thuật. Phong cách rất rõ nét, và khi chơi lại khoảng một năm trước, nó vẫn gây ấn tượng
Khá nhiều câu đố gần như là thử-sai, và game cũng cực kỳ ngắn, nhưng dù vậy tôi không muốn thay đổi điều gì. Nếu là fan của Another World, tôi cũng khuyên thử Flashback: The Quest for Identity. Nó có bầu không khí điện ảnh tương tự; ban đầu tôi không thích lắm, nhưng trong 10 năm qua càng ngày càng thấy hay hơn
Dù vậy Another World là một tác phẩm nghệ thuật. Poster của game trông như tranh sơn dầu, thật sự rất đẹp [1]
[1] http://www.anotherworld.fr/download/AnotherWorld_Poster.jpg
Bản reverse engineering và port JavaScript Infernal Runner cho Amstrad CPC của cyxx. Đây là tác phẩm của nhà sáng tạo Another World, và cả hai đều tận dụng kiến trúc máy ảo: https://github.com/cyxx/infernal_js
Bài thuyết trình The Virtual Machine Architecture of Infernal Runner của Norbert Kehrer. Bài nói bằng tiếng Đức, có slide tiếng Anh: https://media.ccc.de/v/vcfb20_-146-en-202010111400-_th...
The Story of Another World on the Amiga | MVG: https://www.youtube.com/watch?v=0iz9PJbs5rE
Bản port Nintendo 64 của Another World: https://github.com/jnmartin84/aw64
Bản port PlayStation 1 của Another World: https://github.com/fgsfdsfgs/rawpsx
Nó cung cấp trình biên dịch biên dịch sang Verilog, rồi có thể đưa kết quả vào luồng thiết kế hiện có
Ngay hành động đầu tiên đã phải bơi để trốn thoát, rồi tiếp đó phải thoát khỏi một sinh vật giống sư tử — đó là một trong những trải nghiệm game khắc nghiệt nhất mọi thời. Chỉ cần chơi game này 1 phút cũng sẽ nhớ cả đời
Ở thời điểm đó, các hiệu ứng camera kịch tính của game này thật sự giống như đúng cái tên: một thế giới khác
Hình bìa cũng rất tuyệt
konanaka beetzai! motsuubo! /wave
https://www.youtube.com/watch?v=JFaOYYSxSEA
Theo tôi nhớ thì ông cũng cho xem một phần công cụ phát triển, trong đó có cách trực tiếp sửa animation theo từng dòng trong bytecode của máy ảo và chạy từng bước
Ngày nay số loại máy ít hơn so với giai đoạn bùng nổ của thập niên 80. Ngay cả bây giờ, có thể xem phần lớn “phần mềm” là JavaScript do trình duyệt web diễn dịch. Thập niên 80 cũng đã có vấn đề về tính di động, thậm chí khi đó còn khó hơn vì phải tự viết interpreter
Có vẻ nhiều, có khi là hầu hết, trò chơi điện tử trước Doom hoặc trước đồ họa 3D hiệu năng cao đều được viết bằng máy ảo. Game console có lẽ nhiều khả năng dùng C hoặc assembly vì lý do hiệu năng
Vào thời đó, game “máy tính” là giai đoạn trước khi IBM PC trở thành chuẩn, hoặc ít nhất là trước khi PC thắng thế và Microsoft thống trị. Trong bối cảnh chưa biết Amiga, PC-98, IBM PC, Mac, v.v. cái nào sẽ thắng, việc tạo một máy ảo là hợp lý, và SCUMM là thứ hiện ngay trong đầu
Tính di động cũng quan trọng, nhưng vào thời điểm định luật Moore đang chạy hết tốc lực và vòng đời nền tảng ngắn như phù du, máy ảo còn mang lại hiệu quả nén. Binary đã biên dịch hoàn chỉnh có thể ngốn quá nhiều dung lượng đĩa hoặc băng từ, cũng như RAM
Ngược lại, một máy ảo rất nhỏ có thể tạo ra một ngôn ngữ tùy chỉnh để diễn giải tức thời, và trong hoàn cảnh phải tiết kiệm từng kilobyte, nó giảm dung lượng đi đáng kể. Cứ nghĩ đến chênh lệch kích thước giữa
print "Hello world!"và một binary biên dịch cơ bản là được. Một game phiêu lưu văn bản dù nhanh đến đâu cũng vô dụng nếu không nhét vừa trong X KBChúng có nhiều văn bản và tài nguyên đồ họa, còn tính toán thì tương đối đơn giản. Các ràng buộc về sáng tác chỉ gắn với phần cứng ở khía cạnh nhập/xuất và nén dữ liệu, còn mã do trình thông dịch chạy thường chỉ là phần “khởi tạo cảnh” chạy một lần và một chút bộ đếm thời gian cho hoạt ảnh
Ý tưởng ngược lại thể hiện rõ hơn ở game arcade, rồi về sau là những thứ như Doom và Quake. Những gì game mô phỏng gắn với phần cứng chặt chẽ hơn nhiều, còn định nghĩa cảnh chỉ ở mức “đặt quái vật ở đây, đặt vật phẩm hồi máu ở kia”, nên nó gần với dữ liệu bản đồ hơn là logic script
Tất nhiên, hai nhóm sau có dùng một số phép toán nguyên thủy đồ họa native
Nếu dùng bitplane thì không cần đọc lại bộ nhớ video. Chỉ cần giả định bit cao nhất dành riêng cho hiệu ứng trong suốt rồi đổ nguyên các span ra là được
Hai lợi thế còn lại là có thể di chuyển các mặt phẳng tương đối với nhau để tạo hiệu ứng moiré đẹp mắt, và hiệu quả tốt về bộ nhớ cũng như băng thông bus ở các độ sâu màu lưng chừng không khớp gọn với byte hay nibble, chẳng hạn 8 màu (3 bit mỗi pixel) hoặc 32 màu (5 bit mỗi pixel)