semu-c64 - Chạy Linux trên Commodore C-64
(github.com/onnokort)- Đây là dự án port trình giả lập RISC-V32 tối giản semu sang C-64 để chạy Linux trên Commodore C-64
- Chỉ với 64KiB bộ nhớ thì không thể chứa toàn bộ cấu hình, nên cần RAM Expansion Unit(REU), và tốc độ chạy rất chậm đến mức được mô tả là “extremely slowly”
- Tệp thực thi
semuđược tạo ra là một trình giả lập RISCV32 đa dụng, giả định rằng REU được ánh xạ vào dải địa chỉ từ0x00000000đến0x01000000 - Việc chạy Linux sử dụng giả lập bộ nhớ ảo và MMU, còn UART được giả lập sẽ xử lý chuyển đổi chữ hoa/chữ thường giữa PETSCII và ASCII
- Việc build được thực hiện bằng
make, và cần cómos-c64-clang - Khi chạy trên VICE, cần dùng tệp
.d64chứa tệp thực thisemuđã biên dịch cùng vớireufile.linux, sau đó bật RAM Expansion Module và chọn kích thước 16MiB - Trên phía C-64, cách chạy là nhập
LOAD "SEMU",8,1rồirun, và theo README thì quá trình khởi động cần thời gian chờ khá lâu - Nhị phân
semucho PC có thể tảireufile.linuxbằng tùy chọn-k, và có thể dùng để tạo chuỗi khởi động có tính quyết định cho đến trước lần nhấn phím đầu tiên - Tính năng lưu trạng thái hoạt động bằng cách lưu trạng thái trình giả lập để nạp lại Linux đã khởi động sẵn nhanh hơn; các thanh ghi CPU RISC-V cùng trạng thái UART và bộ điều khiển ngắt được nạp từ địa chỉ REU
0xfff000 - Các bản phát hành được xem là “highly experimental”, và được nêu rõ là không phù hợp cho công việc production
1 bình luận
Ý kiến trên Hacker News
Onno Kortman đã cross-compile semu, một trình giả lập RISC-V tối giản, bằng llvm-mos — bản port LLVM cho MOS 6502 — để chạy Linux trên Commodore 64
Kortman viết rằng “chỉ để tạo ảnh chụp màn hình cũng mất vài giờ ngay cả với ‘warp mode’ của VICE. Với trạng thái hiện tại, một chiếc C64 thật có lẽ cũng có thể boot Linux trong khoảng một tuần”
Nếu viết trình giả lập RISC-V bằng 6502 native, có lẽ có thể boot Linux trên máy thật trong chưa đến một ngày chứ không phải một tuần. Nghĩ mà xem sẽ cứu được bao nhiêu mạng người
https://www.folklore.org/StoryView.py?story=Saving_Lives.txt
https://dmitry.gr/?r=05.Projects&proj=07.%20Linux%20on%208bi... dùng trình giả lập ARMv5 trên AVR 8-bit, nhưng lần này còn hơn một bậc về độ ngầu kiểu lập dị
Tuy rất ngầu, nhưng ý nghĩ đầu tiên của tôi là “làm sao mà nhét vừa vào 64KB RAM được!”, và thực tế là không vừa
Cần REU 16MB. REU dành cho C64 thời đó là 256KB và 512KB, và vì sơ đồ mạch được công khai nên các bản sao cũng chủ yếu được làm theo các mức này
Cuối thập niên 90 còn có một “bản mở rộng” cho C64 chứa SuperCPU (65816), một CPU mới tương thích mã với CPU gốc, và có lẽ thiết bị này hỗ trợ tối đa 16MB
Về sau xuất hiện các bản tái hiện dựa trên FPGA và cả REU 16MB. Sơ đồ mạch SuperCPU gốc đã thất lạc, và dù nghe nói hiện có thể mua bo mở rộng dựa trên FPGA với giá vài trăm euro, tôi không biết ai thực sự đã mua
Vì vậy, dù đây là một thành tựu kỹ thuật gọn gàng, câu “chạy trên C64” nghe giống như nói “đã chạy Doom 3 trên 386, chỉ có điều chiếc 386 đó là một card PCI của PC hiện đại”
Nếu nó không thể chạy trên chiếc C64 của tôi với phần cứng có thể mua được lúc đó, hoặc phần cứng khi ấy có thể chế tạo một cách thực tế, thì gọi là “chạy trên C64” khá là lấn cấn
Quay lại chuyện REU, tôi cũng thắc mắc vì sao đến giờ vẫn chưa có sơ đồ mạch mở. Trên eBay có nhiều chip SRAM rẻ nên tưởng có thể làm khá dễ, nhưng thực tế không đơn giản vì phải giả lập hai thành phần là SuperCPU và bộ điều khiển DMA bằng một FPGA khá lớn
Khi có FPGA rẻ hơn, hoặc vi điều khiển có chức năng tương tự FPGA, có lẽ ai đó sẽ làm một SuperCPU mã nguồn mở. Những người dùng tôi từng nghe đến cho tới nay dường như đều dùng giả lập. Giả lập rất hữu ích cho phát triển, nhưng niềm vui lớn nhất trong thú chơi retro của tôi là chạy trên phần cứng nguyên bản
Chỉ là giá sẽ khủng khiếp, chứ không có lý do kỹ thuật nào khiến nó bất khả thi. Có vẻ bạn đang nhầm SuperCPU với REU thông thường
REU chỉ là một đống RAM cùng một ASIC giao tiếp với C64 để lưu hoặc lấy lại các bank RAM, và không có CPU. Vì 6502 không thể địa chỉ hóa trực tiếp quá 64KB, nên nó dùng cách ra lệnh thay thế RAM hệ thống
SuperCPU (65816) thực sự có thể địa chỉ hóa trực tiếp 16MB, nhưng đó là một thứ riêng. Dự án trong bài gốc chạy trên C64 cơ bản và CPU C64 cơ bản, chỉ là cần một lượng RAM khổng lồ mà thời đó có lẽ đắt ngang một căn nhà
Hay chừng đó cũng đã vượt giới hạn của chủ nghĩa thuần túy giả lập rồi
Với thời nay, chắc có thể nhét 386, 486, Pentium và vài SoC khác vào một card PCIe duy nhất, thậm chí tản nhiệt thụ động cũng được
Không phải chuyện Linux, nhưng gần đây tôi đang dùng thử các phụ kiện C64
Tôi đã thử Kung Fu Flash; đây là một cartridge định nghĩa bằng phần mềm giá rẻ, làm từ một STM32, và gần như làm được mọi thứ. Tôi mua nó để thử tái hiện trải nghiệm phát triển từng thấy trên “8-bit show and tell”; nó có thể giả lập “Super Snapshot” nhưng không giả lập được REU. Rất tuyệt để nhanh chóng thử nhiều phần mềm và game C64
https://8bithardware.wixsite.com/website/post/kung-fu-flash
https://github.com/KimJorgensen/KungFuFlash
Tôi cũng có SD2IEC, và đã rút ra rằng đáng lẽ nên mua biến thể có thêm ổ cắm DIN. Nó cũng ổn, nhưng tôi vốn không thích DOS nguyên bản của C64, và thiết bị này càng làm cảm giác đó mạnh hơn. Để mount image đĩa D64 phải gõ
OPEN1,8,15,"CD:MYIMAGE.D64":CLOSE1, khá là khó chịuJiffyDOS, ROM thay thế cho C64, cải thiện điều này, chạy nhanh hơn và có sẵn DOS wedge thường trực. Tôi đã đặt mua một cái và rất tò mò muốn thử với ổ 1541 thật
Thứ gần đây khiến tôi bắt đầu mày mò mấy món này là cartridge “Penultimate +2” cho VIC-20
https://www.youtube.com/watch?v=eNGyneXHKJQ
Thật ra tôi mua VIC-20 gần như chỉ để dùng thử cartridge này
Đây là một màn trình diễn về tính tương đương Turing. Nếu thời gian không phải vấn đề, bất kỳ máy tính Turing-complete nào cũng có thể làm được việc mà một máy tính Turing-complete khác làm
Thế này lại khiến người ta tò mò. Phần cứng cũ nhất có thể khởi động Linux hiện đại mà vẫn dùng hằng ngày được là gì?
Có thể tạo ra một hệ thống nhẹ và nhanh nhất để chạy tốt trên máy chậm, nhưng Internet ngày nay là một nơi không khoan nhượng
Sẽ không nhanh lắm, nhưng chỉ cần kiên nhẫn một chút thì có lẽ sẽ không bị phần cứng chặn lại. Nếu thêm GPU có giải mã video bằng phần cứng, có thể xem YouTube ở mức khá hơn chất lượng “khoai tây”
Tôi muốn nhắm tới khoảng thời Pentium 4 / Athlon XP. Theo tài liệu thì Pentium đời đầu không được hỗ trợ, nên nếu thật sự chịu khổ thì có thể lùi về tới Pentium II
Cái này khác LUnix à?
https://en.wikipedia.org/wiki/LUnix
Còn cái này là chạy trình giả lập RISC-V trên C64, rồi giả lập việc khởi động Linux trên trình giả lập đó
Nói nghiêm ngặt thì Linux không chạy trực tiếp trên C64
C64 đang giả lập một môi trường RISC-V, và Linux chạy bên trên đó. Dĩ nhiên vẫn rất ấn tượng, nhưng phân biệt ý nghĩa là quan trọng
Tôi tò mò liệu có thể cho nó hoạt động bằng cách dùng vài chục đĩa mềm như RAM, thay vì REU không
Mỗi khi cần thì bảo người dùng thay đĩa thì sao. Nếu ai đó có vài tháng hoặc vài năm rảnh rỗi, tôi muốn xem việc đó trên phần cứng thật dưới dạng timelapse
Nếu gắn thêm RAM cho Commodore 64 thì nó vẫn là Commodore 64 chứ?
Ngoài ra còn có thể mở rộng tới REU 2MB cho C64. Xem https://www.neperos.com/article/rlut8ce90fbb7701
2MB trên C64 là thứ khá “hợp pháp” để có
Dung lượng bộ nhớ tối đa có thể định địa chỉ bằng C64 REU là 16MB
Gần đây tôi có được một chiếc TRS-80 Model 4 hoạt động hoàn toàn, và tôi thường mơ hồ tưởng tượng việc đưa một thứ gì đó na ná Unix lên đó
Sự tưởng tượng đó vẫn tiếp diễn
Bắt đầu từ điểm đó, bạn sẽ tìm thấy một cái hang thỏ khá sâu