- Debian Linux đã khởi động trên một bo mạch thật chỉ dùng Intel 4004 4-bit năm 1971 làm CPU, cho thấy giới hạn của các vi xử lý cổ và mức cực đoan của việc phân tầng phần mềm
- Linux không chạy trực tiếp trên 4004, mà khởi động trên trình giả lập MIPS R3000/DECstation 2100 viết bằng assembly 4004; một phần đĩa và console được đơn giản hóa bằng hypercall và driver bán ảo hóa
- Do các hạn chế như ROM 4KB, phép toán 4-bit, không có phép toán logic, call stack nông và cách định địa chỉ đặc thù của RAM 4002, dự án phải dùng các cách vòng như ROM banking, lookup table, status nibble và RAM ảo dựa trên PSRAM
- Sau tối ưu hóa, thời gian dự kiến để khởi động Linux trên 4004 thật ở 740KHz là 4,76 ngày; bo mạch được chế tạo được ép xung lên 790KHz, khiến MIPS ảo chạy ở khoảng 74,73Hz
- Thành quả được thiết kế như một bo mạch nghệ thuật retro có thể treo tường, trang bị VFD 40x2, 32 LED PC, thẻ SD, SPI PSRAM và UART; mã nguồn cùng image đĩa được phát hành với điều kiện sử dụng phi thương mại
Khởi động Debian Linux trên 4004 thật
- Linux/4004 là dự án khởi động Debian Linux trên một bo mạch thật dùng Intel 4004 năm 1971 làm CPU duy nhất
- 4004 được giới thiệu là vi xử lý sản xuất thương mại đầu tiên trên thế giới, và dự án dùng chip Intel 4004 thật từ thập niên 1970
- Video trình diễn được tăng tốc thay đổi theo từng đoạn để bớt nhàm chán; đồng hồ và lịch hiển thị trong video là chính xác
- Một video có tính chất bản gốc, phát ở tốc độ tăng cố định, cũng được cung cấp riêng
Vì sao là 4004
- Năm 2012, việc chạy Linux trên vi điều khiển AVR 8-bit đã lập kỷ lục “chạy Linux trên cấu hình thấp nhất”, sau đó dự án LinuxCard thực dụng hơn cũng được thực hiện
- Năm 2023, khi xuất hiện nỗ lực phá kỷ lục dựa trên AVR và dự án khởi động Linux trên MOS 6510, mục tiêu chuyển sang một CPU cấp thấp hơn nữa
- Để đi xa hơn về quá khứ so với các ứng viên Intel 8080 và 8008, Intel 4004 năm 1971 đã được chọn
- Vì 4004 là chip 4-bit, nó có thể đặt ra một chuẩn thấp hơn CPU 8-bit một cách rõ ràng
Các hạn chế của Intel 4004
- 4004 hoạt động theo đơn vị 4-bit; hầu hết lệnh dài 1 byte và thực thi trong 8 chu kỳ clock
- Một số lệnh 2 byte cần 16 chu kỳ
- FIN là ngoại lệ: lệnh 1 byte nhưng mất 16 chu kỳ
- Tập lệnh không có các phép toán logic như AND, OR, XOR, về cơ bản xoay quanh ADD và SUB
- Cờ carry hoạt động theo cách đặc biệt: với đầu vào của SUB thì giống borrow, còn sau SUB thì giống not borrow; điều này đã được xác nhận trên phần cứng thật
- Các thanh ghi bên trong gồm 16 thanh ghi 4-bit, PC là 12-bit, và hardware return stack có 4 mức
- Vì entry trên đỉnh stack hiện tại được dùng làm PC, mức lồng hàm thực tế tối đa là 3
- Không có ngắt; cách gần nhất để xử lý sự kiện bên ngoài là polling chân TEST trong nhánh có điều kiện
Cấu trúc bộ nhớ và I/O
- 4004 không trực tiếp xử lý bản thân các lệnh bộ nhớ; các chip gắn trên bus như 4001/4002/4289/4265/4308 sẽ giải mã và thực thi lệnh
- 4001 là chip ROM có mask ROM 256 byte và cổng I/O 4-bit; nội dung ROM và cấu hình cổng I/O được cố định khi sản xuất
- 4002 là chip RAM có DRAM 320 bit, mạch refresh và cổng chỉ xuất 4-bit
- Một RAM bank có thể gồm 4 chip 4002
- Mỗi RAM bank có 256 nibble có thể định địa chỉ trực tiếp, cùng 64 status nibble được truy cập riêng
- 4289 là bộ điều khiển ROM kết hợp chức năng của 4008 và 4009, giúp kết nối 4004 với EEPROM/EPROM 5V tương đối dễ dàng
- Truy cập bộ nhớ cần quy trình nhiều bước như chọn bank, nạp địa chỉ vào cặp thanh ghi, gửi địa chỉ lên bus bằng SRC, rồi thực thi RDM/WRM
- Status nibble hữu ích để truy cập nhanh dữ liệu dùng thường xuyên, góp phần tăng tốc trình giả lập MIPS khoảng 30%
Chuẩn bị bo mạch phát triển và trình giả lập
- Bo mạch phát triển dùng để kiểm chứng ban đầu gồm clock generator 4201, CPU 4004, RAM 4002-1, bộ điều khiển ROM 4289 và ATMEGA48 đóng vai trò ROM
- Nguồn bắt đầu từ 5V; cực dương của bộ boost converter cách ly 5V-sang-10V được nối đất để tạo nguồn -10V cấp cho chip MCS-04
- Chương trình 4004 đầu tiên là đoạn mã nhấp nháy LED nối với output pin 0 của 4002, và đã hoạt động sau khi tăng giới hạn dòng
- Trước khi làm bo mạch thật, tác giả viết một trình giả lập 4004 tên u4004
- Nó giả lập không chỉ lõi 4004 mà còn cả thẻ SD ảo, SPI UART, VFD, bố trí 4002 và LED PC
- Mục đích là kiểm chứng trước trạng thái chân SPI và hoạt động ngoại vi, vốn khó debug trên phần cứng thật
Không chạy Linux trực tiếp mà giả lập MIPS
- Linux không thể chạy trực tiếp trên 4004
- Không có trình biên dịch C nhắm tới 4004, và xét các ràng buộc kiến trúc, việc đưa trực tiếp nhân Linux lên được cho là khó
- Lồng lời gọi, không gian địa chỉ ROM/RAM và giới hạn phép toán 4-bit ngăn cản việc chạy trực tiếp
- Thay vào đó, tác giả viết trình giả lập MIPS R3000 chạy trên 4004, rồi khởi động Linux dành cho DECstation 2100 trên đó
- MIPS được chọn vì dễ giả lập trong không gian mã 4004 hơn các ứng viên khác
- ARM có nhiều toán hạng shift tùy ý
- RISC-V được cho là sẽ chậm do cách định địa chỉ
- x86 có thể vượt quá 4KB chỉ riêng phần giải mã lệnh
- PPC quá phức tạp
- Mục tiêu ban đầu là đưa toàn bộ trình giả lập vào ROM 4KB mà 4004 có thể định địa chỉ cơ bản
Các cách vòng trong triển khai trình giả lập MIPS
- Chỉ riêng giải mã lệnh MIPS đã tiêu tốn đáng kể không gian ROM
- Dispatch table 64 opcode cấp cao nhất cần 128 byte
- Tính cả các sub-table bổ sung, phần giải mã chính cần 359 byte
- 32 thanh ghi 32-bit của MIPS là 1024 bit, tức 256 nibble theo góc nhìn 4004, chiếm trọn một RAM bank
- MIPS TLB vốn có 64 entry, nhưng vì Linux không yêu cầu chính xác 64 entry nên được giảm xuống 16 entry
- Số entry TLB được thiết kế để cũng có thể cấu hình thành 4, 8, 12 hoặc 16
- Vì 4004 không có phép toán logic, AND/OR/XOR/NOR được triển khai bằng phép cộng và carry, shift, vòng lặp
- Về sau, khi không gian ROM tăng lên, chúng được tối ưu bằng lookup table 256 entry
- Shift cũng phải được triển khai chỉ bằng lệnh xoay qua carry 1-bit của 4004, rồi sau đó được cải thiện bằng sao chép theo nibble và tối đa 3 lần bit shift
- Việc xử lý thanh ghi
$zerocủa MIPS tận dụng đặc tính circular return stack của 4004 để tiết kiệm không gian ROM- Khi đích là
$zero, thay vì return, mã chuyển sang xử lý lệnh tiếp theo, giảm 3 byte và 3 chu kỳ cho mỗi callsite
- Khi đích là
ROM banking và cải thiện hiệu năng
- Chỉ với ROM 4KB thì không thể chứa cả mã xử lý thẻ SD, PSRAM, VFD, UART, nên dự án dùng ROM 8KB chia thành hai bank
- Chuyển ROM bank được điều khiển bằng output pin của 4002, và các veneer được bố trí để call/return giữa các bank
- Sau khi không gian ROM tăng lên, việc tối ưu hiệu năng trở nên khả thi
- AND/OR/XOR lần lượt được triển khai bằng lookup table 256 entry
- Dùng lookup table nhân theo nibble giúp phép multiplication nhanh hơn 8 lần so với triển khai theo bit trước đó
- Lookup table cho phép toán logic tận dụng đặc tính JIN của 4004: khi JIN nằm ở cuối ROM page, nó sẽ jump theo page kế tiếp
- Bảng multiplication được triển khai bằng cách kết hợp đọc dữ liệu byte trong ROM bằng FIN và tránh xử lý entry 0
Cấu hình phần cứng cuối cùng
- Bo mạch cuối cùng được thiết kế như một bo mạch nghệ thuật thiên về linh kiện xuyên lỗ mang cảm giác thập niên 1970
- Bao gồm các đường trace vuông góc dày, không có via, lỗ để treo tường và màn hình VFD
- Các thành phần chính gồm
- CPU 4004 hoặc 4040
- clock generator 4201
- các chip RAM 4002
- ROM controller 4289
- EEPROM
- 1~2 SPI PSRAM
- khe thẻ SD
- SC16IS741A SPI UART
- VFD 40x2
- 32 đèn LED hiển thị PC
- SPI PSRAM được dùng làm RAM MIPS ảo
- PSRAM đầu tiên cần tối thiểu 4MB vì phải nạp kernel một cách liên tục
- PSRAM thứ hai có thể để trống hoặc lắp dung lượng bất kỳ từ 128KB trở lên
- VFD sử dụng Futaba M402SD10FJ, và tác giả được cho biết Noritake CU40025-UW6J tương thích
- UART được chọn là linh kiện dán bề mặt SC16IS741A do hạn chế điều khiển luồng của MAX3100, một ứng viên SPI UART dạng xuyên lỗ
Nguồn điện và level shifting
- Các linh kiện MCS-04 dùng mức điện áp đặc biệt thuộc hệ -15V và inverted logic
- Ở cấp hệ thống, sẽ đơn giản hơn nếu xem là cấp nguồn -10V và +5V
- Bo mạch nhận +5V qua USB-C edge connector, đồng thời tạo ra +3.3V và -10V
- Bộ step-down regulator +3.3V được cấu hình dựa trên LM2574
- Nguồn -10V đã được đổi từ MAX764 ở revision đầu tiên, vốn không cấp đủ dòng, sang cấu hình MAX774 cùng FET ngoài, diode lớn và inductor lớn
- Cuối cùng cấp được hơn 700mA ở -10V và ripple dưới 200mV
- Level shifting để chuyển output 4002 sang domain 3.3V khá khó, và được giải quyết bằng cách kết hợp pulldown 10K, resistor 2.7K, TVS clamp và chia áp bằng điện trở
Công cụ debug và lỗi thực tế
- Vì 4004 không có chức năng debug tích hợp, MCS-04 bus được capture trong thời gian dài bằng Saleae Logic
- Tác giả viết MCS-04 bus decoder để phân tích bus state, ROM address, ROM read value, disassembly, và các giá trị RAM/I/O read/write
- Sau đó decoder này được đóng góp cho Saleae và được đưa vào phần mềm Saleae thông thường
- Trên bo revision 1.1 từng có vấn đề ký tự xuất ra thỉnh thoảng bị hỏng
- Ví dụ
itrông nhưh,Ctrông nhưB, tức là bit thấp bị mất
- Ví dụ
- Phân tích cho thấy trong lúc kernel
memcpy(), ở chip 4002 lưu emulated$t1, bottom bit của một nibble cụ thể đôi lúc tụt từ 1 xuống 0 - Sau khi thay chip 4002 đó, output văn bản trở lại bình thường
Đường dẫn khởi động
- firmware trước tiên probe số chip nhớ ở RAM bank thứ ba để xác định số lượng TLB entry
- Sau đó khởi tạo VFD, UART và thẻ SD
- Nếu khởi tạo thẻ SD thất bại, nó hiển thị
"Failed to init SD card. Halting here and now!" - Chuỗi này là chuỗi duy nhất trong toàn bộ firmware
- Nếu khởi tạo thẻ SD thất bại, nó hiển thị
- firmware không có ROM ảo; nó tải sector đầu tiên của thẻ SD vào
0x80000000của RAM rồi nhảy tới đó - loader 446 byte ở sector đầu tiên tìm partition type
0xBBtrong partition table, đọc vào0x80001000rồi nhảy tới đó - loader thứ hai có kích thước khoảng 14KB và được viết bằng C
- mount active partition dưới dạng FAT12/16/32
- phân tích
vmlinuxnhư ELF, tải vào RAM và nhảy tới entrypoint - truyền machine type, magic value, RAM mapping và callback table cho early console printing
Truy cập đĩa và thẻ SD
- Truy cập đĩa dùng driver đĩa bán ảo hóa PVD giống dự án LinuxCard
- Thay vì emulation SII SCSI chip và SCSI disk bằng assembly 4004, hypercall sector read/write hoạt động như DMA từ góc nhìn của MIPS ảo
- Tổng RAM của bo Linux/4004 là 440 byte nếu tính cả status nibble, hoặc 352 byte nếu loại trừ
- MIPS register state và TLB đã chiếm phần lớn, nên không còn chỗ cho sector buffer 512 byte của thẻ SD
- Dữ liệu sector SD không được chứa trong RAM 4004; thay vào đó được đọc trực tiếp vào PSRAM, hoặc ghi từ PSRAM sang SD, bằng bus SPI riêng của thẻ SD và PSRAM
- Đọc hoặc ghi một sector SD mất hơn 1 giây một chút
- Yêu cầu timing khởi tạo ACMD41 của SD spec không thể đáp ứng bằng SPI bit-banging, nhưng các thẻ SD được thử nghiệm vẫn khởi tạo được ở 5KHz và khoảng cách từ 200ms trở lên
Tốc độ thực thi và kết quả tối ưu hóa
- Sau khi emulation thẻ SD thật và SPI PSRAM, thời gian khởi động ước tính ban đầu là 8,9 ngày trên 4004 ở 740KHz
- Các kết quả tối ưu hóa chính như sau
- Còn 8,4 ngày nhờ toán tử logic và multiplication lookup table
- Còn 7,25 ngày nhờ unroll vòng lặp gửi/nhận nibble PSRAM
- Còn 6,63 ngày nhờ specialized memory copy và unroll vòng lặp
- Còn 6,50 ngày nhờ loại bỏ vùng lưu lệnh hiện tại và theo dõi liveness
- Còn 6,19 ngày nhờ cải thiện shift
- Còn 6,01 ngày nhờ unroll vòng lặp gửi PSRAM address
- Còn 5,33 ngày nhờ thu gọn Linux kernel config, thiết lập dummy console 1x1 và dùng tiny init
- Còn 4,81 ngày nhờ loại bỏ hỗ trợ block device từ 2TB trở lên và vô hiệu hóa feature ext4
huge_files - Còn 4,76 ngày nhờ fast path riêng cho instruction fetch
- Thời gian boot 4,76 ngày tương ứng với máy MIPS khoảng 70Hz trên 4004 ở 740KHz
- Bo mạch được chế tạo dùng 4201 ở chế độ divide-by-7 và crystal 5.5296MHz, nên được overclock lên 790KHz
- instruction mix của 4004 trên bo Linux/4004 gồm 8,8% lệnh 16-cycle và 91,2% lệnh 8-cycle; tốc độ hiệu dụng là 90.640 instructions/s
- virtual timer interrupt là 16Hz, và IRQ được gửi mỗi 65.536 virtual instruction, khiến CPU ảo nhận diện là 1,05MHz
- MIPS guest được emulation thực tế đạt khoảng 70Hz ở 740KHz và khoảng 74,73Hz ở 790KHz
- Thời gian bị kéo dài 14.030 lần, tức 1 giây ảo tương đương khoảng 3 giờ 54 phút ngoài đời
Cấu hình Linux và trải nghiệm sử dụng
- Linux kernel được giảm xuống còn khoảng 2,5MB bằng cách loại bỏ các subsystem, filesystem, TCP/IP và những cấu hình không cần thiết khác
- Nếu chỉ dùng
init=/bin/sh, sẽ không có session,$PATH,/proc,/sys, v.v., nên tác giả viết tiny init/sbin/uMIPSinit- mount
/procvà/sys - thiết lập hostname và
$PATH - chạy lại
shmỗi khi nó kết thúc
- mount
- Chỉ với RAM 4,5MB, ví dụ chip 4MB + chip 512KB, cũng có thể boot tới shell prompt mà không cần swap
- Nếu bật swap, có thể build kernel source ngay trên chính thiết bị
- Dự kiến build kernel source sẽ mất nhiều năm
- Nhờ ext4 journal, kế hoạch là khi mất điện vẫn có thể khởi động lại, khôi phục filesystem và tiếp tục compilation
Mục tiêu như một bo mạch nghệ thuật
- Dự án này ngay từ đầu đã có một phần mục tiêu nghệ thuật
- Bo mạch được thiết kế để có thể treo tường, có VFD, retro-style PCB layout và LED PC
- Có kèm chương trình vẽ Mandelbrot set ở text mode trên VFD và serial port
- Phiên bản floating point
/root/mandelbrotcần Linux emulation phép toán dấu phẩy động, nên mất khoảng 30 ngày để vẽ ảnh 13 hàng x 40 cột - Phiên bản chỉ dùng số nguyên
/root/mandelbrot_nofphoàn tất trong vòng dưới 9 giờ
- Phiên bản floating point
Chi phí linh kiện và khả năng tái tạo
- Vì mục tiêu quan trọng là để người khác có thể tái tạo, nên tác giả tránh dùng 4265, vốn khó kiếm
- 4201 được chọn vì đơn giản hơn mạch clock thay thế, còn 4289 được chọn vì dễ kiếm hơn tổ hợp 4008+4009
- Bo mạch được thiết kế để có thể gắn cả 4040 thay cho 4004, và không sử dụng các chức năng bổ sung của 4040 nhằm duy trì khả năng tương thích với 4004
- Các chip 4002 cho TLB có thể chỉ gắn 1, 2, 3 hoặc 4 chip, tương ứng dùng làm TLB 4, 8, 12 hoặc 16 entry
- Số lượng TLB entry ít hơn sẽ làm giảm hiệu năng
- Bank tương ứng cũng phụ trách 16 bit cao của LED hiển thị PC, nên nếu chỉ gắn một phần thì một số LED sẽ không hoạt động
- Linh kiện thập niên 1970 khá đắt
- 4004 khoảng $250
- 4040 khoảng $60
- 4201 khoảng $50
- 4002-1 khoảng $7
- 4002-2 khoảng $25
- 4289 khoảng $70
- Linh kiện hiện đại tương đối rẻ; SPI VFD có thể khó kiếm, nhưng đã có trường hợp mua được trên eBay với giá $15
- Cũng hỗ trợ cấu hình không gắn VFD và chỉ tương tác qua serial port
Quá trình làm video
- Cảnh khởi động thực tế được tạo thành video bằng cách chụp ảnh trong khoảng 9 ngày
- Nếu chụp ảnh 1920x1080 mỗi 2 giây, dữ liệu tạo ra khoảng 1,76GB mỗi giờ; 9 ngày chụp tương đương khoảng 379GB và khoảng 388.000 file
- Các thiết bị Android gặp vấn đề treo hoặc quá nhiệt khi chụp trong thời gian dài; iPhone SE3 thì bản thân việc chụp ổn định, nhưng gặp vấn đề về dung lượng lưu trữ và offload ảnh
- Cuối cùng, tác giả dùng iPhone 12 Pro Max 512GB để chụp liên tục toàn bộ quá trình, sau đó mount trên Linux bằng ifuse rồi dùng
cp -Rvfđể sao chép khoảng 400.000 file trong hơn 10 giờ - Video cuối cùng được dựng bằng các lệnh ffmpeg, và các đoạn nhàm chán được xử lý với tốc độ phát thay đổi
- Tốc độ phát thay đổi từ 5FPS, tức 10x realtime, đến 960FPS, tức 1920x realtime
- Phiên bản riêng không biên tập là capture 0,5FPS, playback 60FPS, tương đương tốc độ 120x realtime
Tài liệu công khai và giấy phép
- Disk image cho thẻ SD được cung cấp dưới dạng tải xuống riêng
- Gói main download bao gồm các mục sau
- MCS-04 bus analyzer cho Saleae software
- Mã nguồn i4004 DECstation 2100 emulator
- Mã nguồn MIPS MBR và second-stage bootloader
- Kernel config và version info
- Mã nguồn u4004 emulator cho bo mạch Linux/4004
- Giấy phép là miễn phí cho sử dụng phi thương mại; sử dụng thương mại cần giấy phép riêng
- Với mọi hình thức sử dụng, phải ghi credit cho tác giả gốc trong cả source và binary form
2 bình luận
Tác giả bài gốc chính là người vừa bị kéo xuống khỏi sân khấu ở DEF CON vì vụ liên quan đến badge lần này. Tôi sẽ không đứng về phía nào, nhưng dù sao thì năng lực của ông ấy thực sự rất đáng nể.
Các ý kiến trên Hacker News
Chà, tôi từng nghĩ NetBSD hiện đại chạy trên m68030 15MHz, bus bộ nhớ 16-bit, RAM 10MB đã chậm rồi, nhưng cái này đúng là điên rồ
Nó cho thấy rất rõ rằng vào cuối thập niên 80 đến đầu thập niên 90, khi máy tính bắt đầu có bộ nhớ lưu trữ lâu dài, không gian địa chỉ mở và MMU, về cơ bản chúng ta đã đạt tới điện toán hiện đại
Amiga 3000 hay máy tính i80486 cũng có thể chạy những thứ giống máy tính hiện đại; ngày nay chúng chạy nhanh hơn nhiều hoặc có thêm những thứ khi đó chưa có như GPU, nhưng về mặt chức năng thì không khác biệt lớn
Thật hay khi Dmitry cho thấy có thể định nghĩa từ chức năng được một cách rộng rãi đến mức nào
Người ta gửi nước đi qua thư thật, và một ván có thể kéo dài vài tháng hoặc vài năm
Đến lúc nhận được thư trả lời thì có khi đã quên chiến lược ban đầu, khiến cờ vua có thêm một tầng độ khó nữa; dự án này về cơ bản là Linux qua thư
Đến khi có kết quả lệnh, có thể bạn đã quên vì sao mình chạy lệnh đó
Thực ra không phải cuối thập niên 80 đến đầu thập niên 90, mà khoảng cuối thập niên 1960 đã có thể làm được rồi
Có lẽ cũng có thể port Linux sang IBM Model 67 [1], và vì GCC đã có thể nhắm tới tập lệnh đó nên có khi còn dễ
MMU cũng đủ dùng; giới hạn tối đa 2MB bộ nhớ lõi nhanh đúng là khá căng, nhưng có lẽ cũng cùng hạng với cỗ máy 68030 kia, chỉ chậm hơn một chút
Ảo hóa toàn phần và các ranh giới bộ nhớ/I/O do phần cứng cưỡng chế cũng đã được phát minh từ sớm, nhưng phải mất thời gian các tính năng này mới đi xuống minicomputer và microcomputer, và còn lâu hơn nhiều nữa phần mềm đại chúng mới tận dụng được
[1] https://en.wikipedia.org/wiki/IBM_System/360_Model_67
Bất kỳ hệ thống Turing-complete nào cũng có thể chạy bất cứ thứ gì; có thể cực kỳ chậm, nhưng vẫn chạy được
Nếu có đủ thời gian thì ChatGPT cũng có thể chạy trên 4004
Nó giống như gắn một chiếc ô tô vào một bánh xe, rồi bánh xe đó có thêm ba bánh nữa
Huy hiệu người tham dự Hackaday Supercon 2002 (https://hackaday.com/2022/10/12/the-2022-supercon-badge-is-a...) đã triển khai một CPU 4-bit giả lập và một bảng điều khiển cho phép nhập lệnh trực tiếp rồi chạy/chạy từng bước
Trên bảng điều khiển có màn hình cho phép xem một trang bộ nhớ theo từng bit, nên việc hiện thực một game bắn phi thuyền trên đó thật sự rất vui
Việc so sánh kiến trúc Voya4 với 4004 cũng thú vị; có những thỏa hiệp tương tự, nhưng Voya4 có lợi thế từ 50 năm kinh nghiệm về tập lệnh CPU
Tuy nhiên cách của dimitygr không dùng được với huy hiệu đó, vì cả bộ nhớ chương trình và RAM đều nằm sẵn bên trong PIC24 thực thi trình giả lập CPU
Nhân tiện, CPU 4-bit vẫn còn được sản xuất và sử dụng. Nhiều điều khiển hồng ngoại sản xuất đại trà được lập trình bằng MCU 4-bit. Có thể xem datasheet tại https://www.emmicroelectronic.com/sites/default/files/produc...
Khi được hỏi liệu có thể chạy thứ gì đó trên một cỗ máy thiếu hiệu năng không, tôi thường lấy ví dụ AVR ra nói, giờ thì có thêm một ví dụ mới để dẫn link
Nhìn vào tần số và mức tiêu thụ điện, tôi cũng tò mò nó phát RF nhiều đến đâu, và liệu có thể phát hiện rồi giải mã bằng waterfall của SDR không
Tôi vẫn đang đọc, nhưng tới đoạn hiện tại thì thấy từ “soubroutine”, có vẻ là lỗi chính tả
Chà, dự án này chắc không hề rẻ. Nhờ các nhà sưu tầm trên eBay cả đấy
Và có lẽ đây là tình huống duy nhất mà tôi sẽ chọn LCD thay vì VFD
Nếu chạy một bản compile kéo dài vài năm, đến lúc xong thì VFD chắc đã bị burn-in nát bét
Tiếc là có vẻ nhân viên các trường đại học không đọc HN nhiều lắm
Chà, ấn tượng thật
Nhìn các bit PC cao là biết hiện đang chạy gì
Tái bút: Dù vậy vẫn nhanh hơn tải kernel bằng ISO ảo qua IPMI tệ hại của một server ở bên kia Internet ;D
nmtrênvmlinuxthì có thể dễ dàng ánh xạ sang hàm kernelSau khi vào user space, cũng có thể phân biệt binary chính (thấp hơn nhiều so với 0x01000000) và các thư viện chia sẻ (được nạp ở địa chỉ cao gần 0x77000000)
Cả boot lẫn chạy đều chậm đến đau khổ
Bài viết thật sự thú vị
Tôi từng đọc đôi chút về 4004 nên biết nó là một con chip kỳ lạ, nhưng mức độ khó hiểu thì vượt xa tưởng tượng
Giờ tôi muốn xem nếu làm CPU với cùng số transistor thì có thể làm tốt đến mức nào
Nó không ít hơn 6502 quá nhiều, và nếu là 8-bit thì lập trình có vẻ sẽ dễ hơn nhiều
Quay video mất 9 ngày, và tốn 4 giờ cho mỗi 1 giây giả lập
Và tôi cũng tò mò vì sao lại dùng Windows 95
Tôi cần một laptop có cổng serial thật, không phải USB, để quay video
Chiếc laptop này đáp ứng điều kiện và giá 20 đô trên eBay
Cá nhân tôi thấy Windows 2000 là bản Windows đẹp nhất, nên đã cài nó cho video demo
Thật sự rất ấn tượng
Mình ước kiến thức của mình đủ để hiểu được phần lớn dự án này, nhưng hiện tại thì với trình độ khoa học máy tính hạn chế của mình, nó quá khó
Dù vậy, điểm nổi bật mà mình có thể hiểu hoàn toàn là “Section 14.b & 14.c - Getting the data...”
Chỉ cần vỏn vẹn 400.000 tệp, khoảng 275 bức ảnh mỗi ngày trong 4 năm là đủ
Thật là một thời đại kỳ lạ: hiệu năng xử lý, lưu trữ và mạng thì dư dả đến vậy, nhưng các ứng dụng đồng bộ media có vẻ được dùng nhiều nhất lại bị treo hoặc đồng bộ chậm, AirDrop thì thất bại, còn chức năng UI “chọn tất cả” cũng không có :)
Những việc như thế này cần một thứ kiểu như giải Nobel
Cũng có thể thêm một hạng mục ghi nhận các ứng dụng kỳ quặc và khác thường của khoa học máy tính
Trong phần “Why MIPS?”, có câu “một số chắc chắn sẽ chậm vì cơ chế định địa chỉ tệ hại (RISCV)”; vậy cơ chế định địa chỉ RISC-V có vấn đề gì?
Trong một số lệnh của RISC-V, các bit giá trị tức thời không được lưu liên tiếp
Trong lệnh MIPS, các bit giá trị cho cộng tức thời, nạp hằng, rẽ nhánh, v.v. luôn được lưu theo thứ tự
Còn trong RISC-V, đôi khi các bit bị xáo trộn
Ví dụ, trong nhánh vô điều kiện, các bit offset đích được lưu theo thứ tự bit 19, bits 9-0, bit 10, bits 18-11
Với phần cứng thì chỉ cần nối dây đúng là được, nên chi phí sắp xếp lại gần như bằng không; nhưng trong phần mềm thì cần rất nhiều thao tác bit để chỉnh lại
Lý do RISC-V làm như vậy là để đơn giản hóa thiết kế phần cứng