- KiDoom là dự án render game bắn súng kinh điển DOOM năm 1993 theo kiểu vector ngay trong trình biên tập PCB KiCad
- Sử dụng các đường mạch PCB (trace) làm đường xuất đồ họa, chạy ở tốc độ 10~25 khung hình/giây
- Cùng nhà phát triển đó cũng đã cho DOOM chạy trên máy hiện sóng thông qua ScopeDoom, tận dụng cổng tai nghe MacBook làm DAC
- Ngoài ra còn thực hiện nhiều dự án điện tử và phần mềm khác như CircuitSnips.com, ứng dụng chat AI, trình kích hoạt dựa trên MQTT, trình mô phỏng động cơ
- Được chú ý như một dự án thử nghiệm tương tác dựa trên kỹ thuật điện tử kết hợp giữa thiết kế phần cứng và sự sáng tạo trong phần mềm
Tổng quan các dự án chính
- KiDoom là một bản triển khai thử nghiệm render DOOM theo kiểu vector trong trình biên tập PCB KiCad
- Sử dụng các đường mạch PCB làm đường xuất đồ họa
- Hoạt động ở tốc độ khoảng 10~25 FPS
- ScopeDoom là phiên bản chạy DOOM trên máy hiện sóng
- Dùng cổng tai nghe MacBook như DAC hai kênh để hiển thị đồ họa vector ở mức 4~8Hz
Các dự án công khai khác
- CircuitSnips.com: nền tảng chia sẻ mạch con KiCad, có thể xem như phiên bản mạch điện của Thingiverse
- HIT Impact Android App: ứng dụng Android viết bằng Kotlin cho cảm biến chấn thương sọ não
- MQTT Duration Trigger: công cụ tích hợp trigger thời lượng dựa trên MQTT cho Home Assistant
- TheDuck.chat: ứng dụng chat dựa trên AI được phát triển cho T3 Cloneathon
- bitwise-mcp: máy chủ tài liệu MCP cho lập trình viên nhúng, trích xuất định nghĩa thanh ghi từ PDF RM để cung cấp tìm kiếm ngữ nghĩa nhanh
- KiCad Netlist Tool: công cụ hỗ trợ tự động hóa tài liệu bằng cách giảm số lượng token LLM của tệp KiCad SCH
- Claude Code Comm Bot: bot giao tiếp Discord để tích hợp với VS Code
- Agent Tool (deprecated): frontend web phát trực tuyến theo thời gian thực cho công cụ CLI và dịch vụ web LLM
- Engine Simulator [WIP]: dự án mô phỏng động cơ diesel 6 xi-lanh bằng tính toán vật lý
- Vitamin/Supplement Price Comparison [WIP]: trang web so sánh giá giữa thực phẩm bổ sung thương hiệu và sản phẩm phổ thông
- Fuel Injector Characterizer: hệ thống kiểm chứng hiệu năng kim phun nhiên liệu dùng Arduino và Webserial
Môi trường phát triển cá nhân
- VS Code Server: môi trường phát triển từ xa thông qua VPN Tailscale
- Home Assistant: nền tảng tự động hóa nhà thông minh yêu cầu xác thực
Tóm tắt kinh nghiệm
- Có kinh nghiệm với các dự án dựa trên 3 ECU đã phát triển, hơn 10 năm kinh nghiệm, và hơn 28,5 triệu dặm dữ liệu lái xe
1 bình luận
Ý kiến trên Hacker News
Dự án này thú vị ở cách triển khai hơn nhiều so với việc chỉ là một meme
Điều ấn tượng không phải là render được DOOM, mà là việc chiếm dụng pipeline render của trình chỉnh sửa PCB để biến nó thành một kiểu vector engine thời gian thực
Họ trích xuất trực tiếp geometry từ cấu trúc nội bộ của DOOM, ánh xạ sprite vào footprint linh kiện thật, và cập nhật object model của KiCad theo thời gian thực mà không cần tính toán lại toàn bộ
Thậm chí còn có ý tưởng đưa cùng luồng vector đó sang audio DAC của máy hiện sóng
Kiểu kết nối sáng tạo theo hướng “dùng công cụ khác với mục đích ban đầu” như thế này thật sự rất hay
Về sau, hướng ScopeDoom có thể còn thú vị hơn nữa. Màn hình vector buộc người ta phải thay đổi hoàn toàn cách tư duy về render, và việc DOOM được vẽ bằng tín hiệu điện áp analog mang lại cảm giác rất giàu chất thơ
Nếu kết hợp thêm DAC nhanh hơn, máy hiện sóng analog có độ lưu ảnh, và đơn giản hóa sprite động, có lẽ nó sẽ tiến gần tới thẩm mỹ của một game bắn súng vector mượt mà
Tự dưng nghĩ liệu có thể in bản vẽ ra giấy rồi lật như một flipbook không
Rồi biết đâu một ngày nào đó nó lại trở thành bản trình chiếu PowerPoint
Dự án thật sự đáng kinh ngạc. Nó tạo cảm giác như một thứ gì đó do tom7 hoặc kênh YouTube của anh ấy làm ra
Khi đọc đoạn “trích xuất dữ liệu vector trực tiếp từ engine”, tôi đã tự hỏi không biết đã có ai làm việc này trên máy hiện sóng chưa
DOOM dùng sprite nên có giới hạn, nhưng phần nền có vẻ vẫn render được
Đã từng có ví dụ dùng máy hiện sóng tốc độ cao như một màn hình raster đen trắng độ phân giải thấp
Tôi tìm thấy video chạy Quake trên máy hiện sóng, và vì là mô hình 3D nên cảm giác chiều sâu hiện rõ hơn
Chỉnh sửa: Đến phần sau của bài thì tôi thấy ScopeDoom và rất bất ngờ. Tôi cứ nghĩ những thử nghiệm kiểu này hẳn đã xuất hiện sớm hơn, nhưng hóa ra lại khó tìm ngoài dự đoán
Có nhiều ví dụ chạy DOOM trên các thiết bị như Keysight MXA, nhưng cái đó chỉ đơn thuần là dùng chúng như một chiếc PC
Tôi đang nghĩ đến Spectrum DOOM. Có thể tận dụng ảnh chụp waterfall plot để làm điều đó
Bước tiếp theo có lẽ là render DOOM lên PCB thật để chơi luôn
Mỗi khung hình đều đem đi đặt làm, rồi 2 tuần sau lắp tấm board vừa giao tới vào trong lúc suy ngẫm về cuộc đời
Tôi mới bắt đầu học KiCad gần đây, mà lại đang làm trong một coworking space cho phát triển game, nên cảm giác như hai thế giới gặp nhau hoàn hảo. Quá tuyệt
Tôi không biết vì sao, nhưng cứ cảm thấy điều này làm cho thế giới trở nên tốt đẹp hơn
Một ý tưởng mở rộng khá vui là thêm map mới dựa trên file CAD thiết kế chip
Con chip sẽ thành các căn phòng, còn các đường hàn sẽ thành hành lang
Có một dự án tôi luôn muốn thử là làm một hệ thống hiển thị qua jack audio dùng vi điều khiển
Tôi từng phân vân giữa việc dùng trực tiếp tín hiệu XY hay giải mã từ web bằng một soft modem
Các sứ mệnh Apollo cũng từng truyền hình ảnh TV theo cách này
SSTV hiện đại hoạt động được chỉ với băng thông vài trăm Hz, nhưng nếu dùng trọn 20kHz của kênh âm thanh thì có thể truyền khoảng 1fps ở độ phân giải cỡ 100x100 pixel
Không biết cái này có dùng socket API mới của KiCad v9 không
Tôi từng tự viết thư viện s-expr để bơm footprint và symbol vào, nhưng nó nhiều lỗi và không ổn định
Tôi muốn chuyển sang một cách chính thức và ổn định hơn
Tôi rất quan tâm đến thư viện s-expr của bạn. Có vẻ nó sẽ trùng với một số phần trong dự án khác của tôi là CircuitSnips
CircuitSnips là một dịch vụ kiểu Thingiverse cho mạch điện tử, và tôi đã tự triển khai cách cấp toàn bộ sheet cho renderer KiCanvas
Khi tôi chia sẻ trên Discord của KiCad, tôi cũng nhận được phản hồi rằng tính năng Design Block của KiCad 9+ có thể liên quan đến hướng này