- So với 128KB bộ nhớ của chiếc Macintosh nguyên bản, 264KB RAM của Raspberry Pi là đủ dùng. Năm 1984, Macintosh có giá bằng 1/3 một chiếc Volkswagen Golf.
- Dùng RP2040 để kết nối VGA đơn sắc và USB/bàn phím, rồi giả lập Mac để chạy các ứng dụng Mac đời đầu
- Thông tin đã được công khai trên GitHub nên ai cũng có thể tự dựng
Pico-Mac là gì?
- Vi điều khiển Raspberry Pi RP2040 (dùng bo Pico) điều khiển video VGA đơn sắc, nhận đầu vào từ bàn phím/chuột USB và giả lập máy tính Macintosh 128K cùng thiết bị lưu trữ đĩa
- 2MB flash của RP2040 đủ để chứa image đĩa cho OS và phần mềm
- Có thể chạy các ứng dụng Macintosh đời đầu như MacDraw, MacWrite, MacPaint
Hành trình
Ba quy tắc
- Phải vui.
- Không muốn học assembly 68K.
- Không muốn đào quá sâu vào nội tạng của phần mềm hệ thống Mac đời đầu.
Mac 128K
- CPU Motorola 68000, 8MHz.
- Cấu hình phần cứng cơ bản như memory map, bàn phím/chuột, quét video.
- Mac 128K và Mac 512K chỉ khác nhau ở RAM.
- Mac Plus bổ sung SCSI và ổ đĩa mềm 800K.
Trình giả lập Mac: umac
- Xây dựng trình giả lập Mac 128K bằng cách dùng trình thông dịch Musashi 68K.
- Nạp image ROM, cấp phát RAM, thiết lập thông báo debug và logging.
- Thêm giải mã địa chỉ, điều hướng việc CPU đọc/ghi tới RAM hoặc ROM.
- Sau khi truy cập chip IWM thì hiện biểu tượng "Unknown Disc".
- Bọc bằng frontend SDL2 để kiểm tra làm tươi màn hình theo thời gian thực.
Phần cứng và RP2040
- Xuất video 512x342x1 ra VGA và tích hợp ví dụ TinyUSB HID.
- Thông qua tác vụ VGA PIO để quét dữ liệu video và dùng DMA để xuất dữ liệu framebuffer.
- Sau nhiều lần tái cấu hình kênh DMA, đã triển khai được đầu ra video ổn định.
Quay lại với giả lập
- Sửa Musashi để bảng nhảy giải mã opcode lớn được lưu trong flash.
- Loại bỏ bộ disassembler và phần đếm chu kỳ thực thi.
- Tối thiểu hóa việc dùng RAM để có thể build và chạy trên Pico.
Hiệu năng
- Overclock Pico lên 250MHz để cải thiện hiệu năng.
- Lưu 200 hàm opcode được dùng thường xuyên vào RAM để đạt 1,4 MIPS.
Lời chào tạm biệt
- Dự án MicroMac là một trải nghiệm thú vị và bổ ích.
- Có thể tự dựng thông qua liên kết GitHub.
Ý kiến của GN⁺
- Dự án thú vị: MicroMac là một dự án hấp dẫn khi giả lập Macintosh cổ điển bằng phần cứng giá rẻ. Sự kết hợp giữa phần mềm và phần cứng mang lại niềm vui rất đúng chất kỹ thuật.
- Cơ hội học tập: Dự án này mang đến cơ hội tốt cho kỹ sư phần mềm mới vào nghề để hiểu sự tương tác giữa phần cứng và phần mềm. Đặc biệt, có thể học các khái niệm như giả lập, PIO và DMA.
- Tối ưu hiệu năng: Quá trình tối ưu hiệu năng giúp học được nhiều thách thức kỹ thuật và cách giải quyết khác nhau. Đặc biệt, có thể hiểu tầm quan trọng của quản lý bộ nhớ và ép xung.
- Chia sẻ với cộng đồng: Việc chia sẻ dự án qua GitHub mở ra cơ hội hợp tác với người khác. Điều này cho thấy rõ lợi ích của cộng đồng mã nguồn mở.
- Tiềm năng tương lai: Dự án này có thể được mở rộng bằng cách dùng MCU có RAM lớn hơn. Điều đó mở ra khả năng chạy các ứng dụng phức tạp hơn.
1 bình luận
Ý kiến trên Hacker News
Khó tìm cáp VGA: Gần đây cần một sợi cáp VGA cho một tác phẩm sắp đặt nghệ thuật, nhưng không ai xung quanh có nên cuối cùng phải mua mới. Thật đáng tiếc khi trong khi rất nhiều cáp đang bị vứt đi.
Dự án Amiga: Từng muốn làm một chiếc Amiga chạy AmigaOS 3.2. Ý tưởng in 3D một vỏ nhỏ theo đúng hình dáng nguyên bản rất dễ thương. Dù trải nghiệm sẽ hơi thiếu đi một chút vì không có ổ đĩa mềm đời cũ, tôi vẫn thích ý tưởng dùng một cỗ máy chuyên dụng thay vì chạy trình giả lập trên PC desktop sẵn có. Cách tiếp cận ở mức thấp, nơi RP2040 đảm nhiệm vai trò 68k, rất thú vị.
Ấn tượng đầu tiên về Mac: Khi Mac mới ra mắt, tôi làm việc tại một cửa hàng máy tính. Nhìn các góc bo tròn trên màn hình và tôi đã thán phục sự thiên tài đó.
Khen ngợi dự án: Dự án này thật sự rất ấn tượng. Đọc rất thú vị và tôi cũng thích văn phong của bài viết. Trong các dự án nhúng, tôi thử build dual-target để tạo mẫu/gỡ lỗi nhanh hơn, nhưng rồi lại dùng bản build trên PC thường xuyên hơn. Nhiều người nên làm như vậy hơn.
Giao diện VGA: Giao diện VGA là phần gây ấn tượng nhất.
Thử thách hack ESP32: Tôi đã thử chạy vMac trên ESP32 nhưng thất bại. Dự án này ở đẳng cấp cao hơn nhiều. Xin bày tỏ sự kính nể.
Khám phá SBC nhỏ gọn: Tôi tò mò SBC nhỏ nhất nào có thể giả lập chiếc Mac 68k cuối cùng hoặc PPC Mac giữa-cuối thập niên 90 với hiệu năng đầy đủ. Nếu gắn nó vào một thân máy laptop hiện đại, nó có thể trở thành một chiếc laptop "chế độ zen" hữu ích, chạy được từ System 7.6.1 đến Mac OS 9.x.
Bản mirror của blog: Có vẻ blog đang bị quá tải nên chia sẻ một liên kết mirror.
Nhắc đến MacPaint: Giải thích lý do không nhắc đến MacPaint. Có lẽ Bill Atkinson biết mọi mẹo và đã tận dụng chúng để MacPaint hoạt động trong các ràng buộc ban đầu. Với tác giả thì đó không phải là một cuộc chơi công bằng.
Tìm đầu nối VGA: Tôi cần một đầu nối VGA nhưng không tìm được. Trong lúc đi dạo vào giờ nghỉ trưa, tôi đã nhặt được một sợi cáp VGA ngoài đường. Đôi khi những chuyện như vậy vẫn xảy ra.