5 คะแนน โดย GN⁺ 2023-11-04 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • นักพัฒนาคนหนึ่งได้เปิดเผย ซอร์สโค้ดที่สะสมมานานกว่า 40 ปี เนื่องในโอกาสเกษียณ ทำให้สามารถเข้าไปดูระบบเก่า เครื่องมือ และโปรเจ็กต์ส่วนตัวได้โดยตรง
  • ขอบเขตการเผยแพร่ครอบคลุมถึง ระบบปฏิบัติการและเคอร์เนล เช่น เคอร์เนลแบบมัลติโปรเซส/ทาสก์สำหรับ ARM, ระบบปฏิบัติการสำหรับ CPU 6809 และ OS ยุคแรกในช่วง Altair 1980
  • ยังมี เครื่องมือพัฒนาระดับล่าง รวมอยู่ด้วย เช่น Micro-C Compiler, cross assembler, disassembler, อีมูเลเตอร์ 8052 และดีบักเกอร์
  • มีการเปิดเผย ยูทิลิตีสำหรับงานบนพีซี อย่างกว้างขวาง เช่น DOSBox, ยูทิลิตี DOS, การซิงก์ไฟล์, การจัดการ ZIP, การสร้างแพ็กเกจติดตั้ง และโปรแกรมแก้ไขข้อความ
  • รวมถึง โปรเจ็กต์ฮาร์ดแวร์ส่วนตัว เช่น วิทยุสมัครเล่น รีโมตอินฟราเรด RS-232, Ethernet TTY, การควบคุม X10 และหุ่นยนต์สำหรับอ่าน DVD 1,500 แผ่น จึงมีคุณค่าในเชิงการเก็บรักษาอย่างมาก

วัตถุประสงค์ของการเผยแพร่และเอกสารแนะนำ

  • เนื่องในโอกาสเกษียณ จึงเปิดเผย ซอร์สโค้ดที่สะสมมานานกว่า 40 ปี ซึ่งเป็น “สิ่งที่ฉันเขียนขึ้น”
  • เป้าหมายของการเผยแพร่คือเพื่อให้ผู้อื่นนำโค้ดเหล่านี้ไปใช้ประโยชน์ หรือเรียนรู้บางส่วนจากมันได้
  • เอกสารที่หน้าเผยแพร่แนะนำไว้ด้วย:

ระบบปฏิบัติการ เคอร์เนล เวอร์ชวลแมชชีน และการจำลองระบบ

  • ARMOS: เคอร์เนลแบบมัลติโปรเซส/ทาสก์ สำหรับ ARM
  • CUBIX: ระบบปฏิบัติการสำหรับ CPU 6809
  • DMF: OS ยุคแรกในช่วง Altair 1980
  • DVM: Dunfield Virtual Machine
  • SIMSYS: ระบบที่เกี่ยวข้องกับ Altair, D6809, H8, Horizon, Mod8
  • MONITORS: มอนิเตอร์สำหรับ โปรเซสเซอร์ฝังตัว หลายชนิด
  • 8051ICE: in-circuit emulator ที่ใช้ EMILY
  • EMILY52: อีมูเลเตอร์ 8052

คอมไพเลอร์ แอสเซมเบลอร์ ดีบักเกอร์ และเครื่องมือช่วยพัฒนา

  • MICRO-C: Micro-C Compiler
  • MCSAMPLE: ตัวอย่างโปรแกรม Micro-C
  • XASM: cross assembler และเครื่องมือ
  • DISASM: cross disassembler
  • DMS: ดีบักเกอร์ Dunfield MicroScope
  • DESMO: Debug Scripting Monitor
  • DDSIDE: IDE ของ Dunfield Development Systems
  • BLDTOOL: เครื่องมือช่วยงาน build
  • PUBSRC: เครื่องมือดูแลส่วนซอร์สโค้ดสาธารณะ
  • HFC: Help File Compiler
  • ESL: Extensible Script Language

ยูทิลิตีสำหรับ DOS ไฟล์ ดิสก์ การแก้ไข และการแพ็กเกจ

  • DBBD: ฟลอปปีดิสก์สำหรับบูต DosBox
  • DBUTIL: ยูทิลิตี DosBox
  • DD_DBSRC: source code tree ของ DosBox
  • DOSUTIL: ยูทิลิตี DOS หลายรายการ
  • FDI: Floppy Disk Image
  • IMDSRC: ImageDisk
  • EDT: โปรแกรมแก้ไขข้อความ EDT
  • ELF: เครื่องมือแก้ไขชื่อไฟล์แบบยาว
  • FTOOLS: เครื่องมือหลายอย่างสำหรับงานไฟล์
  • SYNC: ซิงก์ไดเรกทอรีทรีสองชุด
  • ZDIR: แสดงรายการไฟล์ใน ZIP และ touch
  • MAR: MicroARchiver ที่ใช้บีบอัดไฟล์ติดตั้ง
  • MKPKG: สร้างไฟล์ติดตั้งแพ็กเกจ .exe เดี่ยว
  • ESP: แพตช์สตริงในไฟล์ปฏิบัติการ
  • PT: เครื่องมือ PaperTape
  • MICROCAD: โปรแกรมวาด CAD ขนาดเล็กมาก

ฮาร์ดแวร์ การสื่อสาร การควบคุม และโปรเจ็กต์ส่วนตัว

  • DARC: Dunfield Amateur Radio Controller
  • HTX242: ควบคุมทรานซีฟเวอร์วิทยุสมัครเล่น RS HTX-242
  • ICOMCIV: โค้ดอินเทอร์เฟซ ICOM CI-V สำหรับวิทยุสมัครเล่น
  • IR232: รีโมตอินฟราเรดแบบเรียนรู้ผ่านพอร์ตอนุกรม RS-232
  • ETTY: Ethernet TTY
  • SNIFF: Ethernet sniffer
  • DLM: Data Line Monitor
  • ITS: Interactive Terminal Switch
  • DDLINK: DavesDataLink สำหรับถ่ายโอนไฟล์ผ่าน COM, LPT, NET
  • SERCNCT: สลับใช้งานหลายอุปกรณ์บนพอร์ต COM เดียว
  • DBOX: ตัวควบคุม Sony VCR
  • DVDROBOT: หุ่นยนต์ที่สร้างขึ้นเพื่ออ่าน DVD 1,500 แผ่น
  • EPROM: โปรแกรมเมอร์ EPROM
  • 8031DWG: ตัวอย่างการออกแบบบนพื้นฐาน 8031
  • X10CTRL: ควบคุมอุปกรณ์ X10 จากพีซี
  • RINGSW: สวิตช์ distinctive ring สำหรับสายโทรศัพท์
  • PC100: VT-100 terminal emulator
  • LABTOOLS: เครื่องมือแล็บ/ทดสอบหลายรายการ
  • CAM: โปรเจ็กต์สำหรับเด็กที่มีความบกพร่องทางพัฒนาการ
  • MACMON: มอนิเตอร์/บันทึกการใช้งานเครือข่ายของเด็ก
  • TRANZTCL: เครื่องมือพัฒนา Verifone TRANZ PointOfSale

1 ความคิดเห็น

 
GN⁺ 2023-11-04
ความเห็นจาก Hacker News
  • ลองไล่ดู DOSUTIL.ZIP แล้ว ชอบโปรแกรม C ที่เรียบง่ายและสง่างามมาก
    หลายตัวใช้มาตรฐาน C #include แค่ 1–2 บรรทัด และในโค้ด C 20,000 บรรทัดมี #if แค่ 24 จุดก็น่าประทับใจมาก
    ประสบการณ์ที่ได้อ่านโค้ดเบสแบบนี้เป็นแรงบันดาลใจตอนเริ่มทำ Cosmopolitan Libc

    • ถ้ามีเป้าหมายการบิลด์เพียงอย่างเดียว ก็ลดการใช้แมโคร #if ลงได้มาก
    • คอมไพเลอร์ C สมัยก่อนปล่อยผ่านความผิดพลาดสารพัดที่คอมไพเลอร์ C ยุคใหม่คงจับได้อย่างถูกต้อง
    • ฝั่ง Rust เคยเขียน HTTP listener ง่ายๆ ที่มี route เดียว แต่ Cargo ดึง dependency มาประมาณ 105 ตัวเพื่อจะบิลด์
      ถึงอย่างนั้นถ้าเทียบแบบเดียวกันจริงๆ use statement ก็มีแค่ 2 บรรทัด
    • ในทางกลับกัน ฝั่ง C ก็มี แฮชเทเบิลที่ทำด้วยแมโครล้วนๆ อยู่เหมือนกัน เจ๋งดีทีเดียว: https://troydhanson.github.io/uthash/
  • ธรรมเนียม True=7 ใน STYLE.TXT ดูแปลกตา
    เนื้อหาคือด้วยประสบการณ์กับโค้ดระดับล่างและฮาร์ดแวร์ ผู้เขียนพยายาม “ลดสิ่งที่อาจผิดพลาดได้ในระดับล่างให้น้อยที่สุด” จึงอาศัยข้อเท็จจริงที่ว่าใน C นั้น 0==FALSE, !0==TRUE แล้วใช้ 7 แทนค่าจริงแทน 1 บ้าง
    เป็นการเลือกตามความเคยชินว่าความต่าง 3 บิตน่าจะดีกว่าความต่าง 1 บิต แต่เจ้าตัวก็ยอมรับเองว่ามันออกจะงี่เง่า เพราะถ้าฮาร์ดแวร์ผิดพลาดระดับ 1 บิตจริง ระบบส่วนใหญ่ก็คงพังไปแล้ว
    เลยสงสัยว่าสมัยก่อน การพลิกกลับของบิตแบบสุ่ม จนทำให้เงื่อนไขพังนั้นเกิดบ่อยหรือเปล่า

    • ต่อให้เคยเกิดขึ้นจริง ก็ไม่สามารถมองทุกเงื่อนไขเหมือนเป็น บูลีนสามสถานะ ได้
      ต้องกำหนดด้วยว่าระหว่างที่ล้มเหลวจะถือว่า branch ไหนยังรันได้อย่างปลอดภัย จะนับจำนวนบิตของแต่ละเงื่อนไขแล้วถ้า 1 มากกว่า 0 จึงถือว่าเป็นจริงหรือไม่ และถ้าบิตพลิกโดยไม่มีการแก้ไขข้อผิดพลาด จะล็อกหรือแจ้งผู้ดูแลอย่างไร
      รหัสตรวจจับข้อผิดพลาดมีประโยชน์ในบางจุด แต่แค่กำหนดให้ค่าจริงเป็น 7 อย่างเดียวยังไม่พอ
    • ผู้เขียนเองก็ยอมรับโดยพฤตินัยว่าเป็นนิสัยที่งี่เง่า และกลับทำให้เจตนาดูชัดเจนน้อยลงเสียด้วย
      ถึงอย่างนั้นการอ่านเอกสารสไตล์ก็สนุกดี และชอบที่เปิดเผยทุกอย่างไว้แบบนี้ ดูเหมือนน่าจะมีเครื่องมือที่เหมาะเป๊ะสำหรับใครสักคนอยู่แน่
    • เวลาตรวจว่า serial data line ทำงานไหม มักใช้ 0xA5 (1010 0101) เพื่อส่ง ลำดับบิตสลับกัน แบบดัดแปลงเล็กน้อย
      เป็นวิธีที่ตั้งใจตรวจความเป็นไปได้ของความขัดข้องให้ได้มากที่สุดในครั้งเดียว
    • ถ้ากังวลถึงขั้นนั้น TRUE=7 ก็ไม่ใช่คำตอบจริงๆ
      ถ้าเป็นตัวแปรบูลีน ก็ต้องเขียน if (var == TRUE), else if (var == FALSE) และกำหนดว่าจะทำอะไรเมื่อเป็นค่าอื่นในทุกเงื่อนไข โดยโค้ดส่วนจัดการนั้นเองก็ต้องไม่ชนกันด้วย
      แถมการพลิกของบิตยังอาจกระทบตัวแปรที่ใช้ใน switch หรือเงื่อนไขอย่าง if (i > 17) รวมถึง pointer, return address บนสแต็ก และตัวโค้ดเองได้ด้วย
      อย่างมากก็เป็นทางแก้เฉพาะบางส่วน และการทำจริงก็ไม่ใช่เรื่องเล็ก จึงยากจะมองว่าเป็นธรรมเนียมมาตรฐาน
    • น่าจะไม่ใช่ปัญหาที่เกิดบ่อย แต่ใกล้เคียงกับแนวคิดว่า “มันอาจเกิดได้ งั้นก็กันไว้ในจุดที่ทำได้ง่าย” มากกว่า
      ส่วนตัวคิดว่าฉันคงใช้ -1
  • เสียดายมากที่ไม่เก็บโค้ดเก่าๆ ไว้ให้ดี
    ทั้ง เกมงู ที่เป็นโปรแกรมไม่พื้นๆ ชิ้นแรก ยูทิลิตีตัวแรกที่เขียนด้วยแอสเซมบลี ไดรเวอร์อุปกรณ์ตัวแรกสำหรับเครื่องพิมพ์ Centronics และปฏิทินถาวรที่ทำด้วย Pascal ภายในชั่วโมงเดียวตอนเมาค้างหนักเพราะเป็นงานมหาวิทยาลัย ล้วนเคยคิดว่าเล็กน้อยเกินกว่าจะเก็บไว้
    สุดท้ายเลยไม่เหลือโค้ดก่อนปลายยุค 1990 อยู่เลย นักพัฒนารุ่นเยาว์ควรเก็บโค้ดของตัวเองไว้ให้ดี

    • เด็กสมัยนี้ใช้ Git และฮับโฮสต์ต่างๆ กันอยู่แล้ว โค้ดเลยหายกันยาก ในแง่นี้ดูจะเป็นปัญหาที่คนรุ่นเราประสบกันมากกว่า
      แน่นอนว่าถ้าบริการ “ฟรี” แบบนี้ปิดตัวลงก็มีปัญหาเหมือนกัน ดังนั้น self-hosting ก็ยังมีประโยชน์
    • มีโค้ดเก่าเหลืออยู่เยอะเหมือนกัน แต่ชวนอายเกินกว่าจะกลับไปดู
    • ฉันก็คล้ายกัน เคยทำ โปรแกรมสเปรดชีตบน DOS มีทั้งกราฟแบบ modeX กับสูตรต่างๆ แล้วก็ทำเกมไว้ไม่กี่เกมกับไวรัสอีกไม่กี่ตัว
      ตอนนั้น TSR ดูเหมือนเวทมนตร์เลย ของพวกนี้อาจยังอยู่สักที่ในแผ่นฟลอปปีดิสก์ใต้ดินบ้านแม่ก็ได้
  • บทความที่ผู้เขียนย้อนเล่าเหตุการณ์เกือบเสียชีวิตในปี 2019 ก็น่าอ่านเหมือนกัน: https://dunfield.themindfactory.com/2019.htm

    • หนักหน่วงมาก ทำให้นึกถึงพ่อตาของฉันที่หัวใจวายในปี 2015 จนหัวใจเสียหายไป 90%
      ผลตรวจแย่มากจนมีหมอคนหนึ่งถึงกับปฏิเสธรักษา เพราะกลัวว่าจะเสียชีวิตระหว่างตรวจเมื่อไรก็ได้
      แต่จนถึงตอนนี้เขาก็ยังมีชีวิตอยู่ ใช้ชีวิตตามปกติ และยังไปวิ่งที่ชายหาดทุกเช้าวันเสาร์ ผลตรวจไม่ได้ดีขึ้นและยังหอบง่ายตลอด แต่เหมือนเป็นคนที่ปฏิเสธจะตายเฉยๆ
      คล้ายกับที่หมอในลิงก์พูดว่า “ดูอาการดีกว่าที่อยู่บนเอกสารมาก”
    • สงสัยว่าทำไมหมอถึงเป็นแบบนั้น
      ในบทความมีช่วงหนึ่งที่บอกว่าแม้แต่ “การอุ้มลูก การนอนบนเตียงตัวเอง การกินอาหาร และการใช้มือทำงานเล็กน้อย” ก็ถูกปฏิเสธไปหมด ซึ่งตอนพ่อของฉันเป็นมะเร็งเม็ดเลือดขาวกับปอดบวม อาการไม่ดีขึ้นและยังถอดท่อช่วยหายใจไม่ได้ หมอก็พูดหนักแน่นแบบเดียวกันว่าจะเหลือความพิการถาวรไปตลอดชีวิต
    • แปลกดีที่ทำให้นึกถึง The Shadow Out of Time ของ H. P. Lovecraft
    • หม่นหมอง แต่สุดท้ายก็ดูเหมือนเป็นตอนจบที่มีความสุข
  • ดีมากเลย ฉันเคยคิดหลายครั้งว่าอยากลองทำอะไรคล้าย ๆ กันสักวัน
    มันคล้ายกับการได้รับมรดกจากปู่ย่าตายาย มีทั้งอัญมณีจริงและของแปลกน่าสนใจปะปนอยู่ท่ามกลางของจิปาถะและขยะ แต่ทั้งหมดนั้นสะท้อนเรื่องราวของคนจริง ๆ ที่มีชีวิตอันอุดมสมบูรณ์และน่าสนใจ
    แค่ไฮไลต์ไม่กี่อย่างไม่อาจถ่ายทอดชีวิตนั้นได้อย่างเหมาะสม

    • ทำไมต้องรอให้เกษียณก่อนถึงค่อยทำ? ทำตอนนี้เลยไม่ได้หรือ?
    • ฉันคงอยากเก็บสิ่งที่ทำไว้ตลอด 40 ปีของการเขียนโปรแกรมเอาไว้บ้าง แต่ทุกครั้งที่ย้ายงานก็ทิ้งไว้หมด
      โชคดีที่ยังเหลือ ตัวจัดสรรหน่วยความจำ เชิงพาณิชย์ที่ทำไว้ช่วงปลายยุค 90 อยู่ มันเป็นแบบเธรดเดี่ยวและรองรับแค่ Metrowerks CodeWarrior กับ MacOS รุ่นเก่า แต่เป็นตัวจัดสรรที่เร็วที่สุดและแทบไม่มีบั๊กที่สุดบน Mac
      พอ MacOS X ออกมาก็หมดประโยชน์ และไม่รู้ว่าตอนนี้จะยังมีใครสนใจไหม
      อย่างที่บอกเมื่อวาน ฉันทำซอร์สโค้ด Trapeze หายไปแล้ว(https://en.wikipedia.org/wiki/Trapeze_(spreadsheet_program)) ดูเหมือนฉันไม่เคยคิดจะเก็บผลงานไว้เพื่อแชร์ในวันที่ไม่มีใครสนใจมันแล้วในภายหลังเลย
  • เจ๋งมาก เมื่อเทียบกับสิ่งที่ประวัติโค้ดของฉันน่าจะดูเป็นในอนาคต มันให้ความรู้สึกเหมือนเป็น โค้ดที่บริสุทธิ์ มาก
    ในปี 2040 โค้ดของฉันคงแสดงร่องรอยของการใช้ไลบรารีและเฟรมเวิร์กจำนวนมากที่ “ทุกวันนี้ไม่มีใครใช้แล้ว”
    มันไม่ใช่เรื่องดีหรือแย่ แค่เป็นภาพสะท้อนของยุคสมัย

    • ถ้าคุณไม่ได้เก็บ dependency พวกนั้นไว้เอง สุดท้ายก็อาจไม่มีใครอ่านหรือ build โค้ดได้อย่างถูกต้อง
      แนวปฏิบัติการพัฒนายอดนิยมทุกวันนี้ ชั่วคราวและเปราะบาง อย่างน่าตกใจ โปรเจกต์ที่ถูกปล่อยทิ้งไว้แล้วจะอยู่รอดได้ 10 ปีก็แทบไม่มีแล้ว ยิ่ง 40 ปียิ่งยากเข้าไปใหญ่
    • pip install กับ npm install พวกนี้สุดท้ายก็จะใช้การไม่ได้ทั้งหมด
  • ผมคิดว่ายูทิลิตีที่ทรงอิทธิพลที่สุดคือ ImageDisk
    มันถูกใช้ในการเก็บรักษาฟลอปปีดิสก์จากคอมพิวเตอร์หลากหลายประเภทโดยใช้ IBM PC และซอฟต์แวร์เก่าจำนวนมากบน bitsavers.org กับ archive.org ก็ถูกกู้คืนด้วยเครื่องมือนี้

  • ในนิยาย A Deepness in the Sky ของ Vernor Vinge มีสังคมมนุษย์ในอีกหลายพันปีข้างหน้า ซึ่งซอฟต์แวร์แทบทั้งหมดถูกเขียนไว้แล้ว และปัญหามีเพียงการตามหามันให้เจอ
    ดังนั้นจึงมีโปรแกรมเมอร์-นักโบราณคดีคอยค้นคลังข้อมูล และถ้าจำเป็นก็รันโค้ดในอีมูเลเตอร์ซ้อนอีมูเลเตอร์ซ้อนอีมูเลเตอร์: https://garethrees.org/2013/06/12/archaeology/
    คุณเองก็มีส่วนเติมกองสมบัติที่วันหนึ่งจะเป็นประโยชน์ต่อใครสักคน ไม่ว่าจะเป็นพรุ่งนี้หรืออีก 5,000 ปีข้างหน้า

    • วิศวกรที่ชอบ Vinge มักชอบช่วงที่พูดถึงว่า แม้คนเรามักคิดว่าปฏิทินของยุคอนาคตอันไกลจะอิงจากการลงจอดบนดวงจันทร์ครั้งแรกของมนุษย์ แต่จริง ๆ แล้วมันอิงจาก Unix Epoch
  • มีมุกเรื่องการแก้บั๊กครั้งสุดท้ายก่อนเกษียณคือ ฉันลองเปิด micro-cad แล้วเจอ 404
    URL: https://dunfield.themindfactory.com/dnld/sc/MICROCAD.ZIP
    พฤติกรรมที่คาดหวังคือควรดาวน์โหลดไฟล์ .zip ได้

    • ดูเหมือนว่าใน zip ของ MCSAMPLE จะมีทั้งหมดรวมอยู่ด้วย
    • ฉันก็เจอ 404 เหมือนกัน โปรแกรม CAD ต้นฉบับแบบนี้มีไม่มาก เลยอยากดูอันนี้มาก
  • ยอดเยี่ยมมาก ฉันสะสม “ไบเบิล” ส่วนตัวไว้หลายชุดที่มักเปิดดูเสมอเวลาใช้ภาษาใดภาษาหนึ่งหรือทำงานอัตโนมัติบางอย่าง และยังมีวิธีจัดระเบียบหลายแบบที่ได้เรียนรู้จาก HN
    เพียงแต่ฉันไม่เคยคิดจะเผยแพร่มัน เพราะมันดูเป็นเรื่องส่วนตัวและเฉพาะทางกับกระบวนความคิดของฉันมากเกินไป
    แต่พอได้เห็นของพวกนี้แล้วก็รู้สึกมีแรงบันดาลใจ เป็นไอเดียที่ยอดเยี่ยมจริง ๆ และถ้าทำได้ฉันก็อยากสนับสนุนเป็นเงินเพื่อแสดงความขอบคุณสำหรับโปรเจกต์หลังเกษียณนี้

    • ฉันสงสัยว่าคำว่า “ไบเบิล” ที่พูดถึงที่นี่หมายถึงอะไรกันแน่
      แล้วก็อยากรู้ว่าคุณได้เรียนรู้วิธีจัดระเบียบแบบไหนมาบ้าง ฉันสนใจจะเรียนรู้เคล็ดลับเพิ่มประสิทธิภาพหรือซอฟต์แวร์ของคนอื่นอยู่เสมอ
    • ฉันก็มีไบเบิลแบบนี้อยู่หลายชุด
      ถ้าสนใจ ฉันอยากลองแลกไฟล์กันดู คิดว่าน่าจะได้เรียนรู้อะไรจากของคุณเยอะมาก ชื่อผู้ใช้ Gmail ของฉันเหมือนกับชื่อผู้ใช้ HN