1 điểm bởi GN⁺ 2025-11-27 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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

 
GN⁺ 2025-11-27
Ý 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

    • Nghe vậy thật vinh dự
  • 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

    • Tôi là tác giả. Tôi lấy cảm hứng từ video bản port Vectrex
      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

    • Nếu áp dụng thực thi suy đoán (speculative execution) thì có thể tăng tốc. Chỉ là sẽ cần một bộ dự đoán nhánh tốt
    • Với 15 FPS thì sẽ tốn khoảng 80~100 euro mỗi giây, mà đa số xưởng PCB có số lượng đặt tối thiểu là 5 tấm, nên có thể chơi ở tốc độ gấp 5 lần
  • 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

    • Nếu vậy thì sao không thử quét raster analog, tức là Slow-scan TV (SSTV)
      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 không dùng socket API. Đây là plugin thông thường chạy trên v6 trở lê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