1 điểm bởi GN⁺ 2023-08-28 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đâ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 đến 0x01000000
  • 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 .d64 chứa tệp thực thi semu đã biên dịch cùng với reufile.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,1 rồi run, và theo README thì quá trình khởi động cần thời gian chờ khá lâu
  • Nhị phân semu cho PC có thể tải reufile.linux bằ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

 
GN⁺ 2023-08-28
Ý 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”

    • 6502 nổi tiếng là tệ khi làm mục tiêu biên dịch C, đặc biệt nếu đó là C không tính đến các ràng buộc của 6502
      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
    • Cách bootstrap này gợi nhớ đến một dự án Linux trên một vi điều khiển 8-bit khác
      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ị
    • Muốn được thấy nó chạy trên phần cứng thật, và hy vọng ai đó sẽ làm được
  • 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

    • Nếu tiêu chí là “khó có thể nói là chạy trên C64 nếu không phải phần cứng có thể mua được thời đó hoặc có thể chế tạo thực tế thời đó”, thì REU 16MB vẫn có thể được chế tạo trong thập niên 80
      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à
    • Tôi tự hỏi liệu thay vì FPGA, có thể để một ARM SoC đa dụng tích hợp trên bo như RPi Pico/Nano làm việc tương tự bằng phần mềm không
      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
    • “Chiếc 386 của tôi thực ra là card PCI của PC hiện đại” — giờ thì tôi lại muốn có một thứ như vậy
      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
    • Nếu cần thêm 16MB bộ nhớ thì gọi là “trên Commodore 64” đúng là khá sát ranh giới
  • 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ịu
    JiffyDOS, 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

    • Cũng cần cả thời gian và bộ nhớ
    • Chạy Linux trong phép tính lambda kiểu gì?
  • 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ì?

    • Ràng buộc cốt lõi của việc dùng hằng ngày có lẽ là các phép toán mã hóa cần thiết để truy cập phần lớn website hiện đại
      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
    • Nếu “dùng hằng ngày” nghĩa là chạy trình duyệt web hiện đại và các ứng dụng năng suất web hiện đại, thì tôi nghĩ mức tối thiểu khoảng Core 2 Duo và 4GB bộ nhớ
      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”
    • Để tiện tranh luận, hãy giả sử đó là một máy tính có thể cài Debian 12, chạy trình quản lý cửa sổ và trình duyệt, và không chậm đến mức đau khổ
      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ó lẽ là thứ gì đó dùng Core 2 Duo. Tất nhiên CPU 230MHz cũng có thể “chạy” Linux có desktop
    • Không phải Linux hiện đại chút nào; khi tôi nhận Slackware 2.0 vào mùa hè năm 1995, tôi đang dùng Pentium 75MHz, RAM 8MB, card Trident hỗ trợ 1024x768 (trong X chỉ được 800x600), CD-ROM IDE và HDD
  • Cái này khác LUnix à?
    https://en.wikipedia.org/wiki/LUnix

    • LUnix là hệ điều hành native cho C64, nên có thể viết ứng dụng và chạy trực tiếp trên phần cứng C64
      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ứ?

    • Nếu dùng REU thì tôi nghĩ là có. Vì đó là nâng cấp bộ nhớ cùng thời với C64
    • Mở rộng thêm từ phần giải thích của johnwbyrd gần đó: Commodore từng bán một RAM Expansion Unit tên “1764” để tăng C64 lên 256KB RAM, và cũng có thể dùng “1750”, REU dành cho C128, để tăng C64 lên 512KB RAM
      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ó
    • Không, đó là Commodore 16384 rồi
      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

    • Có lẽ có thể nâng lên 128KB. Đến mức đó thì khả năng chạy Fuzix khá cao
      Bắt đầu từ điểm đó, bạn sẽ tìm thấy một cái hang thỏ khá sâu