Tóm tắt nhanh
- TabStationToo chuyển nhân giả lập PCSX2 sang WebAssembly để chạy game PS2 trong trình duyệt máy tính.
- Do trình duyệt không thể thực thi trực tiếp mã x86 hoặc ARM do bộ recompiler của PCSX2 sinh ra, dự án viết JIT mới cho EE, IOP, VU0 và VU1.
- Đồ họa dùng WebGPU khi được hỗ trợ; BIOS và ảnh đĩa phải do người dùng tự chuẩn bị, còn dữ liệu được xử lý cục bộ.
- Những kết quả gần tốc độ đầy đủ hiện là số liệu do nhóm phát triển tự báo cáo trên một số máy và trò chơi, không phải bảo đảm cho toàn bộ thư viện PS2.
Hai lập trình viên đứng sau TabStationToo đã đưa một nhánh của PCSX2 lên trình duyệt, nhưng phần khó không nằm ở việc đóng gói trình giả lập thành một trang web. Trình duyệt không chạy được bộ recompiler vốn tạo mã máy x86 hoặc ARM, nên dự án phải xây một hệ thống JIT khác để sinh WebAssembly ngay khi chương trình hoạt động.
Kết quả là một bản thử nghiệm miễn phí, mã nguồn mở, có thể chạy trong Chrome, Edge và Firefox trên máy tính. Người dùng vẫn cần BIOS được trích xuất từ máy PS2 của mình và ảnh đĩa trò chơi tự tạo; TabStationToo không phát hành các tệp đó.
WebAssembly không thể dùng lại nguyên bộ recompiler của PCSX2

PCSX2 mô phỏng PlayStation 2 bằng cách chuyển các lệnh của máy chơi game thành mã mà bộ xử lý máy tính có thể thực thi. Cách làm này giúp giả lập nhanh hơn so với diễn giải từng lệnh, nhưng bộ recompiler truyền thống tạo mã x86 hoặc ARM trực tiếp. Môi trường trình duyệt không cho ứng dụng web thực thi loại mã máy tùy ý đó.

TabStationToo dùng Emscripten để biên dịch phần lõi PCSX2 sang WebAssembly, định dạng mà trình duyệt có thể chạy. Riêng phần dịch lệnh, dự án bổ sung JIT cho EE — bộ xử lý chính của PS2 — cùng IOP và hai đơn vị vector VU0, VU1. Các mô-đun WebAssembly được tạo trong lúc chạy thay vì phát sinh mã x86 hay ARM.
Đây là điểm biến dự án thành một bản port kỹ thuật thay vì một lớp giao diện web bọc quanh giả lập có sẵn. Nhóm phát triển cho biết họ đối chiếu đầu ra của JIT mới với bộ thông dịch trong PCSX2 theo từng bit, nhằm phát hiện sai khác khi chuyển lệnh. Cơ chế kiểm tra đó quan trọng vì lỗi mô phỏng đôi khi chỉ xuất hiện ở một nhóm lệnh hoặc một tình huống cụ thể trong game.
Phần lõi chạy đa luồng dựa trên SharedArrayBuffer. Cách này đòi hỏi trang web được phân phối với các header phù hợp để bật cô lập đa nguồn; vì vậy mở trực tiếp tệp HTML từ ổ đĩa sẽ không thay thế được một môi trường máy chủ web cấu hình đúng.
WebGPU đưa bộ dựng hình của PCSX2 sang trình duyệt
Đồ họa cũng phải đổi đường đi. TabStationToo chuyển hardware renderer của PCSX2 sang WebGPU, giao diện đồ họa mới hơn trong trình duyệt; nếu WebGPU không khả dụng, dự án có thể dùng software renderer vẽ lên canvas 2D. Trên một số cấu hình Linux, Chromium tắt WebGPU theo mặc định nên người dùng có thể rơi vào chế độ dự phòng chậm hơn.
Nhạc được xử lý qua mô phỏng chip SPU2 của PCSX2 rồi phát bằng Web Audio worklet. Trình duyệt thường yêu cầu một thao tác bấm hoặc nhấn phím trước khi cho trang phát âm thanh, nên việc vào game mà chưa có tiếng ngay lập tức không nhất thiết là lỗi giả lập.
TabStationToo hỗ trợ độ phân giải gốc hoặc mức nội bộ 2x cùng một số kiểu lọc hình, nhưng các tùy chọn đó không làm mọi máy chạy nhanh như nhau. Mô phỏng phụ thuộc nhiều vào CPU, khả năng đa luồng và việc trình duyệt có bật được WebGPU hay không; các cảnh nặng vẫn có thể giảm tốc.
Con số hiệu năng hiện tại chưa đại diện cho toàn bộ game PS2
Nhóm phát triển báo cáo Guitar Hero đạt 100% tốc độ trong một bài nhạc với vài lần tụt nhẹ, Grand Theft Auto: San Andreas trung bình khoảng 99% khi nhân vật đi bộ, còn các đoạn cắt cảnh của Final Fantasy XII đạt 100%. Các phép đo này được thực hiện trên máy thử nghiệm của nhóm, gồm Apple M1 Max và laptop Ryzen 7 7840U chạy ở mức công suất tối đa.
Các phép đo hiện có chưa bao quát toàn bộ thư viện. TabStationToo vẫn ở giai đoạn thử nghiệm; nhóm phát triển cũng lưu ý những cảnh nặng cần CPU nhanh. Vì vậy, các tỷ lệ tốc độ nên được xem là kết quả ban đầu của từng game, không phải cam kết rằng mọi máy tính sẽ đạt 60 khung hình/giây.
Khả năng chạy trong tab trình duyệt giảm bớt bước cài đặt một ứng dụng giả lập riêng, nhưng không xóa yêu cầu phần cứng hay công đoạn chuẩn bị dữ liệu. Dự án hiện chưa hỗ trợ điện thoại; bàn phím và nhiều loại tay cầm có thể dùng trên máy tính, còn dữ liệu thẻ nhớ và save state được lưu trong trình duyệt hoặc xuất ra tệp ở một số trình duyệt Chromium.
Chạy cục bộ không đồng nghĩa với việc có sẵn BIOS hay trò chơi
TabStationToo yêu cầu người dùng tự cung cấp BIOS và ảnh đĩa từ thiết bị, trò chơi mình sở hữu. BIOS có bản quyền; dự án không đóng gói hay tải BIOS về giúp người dùng, và cũng đề nghị không chia sẻ BIOS hoặc ảnh game trong kho mã nguồn. Bản thân TabStationToo được cấp phép GPL-3.0 và ghi rõ đây là dự án độc lập, không được PCSX2 hay Sony hỗ trợ.
Theo mô tả kỹ thuật của dự án, BIOS được giữ trong IndexedDB của trình duyệt; ảnh đĩa không bị sao chép lên máy chủ mà được đọc từng phần từ tệp người dùng chọn. Điều đó hạn chế việc phải tải cả bộ dữ liệu lên dịch vụ bên ngoài, song cũng có nghĩa người dùng tự chịu trách nhiệm về nguồn gốc hợp pháp của BIOS và bản sao trò chơi.
Điểm đáng chú ý của TabStationToo vì thế không phải lời hứa biến mọi máy tính thành PS2 chỉ bằng một cú nhấp. Giá trị nằm ở cách nó đưa một phần mềm đã phát triển hơn hai thập kỷ sang môi trường WebAssembly bằng những bộ JIT và renderer được làm riêng, trong khi vẫn để PCSX2 làm nền tảng. Nếu muốn thử, hãy bắt đầu với một game và cấu hình máy tính phù hợp; hiện chưa có đủ dữ liệu để kết luận khả năng tương thích trên toàn bộ thư viện.
Nguồn tham khảo: TabStationToo trên GitHub; Digital Trends; XDA Developers







