1 पॉइंट द्वारा GN⁺ 2024-09-21 | 2 टिप्पणियां | WhatsApp पर शेयर करें
  • 1971 के 4-bit Intel 4004 को ही CPU के रूप में इस्तेमाल करने वाले वास्तविक बोर्ड पर Debian Linux बूट हुआ, जिससे पुराने microprocessor की सीमाएँ और software layering की चरम स्थिति दिखती है
  • Linux सीधे 4004 पर नहीं चलता; यह 4004 assembly में बने MIPS R3000/DECstation 2100 emulator पर बूट होता है, और disk व console के कुछ हिस्सों को hypercall और paravirtualization drivers से सरल बनाया गया है
  • 4KB ROM सीमा, 4-bit operations, logic operations की अनुपस्थिति, उथला call stack, और 4002 RAM की खास address mapping के कारण ROM banking, lookup table, status nibble, PSRAM-आधारित virtual RAM जैसे workaround ज़रूरी पड़े
  • Optimization के बाद वास्तविक 4004 के 740KHz मानक पर Linux boot का अनुमानित समय 4.76 दिन है, और बनाए गए board को 790KHz तक overclock किया गया है, जहाँ virtual MIPS लगभग 74.73Hz पर चलता है
  • परिणाम को दीवार पर टांगे जा सकने वाले retro art board के रूप में design किया गया है; इसमें 40x2 VFD, 32 PC LEDs, SD card, SPI PSRAM, UART हैं, और source व disk images गैर-व्यावसायिक उपयोग की शर्तों के साथ जारी किए गए हैं

वास्तविक 4004 पर Debian Linux boot

  • Linux/4004 एक project है जिसमें 1971 के Intel 4004 को इकलौते CPU के रूप में इस्तेमाल करने वाले वास्तविक board पर Debian Linux boot किया गया
  • 4004 को दुनिया का पहला commercially produced microprocessor बताया जाता है, और project में 1970s के वास्तविक Intel 4004 chips इस्तेमाल किए गए
  • Demo video में ऊब कम करने के लिए अलग-अलग segments में variable speed-up लगाया गया है, और video में दिख रही clock व calendar सही हैं
  • स्थिर speed-up पर चलने वाला original-style video भी अलग से उपलब्ध कराया गया है

4004 ही क्यों

  • 2012 में 8-bit AVR microcontroller पर Linux चलाकर “सबसे कम specification पर Linux चलाने” का record बनाया गया था, और बाद में अधिक practical LinuxCard project भी किया गया
  • 2023 में AVR-आधारित record तोड़ने की कोशिश और MOS 6510 पर Linux boot करने का project सामने आने के बाद और भी निचले स्तर का CPU लक्ष्य बना
  • उम्मीदवार Intel 8080 और 8008 से भी पीछे जाने के लिए 1971 का Intel 4004 चुना गया
  • 4004 एक 4-bit chip है, इसलिए 8-bit CPU से कम मानक को स्पष्ट रूप से स्थापित किया जा सकता है

Intel 4004 की सीमाएँ

  • 4004 4-bit unit में काम करता है, और अधिकांश instructions 1 byte की होती हैं व 8 clock cycles में execute होती हैं
    • कुछ 2-byte instructions को 16 cycles चाहिए
    • FIN 1-byte instruction है, लेकिन 16 cycles लेने वाला exception है
  • Instruction set में AND, OR, XOR जैसे logical operations नहीं हैं, और मूल रूप से ADD व SUB केंद्र में हैं
  • carry flag SUB input में borrow की तरह, और SUB के बाद not borrow की तरह व्यवहार करता है; यह एक असामान्य तरीका है और वास्तविक hardware पर confirm किया गया
  • Internal registers 4-bit के 16 हैं, PC 12-bit है, और hardware return stack 4 levels का है
    • मौजूदा top stack entry को PC के रूप में इस्तेमाल किया जाता है, इसलिए वास्तविक function nesting अधिकतम 3 levels तक है
  • Interrupts नहीं हैं, और conditional branch में TEST pin को poll करने का तरीका external events handle करने के सबसे करीब है

Memory और I/O structure

  • 4004 memory instructions को खुद सीधे process नहीं करता; bus से जुड़े 4001/4002/4289/4265/4308 जैसे chips instructions decode और execute करते हैं
  • 4001 एक ROM chip है जिसमें 256-byte mask ROM और 4-bit I/O port होता है; ROM content और I/O port configuration manufacturing के समय fixed होती है
  • 4002 एक RAM chip है जिसमें 320-bit DRAM, refresh circuit, और 4-bit output-only port होता है
    • एक RAM bank 4 4002 chips से बन सकता है
    • हर RAM bank में direct addressable 256 nibbles और अलग से access होने वाले 64 status nibbles होते हैं
  • 4289 एक ROM controller है जो 4008 और 4009 की functionality को जोड़ता है, जिससे 4004 को 5V EEPROM/EPROM से अपेक्षाकृत आसानी से जोड़ा जा सकता है
  • Memory access के लिए bank select, register pair में address load करना, SRC से bus पर address भेजना, RDM/WRM execute करना जैसी multi-step प्रक्रिया चाहिए
    • status nibble अक्सर इस्तेमाल होने वाले data तक तेज़ access में उपयोगी था, और MIPS emulator की speed लगभग 30% बढ़ाने में योगदान देता है

Development board और emulator की तैयारी

  • शुरुआती verification development board 4201 clock generator, 4004 CPU, 4002-1 RAM, 4289 ROM controller, और ROM की भूमिका निभाने वाले ATMEGA48 से बना था
  • Power 5V से शुरू होती है, और isolated 5V-to-10V boost converter के positive terminal को ground कर -10V power बनाकर MCS-04 chips को supply की जाती है
  • पहला 4004 program 4002 output pin 0 से जुड़े LED को blink कराने वाला code था, और current limit बढ़ाने के बाद यह चला
  • वास्तविक board बनाने से पहले u4004 नाम का 4004 emulator लिखा गया
    • यह सिर्फ 4004 core ही नहीं, बल्कि virtual SD card, SPI UART, VFD, 4002 layout, और PC LEDs तक emulate करता है
    • उद्देश्य था कि वास्तविक hardware पर debug करना मुश्किल SPI pin states और peripheral behavior को पहले verify किया जाए

Linux को सीधे चलाने के बजाय MIPS emulate करना

  • Linux 4004 पर सीधे नहीं चल सकता
    • 4004 target C compiler नहीं है, और architecture constraints के कारण Linux kernel को सीधे चढ़ाना मुश्किल माना गया
    • call nesting, ROM/RAM address space, और 4-bit operation limits direct execution को रोकते हैं
  • इसके बजाय 4004 पर MIPS R3000 emulator लिखा गया, और उसके ऊपर DECstation 2100 के लिए Linux boot किया गया
  • MIPS को दूसरे उम्मीदवारों की तुलना में 4004 code space के भीतर emulate करना आसान होने के कारण चुना गया
    • ARM में arbitrary shift operands बहुत हैं
    • RISC-V को addressing method के कारण धीमा माना गया
    • x86 में सिर्फ instruction decoding भी 4KB से आगे जा सकती है
    • PPC बहुत complex है
  • शुरुआती लक्ष्य यह था कि 4004 द्वारा मूल रूप से address की जा सकने वाली 4KB ROM के भीतर पूरा emulator रखा जाए

MIPS emulator implementation में workarounds

  • केवल MIPS instruction decoding में ही काफी ROM space खर्च होता है
    • 64 top-level opcodes की dispatch table को 128 bytes चाहिए
    • अतिरिक्त sub-tables सहित main decoding के लिए 359 bytes चाहिए थे
  • MIPS के 32 32-bit registers 1024 bits, यानी 4004 के नजरिए से 256 nibbles हैं, और एक RAM bank घेरते हैं
  • MIPS TLB में मूल रूप से 64 entries होती हैं, लेकिन Linux को exactly 64 की जरूरत नहीं होने से इसे घटाकर 16 entries कर दिया गया
    • TLB entry count को 4, 8, 12, 16 entries वाली configurations में भी संभव बनाया गया
  • 4004 में logic operations नहीं होने से AND/OR/XOR/NOR को addition और carry, shift, loops से implement किया गया
    • बाद में ROM space बढ़ने के बाद 256-entry lookup table से optimize किया गया
  • shift भी 4004 की 1-bit carry के जरिए rotate instructions से ही implement करना पड़ा, और बाद में nibble-level copy व अधिकतम 3 bit shifts से सुधारा गया
  • MIPS के $zero register handling में 4004 के circular return stack की विशेषता का उपयोग कर ROM space बचाया गया
    • destination $zero होने पर return न करके next instruction processing पर जाने के तरीके से हर callsite पर 3 bytes और 3 cycles बचे

ROM banking और performance सुधार

  • सिर्फ 4KB ROM में SD card, PSRAM, VFD, UART आदि संभालने वाला code नहीं आ सकता था, इसलिए 8KB ROM को दो banks में बाँटकर इस्तेमाल किया गया
  • ROM bank switching को 4002 output pin से control किया गया, और banks के बीच call/return के लिए veneer रखा गया
  • ROM space बढ़ने के बाद performance optimization संभव हुआ
    • AND/OR/XOR को अलग-अलग 256-entry lookup table से implement किया गया
    • nibble multiplication lookup table का इस्तेमाल कर multiplication पहले के bit-level implementation से 8 गुना तेज़ हो गया
  • Logic operation lookup table ने 4004 के JIN की उस विशेषता का इस्तेमाल किया कि अगर वह ROM page के अंत में हो, तो jump next page के आधार पर करता है
  • Multiplication table को FIN से ROM के byte data पढ़ने के तरीके और 0 entry handling से बचाव को मिलाकर implement किया गया

अंतिम हार्डवेयर कॉन्फ़िगरेशन

  • अंतिम बोर्ड को 1970 के दशक जैसा एहसास देने वाले through-hole केंद्रित art board के रूप में design किया गया
    • इसमें मोटे right-angle traces, कोई via नहीं, wall-mounting holes, और VFD display शामिल हैं
  • मुख्य components इस प्रकार हैं
    • 4004 या 4040 CPU
    • 4201 clock generator
    • 4002 RAM chips
    • 4289 ROM controller
    • EEPROM
    • 1~2 SPI PSRAM
    • SD card slot
    • SC16IS741A SPI UART
    • 40x2 VFD
    • 32 PC display LEDs
  • SPI PSRAM को virtual MIPS RAM के रूप में इस्तेमाल किया जाता है
    • पहला PSRAM kernel को लगातार load करना पड़ता है, इसलिए कम से कम 4MB की जरूरत होती है
    • दूसरा PSRAM खाली छोड़ा जा सकता है या 128KB से अधिक किसी भी size में लगाया जा सकता है
  • VFD के लिए Futaba M402SD10FJ इस्तेमाल किया गया, और बताया गया कि Noritake CU40025-UW6J compatible है
  • UART को through-hole SPI UART candidate MAX3100 की flow control constraints के कारण SC16IS741A surface-mount part के रूप में चुना गया

पावर और level shifting

  • MCS-04 parts -15V series के असामान्य voltages और inverted logic का इस्तेमाल करते हैं
    • system के स्तर पर इसे -10V और +5V supply मानना ज्यादा सरल है
  • बोर्ड USB-C edge connector से +5V लेता है, और +3.3V तथा -10V भी generate करता है
  • +3.3V step-down regulator LM2574 आधारित configuration में बनाया गया है
  • -10V power के लिए पहले revision का MAX764 पर्याप्त current supply नहीं कर पाया, इसलिए इसे MAX774, external FET, बड़े diode, और बड़े inductor configuration में बदला गया
    • अंतिम रूप में यह -10V पर 700mA से अधिक supply करता है और ripple 200mV से कम है
  • 4002 output को 3.3V domain में बदलने वाली level shifting मुश्किल थी, और इसे 10K pulldown, 2.7K resistor, TVS clamp, और resistive divider के संयोजन से हल किया गया

debugging tools और असली defects

  • 4004 में built-in debugging feature नहीं है, इसलिए Saleae Logic से MCS-04 bus को लंबे समय तक capture किया गया
  • MCS-04 bus decoder लिखकर bus state, ROM address, ROM read value, disassembly, RAM/I/O read/write values का analysis किया गया
    • बाद में इसे Saleae में contribute किया गया और सामान्य Saleae software में शामिल किया गया
  • revision 1.1 board में output characters कभी-कभी खराब दिखने की समस्या थी
    • उदाहरण के लिए i का h और C का B दिखना, यानी lower bit गायब हो जाना
  • analysis में पाया गया कि kernel memcpy() के दौरान emulated $t1 stored वाले 4002 chip में किसी खास nibble का bottom bit कभी-कभी 1 से 0 पर गिर जाता था
  • उस 4002 को बदलने के बाद text output सामान्य हो गया

boot path

  • firmware पहले तीसरे RAM bank के memory chips की संख्या probe करके TLB entries की संख्या पता करता है
  • इसके बाद VFD, UART, और SD card को initialize करता है
    • SD card initialization fail होने पर "Failed to init SD card. Halting here and now!" दिखाता है
    • यह string पूरे firmware में अकेली string है
  • firmware में virtual ROM नहीं रखा गया; SD card का पहला sector RAM के 0x80000000 पर load करके jump किया जाता है
  • पहले sector का 446-byte loader partition table में type 0xBB partition ढूंढता है, उसे 0x80001000 पर read करता है और jump करता है
  • दूसरा loader लगभग 14KB का है और C में लिखा गया है
    • active partition को FAT12/16/32 के रूप में mount करता है
    • vmlinux को ELF के रूप में parse करके RAM में load करता है और entrypoint पर jump करता है
    • machine type, magic value, RAM mapping, और early console printing के लिए callback table pass करता है

disk और SD card access

  • disk access LinuxCard project जैसे PVD paravirtualized disk driver का इस्तेमाल करता है
  • 4004 assembly में SII SCSI chip और SCSI disk को emulate करने के बजाय, sector read/write hypercall virtual MIPS के नजरिए से DMA की तरह काम करता है
  • Linux/4004 board की कुल RAM status nibble सहित 440 bytes है, और उसे छोड़ने पर 352 bytes है
    • MIPS register state और TLB दोनों बड़ी जगह लेते हैं, इसलिए SD card के 512-byte sector buffer के लिए जगह नहीं है
  • SD sector data को 4004 RAM में नहीं रखा जाता; SD card और PSRAM की अलग SPI bus का इस्तेमाल करके सीधे PSRAM में read किया जाता है या PSRAM से SD में लिखा जाता है
  • एक SD sector read या write करने में लगभग 1 second से थोड़ा ज्यादा लगता है
  • SD spec की ACMD41 initialization timing requirements bit-banging SPI से पूरी नहीं हो सकीं, लेकिन test किए गए SD cards 5KHz और 200ms से अधिक interval पर भी initialize हो गए

execution speed और optimization results

  • वास्तविक SD card और SPI PSRAM को emulate करने के बाद शुरुआती अनुमानित boot time 740KHz 4004 के आधार पर 8.9 दिन था
  • मुख्य optimization results इस प्रकार हैं
    • logical operations और multiplication lookup table से 8.4 दिन
    • PSRAM nibble send/receive loop unrolling से 7.25 दिन
    • specialized memory copy और loop unrolling से 6.63 दिन
    • current instruction storage area हटाने और liveness tracking से 6.50 दिन
    • shift improvements से 6.19 दिन
    • PSRAM address sending loop unrolling से 6.01 दिन
    • Linux kernel config घटाने, dummy console 1x1 setting, और tiny init इस्तेमाल करने से 5.33 दिन
    • 2TB से बड़े block device support हटाने और ext4 huge_files feature disable करने से 4.81 दिन
    • instruction fetch-only fast path से 4.76 दिन
  • 4.76 दिन का boot 740KHz 4004 के आधार पर लगभग 70Hz MIPS machine के बराबर है
  • बनाए गए board में 4201 को divide-by-7 mode में इस्तेमाल किया गया और 5.5296MHz crystal के साथ 790KHz पर overclock किया गया
  • Linux/4004 board का 4004 instruction mix 16-cycle instructions 8.8%, 8-cycle instructions 91.2% है, और effective speed 90,640 instructions/s है
  • virtual timer interrupt 16Hz है और हर 65,536 virtual instructions पर IRQ deliver करता है, जिससे virtual CPU इसे 1.05MHz के रूप में पहचानता है
    • वास्तविक emulated MIPS guest 740KHz पर लगभग 70Hz, और 790KHz पर लगभग 74.73Hz है
    • समय 14,030 गुना फैल जाता है, और virtual 1 second असल दुनिया में लगभग 3 घंटे 54 मिनट के बराबर है

Linux configuration और user experience

  • Linux kernel को गैर-जरूरी subsystems, filesystems, TCP/IP आदि settings हटाकर लगभग 2.5MB तक घटाया गया
  • सिर्फ init=/bin/sh इस्तेमाल करने पर session, $PATH, /proc, /sys आदि नहीं होते, इसलिए tiny init /sbin/uMIPSinit लिखा गया
    • /proc और /sys को mount करता है
    • hostname और $PATH set करता है
    • sh exit होने पर हर बार उसे फिर से run करता है
  • 4.5MB RAM, जैसे 4MB chip + 512KB chip, से भी बिना swap के shell prompt तक boot किया जा सकता है
  • swap enable करने पर device पर ही kernel source build किया जा सकता है
    • kernel source build में कई साल लगने का अनुमान है
    • ext4 journal की वजह से power cut होने पर भी reboot के बाद filesystem recover करके compilation फिर शुरू करने की योजना है

art board के रूप में लक्ष्य

  • इस project में शुरुआत से ही आंशिक रूप से artistic goal था
  • board को दीवार पर टांगे जाने योग्य design किया गया, और इसमें VFD, retro-style PCB layout, और PC LEDs हैं
  • VFD और serial port पर Mandelbrot set को text mode में draw करने वाला program शामिल है
    • floating point version /root/mandelbrot में Linux को floating-point operations emulate करने पड़ते हैं, इसलिए 13 rows x 40 columns image draw करने में लगभग 30 दिन लगते हैं
    • integer-only version /root/mandelbrot_nofp 9 घंटे के भीतर पूरा हो जाता है

पार्ट्स की लागत और दोबारा बनाने की क्षमता

  • चूंकि एक अहम लक्ष्य यह था कि दूसरे लोग भी इसे दोबारा बना सकें, इसलिए मुश्किल से मिलने वाले 4265 से बचा गया
  • 4201 को इसलिए चुना गया क्योंकि यह वैकल्पिक clock circuit से सरल है, और 4289 को इसलिए चुना गया क्योंकि यह 4008+4009 संयोजन की तुलना में आसानी से मिलता है
  • बोर्ड को इस तरह डिज़ाइन किया गया कि 4004 की जगह 4040 भी लगाया जा सके, और 4040 की अतिरिक्त सुविधाओं का उपयोग नहीं किया गया ताकि 4004 compatibility बनी रहे
  • TLB के लिए 4002 chips केवल 1, 2, 3 या 4 लगाए जा सकते हैं, जिन्हें क्रमशः 4, 8, 12, 16 entry TLB के रूप में इस्तेमाल किया जा सकता है
    • TLB entries की संख्या कम होने पर performance घटती है
    • वही bank PC display LED के high 16 bits के लिए भी जिम्मेदार है, इसलिए केवल कुछ chips लगाने पर कुछ LEDs काम नहीं करेंगी
  • 1970 के दशक के parts महंगे हैं
    • 4004 लगभग $250
    • 4040 लगभग $60
    • 4201 लगभग $50
    • 4002-1 लगभग $7
    • 4002-2 लगभग $25
    • 4289 लगभग $70
  • आधुनिक parts अपेक्षाकृत सस्ते हैं, और SPI VFD मिलना मुश्किल हो सकता है, लेकिन eBay पर $15 में मिलने का एक उदाहरण है
  • VFD लगाए बिना केवल serial port के जरिए interaction वाली configuration भी supported है

वीडियो बनाने की प्रक्रिया

  • वास्तविक booting scene को लगभग 9 दिनों तक photos लेकर video में बदला गया
  • 1920x1080 photos हर 2 सेकंड में लेने पर प्रति घंटे लगभग 1.76GB data बनता है, और 9 दिनों की shooting में लगभग 379GB तथा करीब 3,88,000 files बनती हैं
  • Android devices में लंबे समय तक shooting के दौरान hang या overheating की समस्याएं आईं, और iPhone SE3 पर shooting तो stable थी, लेकिन storage और photos offload करने की समस्याएं थीं
  • अंत में 512GB iPhone 12 Pro Max का उपयोग करके पूरी चीज़ को लगातार shoot किया गया, फिर Linux में ifuse से mount कर cp -Rvf से लगभग 4,00,000 files को 10 घंटे से अधिक समय में copy किया गया
  • अंतिम video ffmpeg commands से बनाया गया, और उबाऊ हिस्सों को variable speed-up के साथ process किया गया
    • playback speed 5FPS, यानी 10x realtime से लेकर 960FPS, यानी 1920x realtime तक बदलती है
    • अलग unedited version 0.5FPS capture, 60FPS playback के साथ 120x realtime speed पर है

सार्वजनिक सामग्री और लाइसेंस

  • SD card के लिए disk image अलग download के रूप में दी गई है
  • main download में ये शामिल हैं
    • Saleae software के लिए MCS-04 bus analyzer
    • i4004 DECstation 2100 emulator source
    • MIPS MBR और second-stage bootloader source
    • kernel config और version info
    • Linux/4004 board के लिए u4004 emulator source
  • license गैर-व्यावसायिक उपयोग के लिए मुफ्त है, और commercial use के लिए अलग license चाहिए
  • किसी भी उपयोग में source और binary form में मूल निर्माता को credit देना होगा

2 टिप्पणियां

 
y15un 2024-09-21

लगता है मूल पोस्ट के लेखक वही शख्स हैं जिन्हें इस बार DEF CON में badge से जुड़े मामले में स्टेज से हटाया गया था। मैं किसी का पक्ष नहीं लूंगा, लेकिन उनकी काबिलियत सच में कमाल की है।

 
GN⁺ 2024-09-21
Hacker News टिप्पणियाँ
  • वाह, 15MHz m68030, 16-बिट memory bus, RAM 10MB पर modern NetBSD को मैं धीमा समझता था, लेकिन यह तो सच में पागलपन है
    यह अच्छी तरह दिखाता है कि 80 के दशक के अंत से 90 के दशक की शुरुआत में, जब कंप्यूटरों में permanent storage, खुला address space, और MMU आने लगे, तब वे व्यावहारिक रूप से modern computing तक पहुँच गए थे
    Amiga 3000 या i80486 कंप्यूटर भी modern कंप्यूटरों जैसी चीज़ें चला सकते हैं, और आज वे बस बहुत तेज़ चलती हैं या उनमें उस समय न होने वाली GPU जैसी चीज़ें हैं, लेकिन कार्यात्मक रूप से बड़ा अंतर नहीं है
    यह अच्छा है कि Dmitry दिखाता है कि functional शब्द को कितनी ढील से परिभाषित किया जा सकता है

    • अमेरिका में भी ऐसा था या नहीं, पता नहीं, लेकिन 70–80 के दशक के सोवियत संघ में correspondence chess बहुत लोकप्रिय था
      लोग सचमुच डाक से चालें भेजते थे, और एक game कई महीनों या कई सालों तक चल सकती थी
      जवाब आने तक आप अपनी मूल रणनीति भूल सकते थे, जिससे chess में एक और कठिनाई जुड़ जाती थी, और यह प्रोजेक्ट मूलतः correspondence Linux है
      command output आने तक आप यह भी भूल सकते हैं कि वह command चलाया ही क्यों था
    • 15MHz m68030, 16-बिट memory bus, RAM 10MB तो क्या वह Mac LC II है? :)
      80 के दशक के अंत या 90 के दशक की शुरुआत नहीं, असल में यह 1960 के दशक के अंत तक भी संभव था
      Linux को IBM Model 67 [1] पर port करना भी संभव लगता है, और GCC पहले से ही उस instruction set को target कर सकता है, इसलिए शायद आसान भी हो
      MMU भी पर्याप्त है, हालाँकि तेज़ core memory की अधिकतम 2MB की सीमा कड़ी है, लेकिन वह 68030 मशीन के समान श्रेणी में, बस थोड़ी धीमी होगी
      full virtualization और hardware द्वारा लागू memory और I/O boundaries भी शुरुआत में ही आविष्कृत हो गए थे, लेकिन ऐसी सुविधाओं को minicomputer और microcomputer तक नीचे आने में समय लगा, और popular software द्वारा उनका उपयोग होने में तो उससे भी अधिक समय लगा
      [1] https://en.wikipedia.org/wiki/IBM_System/360_Model_67
    • यह मूलतः Turing completeness की अवधारणा है
      कोई भी Turing-complete system कुछ भी चला सकता है; बहुत धीमा हो सकता है, लेकिन चला सकता है
      समय हो तो ChatGPT भी 4004 पर चलाया जा सकता है
    • multicore काफ़ी बड़ा functional अंतर है
      जैसे किसी पहिए में कार जोड़ देने से तीन और पहिए मिल जाएँ
  • Hackaday Supercon 2002 का attendee badge(https://hackaday.com/2022/10/12/the-2022-supercon-badge-is-a...) ने एक virtual 4-bit CPU और ऐसा control panel implement किया था जिसमें आप instructions सीधे दर्ज करके उन्हें run या single-step कर सकते थे
    control panel पर memory के एक page को bit level पर देखने वाली screen थी, इसलिए उसके ऊपर एक space shooting game बनाना वाकई मज़ेदार था
    Voya4 architecture की 4004 से तुलना करना भी दिलचस्प था; कुछ समान trade-offs थे, लेकिन Voya4 के पास 50 साल के CPU instruction set अनुभव का लाभ है
    लेकिन dimitygr का तरीका उस badge पर काम नहीं करता, क्योंकि CPU emulator को implement करने वाले PIC24 के अंदर ही ROM और RAM दोनों built-in हैं
    वैसे, 4-bit CPU आज भी बनाए और उपयोग किए जाते हैं। बड़े पैमाने पर बनने वाले कई infrared remote 4-bit MCU से program किए जाते हैं। datasheet के लिए https://www.emmicroelectronic.com/sites/default/files/produc... देखें

    • 2022 है
  • कमज़ोर performance वाली मशीन पर कुछ चल सकता है या नहीं, यह सवाल आने पर मैं अक्सर AVR example देता था, लेकिन अब लिंक करने के लिए नया example मिल गया
    frequency और power consumption को देखते हुए, यह कितना RF छोड़ता होगा, और क्या उसे SDR के waterfall में detect और decode किया जा सकता है, यह जानने की जिज्ञासा है
    अभी पढ़ ही रहा हूँ, लेकिन इस बिंदु तक “soubroutine” शब्द दिखा, जो शायद typo है

  • वाह, यह कोई सस्ता खत्म होने वाला प्रोजेक्ट नहीं रहा होगा। eBay collectors की मेहरबानी
    और शायद यह वही एक स्थिति है जहाँ मैं VFD की जगह LCD चुनता
    अगर कई साल चलने वाला compile चलाते, तो उसके खत्म होने तक VFD पर burn-in बहुत बुरा हो गया होता

    • मेरे हिसाब से यह honorary doctorate पाने लायक प्रोजेक्ट है
      अफ़सोस, लगता है विश्वविद्यालय के staff HN इतना नहीं पढ़ते
  • वाह, कमाल है
    ऊँचे PC bits देखकर पता चलता है कि इस समय क्या चल रहा है
    प.स.: फिर भी यह इंटरनेट के पार किसी server के बेकार IPMI पर virtual ISO से kernel load करने से तेज़ है ;D

    • boot के दौरान LEDs देखते हुए अगर vmlinux पर nm चलाएँ, तो उसे kernel functions से आसानी से map किया जा सकता है
      user space में जाने के बाद main binary (0x01000000 से बहुत नीचे) और shared libraries (0x77000000 के आसपास के ऊँचे addresses पर load होती हैं) में भी अंतर किया जा सकता है
    • इंटरनेट के पार server के घटिया IPMI पर virtual ISO से kernel load करने की बात ने Dell M1000e blade server को Raspberry Pi पर चल रही NFS-hosted ISO से boot कराने की याद दिला दी
      boot और run दोनों ही दर्दनाक रूप से धीमे थे
  • यह सचमुच बहुत दिलचस्प लेख था
    4004 के बारे में थोड़ा पढ़ा था, इसलिए पता था कि यह अजीब chip है, लेकिन इसकी esotericism की मात्रा कल्पना से परे है
    अब यह देखने की इच्छा हो रही है कि इसी transistor count के साथ आज CPU कितना अच्छा बनाया जा सकता है
    यह 6502 से इतना कम भी नहीं है, और अगर 8-bit हो तो programming बहुत आसान लगती है

    • अगर इसे transistors से बनाया जाए, तो मैं अपना MIPS emulator उस पर port करूँगा :)
  • वीडियो शूट करने में 9 दिन लगे, और emulation के 1 second पर 4 घंटे लगे
    और यह भी जिज्ञासा है कि Windows 95 क्यों इस्तेमाल किया जा रहा है

    • यह Windows 2000 है
      वीडियो के लिए मुझे ऐसा laptop चाहिए था जिसमें असली serial port हो, USB नहीं
      यह laptop उस शर्त पर खरा उतरा और eBay पर 20 डॉलर में मिला
      मुझे व्यक्तिगत रूप से Windows 2000 सबसे सुंदर Windows लगता है, इसलिए demo video के लिए इसे install किया था
    • छोटी सी सुधार के लिए माफ़ करें, लेकिन वीडियो में laptop Windows 2000 जैसा दिखता है
  • वाकई कमाल है
    काश मेरा ज्ञान इतना बढ़ जाए कि मैं इस प्रोजेक्ट का ज़्यादातर हिस्सा समझ सकूँ, लेकिन अभी मेरी सीमित computer science समझ के लिए यह बहुत कठिन था
    फिर भी जो हिस्सा मैं पूरी तरह समझ पाया, वह “Section 14.b & 14.c - Getting the data...” था
    सिर्फ 4 लाख files, 4 साल तक हर दिन लगभग 275 photos काफ़ी थीं
    यह सचमुच अजीब दौर है कि processing, storage और network performance इतनी ज़्यादा होने के बावजूद सबसे ज़्यादा इस्तेमाल होने वाले media sync apps रुक जाते हैं या बहुत धीरे sync होते हैं, AirDrop fail हो जाता है, और ‘Select All’ जैसा UI feature भी नहीं होता :)

    • जिज्ञासा है कि क्या Dmitry ने MobiusSync या Syncthing जैसे sync tools पर विचार किया, ताकि फोटो खींचते ही वे लगातार PC पर copy होती रहें
  • ऐसे काम के लिए Nobel Prize जैसा कुछ होना चाहिए

    • शायद इसके सबसे क़रीब Ig Nobel Prize है: https://en.wikipedia.org/wiki/Ig_Nobel_Prize
    • computing क्षेत्र में उसके समकक्ष Turing Award है
      computer science के अजीब और अनोखे उपयोगों की मान्यता के लिए एक श्रेणी और जोड़ी जा सकती है
  • “Why MIPS?” सेक्शन में कहा गया था कि “कुछ चीज़ें खराब addressing mode की वजह से अनिवार्य रूप से धीमी होंगी (RISCV)”, तो RISC-V addressing mode में दिक्कत क्या है?

    • असल में यह addressing mode से ज़्यादा instruction format की समस्या है
      RISC-V की कुछ instructions में immediate value के bits लगातार stored नहीं होते
      MIPS instructions में immediate addition, constant load, branch वगैरह के value bits हमेशा क्रम में stored होते हैं
      RISC-V में bits कभी-कभी उलझे हुए होते हैं
      उदाहरण के लिए unconditional branch में destination offset bits को bit 19, bits 9-0, bit 10, bits 18-11 के क्रम में stored किया जाता है
      hardware में बस wiring सही जोड़नी होती है, इसलिए rearrangement की लागत लगभग शून्य होती है, लेकिन software में इसे ठीक करने के लिए काफ़ी bit manipulation करनी पड़ती है
      RISC-V ऐसा hardware design को सरल बनाने के लिए करता है
    • जब तक आप बेहद कम-प्रदर्शन वाले hardware पर emulation करने की कोशिश नहीं कर रहे, तब तक शायद यह कोई बड़ी समस्या नहीं होगी