工程趣聞 2026 年 8 月 17 日

2026-08-17 — 從1963年機械電腦到8KB口袋電腦BBS,工程師如何靠位元把戲玩出趣味

primary=https://en.wikipedia.org/wiki/Digi-Comp_I primary=https://www.retrocmp.com/articles/digi-comp-1/302-digi-comp-1-introduction primary=https://ei3lh.eu/2026/08/16/a-true-telnet-bbs-on-a-casio-calculator/ primary=http://basic.hopto.org/basic/manual/Casio%20FX-870-VX-4.pdf primary=https://www.benjoffe.com/fast-day-of-week

1963 年的塑膠機械電腦:Digi-Comp I 如何用插銷與鋼絲跑出二進位邏輯

Wikipedia · Digi-Comp I

Digi-Comp I 是 1963 年由美國公司 E.S.R., Inc. 以套件形式販售的教育玩具,售價 US$4.99(約合 2025 年幣值 52 美元),全機以射出成型的聚苯乙烯塑膠零件組成。它不靠任何電力,純粹用機械結構模擬數位電腦的二進位邏輯運算,因此常被稱為「第一台家用電腦」。近年 Hacker News 上重新流傳的介紹影片,讓這台六十多年前的玩具再度被工程師拿出來討論其運作機制。

運作原理

整台機器的核心是三個機械式正反器(flip-flop),對應三個二進位位元的狀態儲存。使用者以一根手動來回撥動的時鐘桿(clock lever)驅動整個系統,每撥動一次就是一個時脈週期。若干根細鋼絲垂直排列,鋼絲能否被推動、或被特定位置的圓柱形插銷擋住,決定了正反器之間如何連動。

插銷的擺放方式相當於可程式化邏輯陣列(Programmable Logic Array)的實體版本:不同的插銷排列組合,會讓鋼絲之間形成不同的布林邏輯閘結構。根據 retrocmp.com 的技術說明,原廠隨機附上名為 DC1-PLA.pdf 的邏輯陣列文件與 DC1 Detailed Programming.PDF 程式設計手冊,教使用者如何靠插銷位置「編寫」不同的運算。機身尺寸僅 31 x 8 x 12 公分,體積接近一本厚書。

技術細節

由三個正反器提供的 3-bit 二進位讀出,可用來展示以下能力:

  • 基本二進位邏輯閘操作示範
  • 3-bit 範圍內的二進位加法與減法
  • 簡單邏輯遊戲「Nim」的自動判斷

儘管當年的宣傳文案將其稱為「真正能運作的數位電腦」,Wikipedia 條目指出更精確的定位應是有限狀態機(finite-state machine)——這是構成現代電腦運算理論的基礎概念之一,而非具備儲存程式能力的通用電腦。原廠也留有正式專利文件記錄其機構設計,供後續復刻參考。

歷史脈絡

Digi-Comp I 對後續工程世代影響不小,《Clean Code》作者 Robert C. Martin 曾公開表示,童年把玩這台機械電腦是他投入軟體工程生涯的啟蒙契機之一。其後繼產品 Digi-Comp II 改用彈珠與塑膠凸輪,變成不可程式化的機械計算裝置,走向不同的設計路線。2005 年起,Minds-On Toys 推出以裝訂紙板(binder's board)製作、文件更完整的 Digi-Comp I 2.0 復刻版,讓這套六十年前的機械邏輯教材延續至今。

原始來源:Wikipedia: Digi-Comp Iretrocmp.com 技術介紹


把 1980 年代 Casio 口袋型電腦改成能連上網際網路的 Telnet BBS

ei3lh.eu · 2026-08-16

2026 年 8 月,一位工程師在個人網誌 ei3lh.eu 發表專案,把一台 1980 年代的日本口袋型電腦 Casio VX-4 改造成能透過網際網路以 Telnet 撥入的真實 BBS(電子布告欄系統)。這台機器原生只有 RS-232 序列埠,完全不具備網路能力,作者靠一台橋接用的 Raspberry Pi 補上這一段。整個系統刻意維持在計算機最初的 8KB RAM 規格上運作,而非用擴充後的版本取巧。

硬體與連線架構

Casio VX-4 是 Casio 口袋電腦系列中支援 BASIC、CASL、C 語言的機種,內建僅 8KB RAM(可選配擴充至 40KB),出廠僅在日本市場銷售、原廠文件僅有日文版本。作者刻意鎖定基礎的 8KB 版本開發,以確保同系列各型號都能相容執行。橋接網路的部分由一台 Raspberry Pi Zero W 負責,透過 Tailscale Funnel 把內網服務安全地暴露到公開網際網路,同時兼作訊息封存的儲存庫。

電腦與樹莓派之間以一條 2.5mm 轉 USB-C 的 FTDI RS232 線實體相連,另外加裝一片 Adafruit OLED HAT 顯示連線狀態。以下是整套系統的關鍵規格:

  • 主機:Casio VX-4,8KB RAM(可擴充至 40KB)
  • 連線鮑率:4800 baud,刻意壓低以換取穩定度
  • 同時連線數:限制為 1,避免計算機處理能力被壓垮
  • 網路橋接:Raspberry Pi Zero W + Tailscale Funnel

軟體實作

BBS 主程式以 Casio PocketPC BASIC 撰寫,這是 Casio 口袋電腦系列共用的標準化 BASIC 方言。程式執行後會把計算機內建的序列埠切換為監聽模式,等待外部送來 CONNECT 請求信號,一旦握手成功即進入 BBS 選單流程。作者表示原始碼未來會開源釋出至 GitHub,但截至文章發表時尚未公開。

技術限制

把 VX-4 拿來對比同系列的 FX-870P 機種,可以看出作者為何要特別強調「刻意選用最陽春規格」開發:

機種RAM用途
Casio VX-48KB(標配)本專案 BBS 主機
Casio VX-4(擴充)40KB可選配置,未使用
Casio FX-870P64KB同世代對照機種

在僅 8KB RAM 的限制下維持穩定的序列埠監聽與選單邏輯,是這個專案的主要技術挑戰所在,也是作者選擇低鮑率、單一連線數的直接原因。

原始來源:ei3lh.eu 專案文章Casio FX-870P/VX-4 原廠手冊


用「2的32次方除以7再位移」取代查表:更快的星期計算演算法

Ben Joffe (benjoffe.com) · 2026-08

工程師 Ben Joffe 在個人技術網誌 benjoffe.com 發表一系列計算「某日期是星期幾」的新演算法,核心手法是用整數乘法搭配位移取代傳統的除以 7 取餘數運算。文章把新方法拿去對照 Neri 於 2024 年提出的作法,以及 Howard Hinnant 的經典 civil_from_days 系列公式做基準測試。這篇文章延續作者稍早發表的 fast-date-64 系列,同樣是針對日曆運算做底層位元操作優化。

核心公式

最快的完整範圍版本(文中稱 Variant 3)利用 7 = 2³ - 1 這個梅森數(Mersenne number)性質,把「除以 7 取餘數」轉換成一次乘法加兩次位移即可完成,全程只需三個 x86 組合語言等級的運算。其關鍵常數是 M = ⌊2³² / 7⌋ = 613,566,756,把日期對應的 rata die(自曆元起算的整數日數)乘上這個常數後取高位元,就能直接得到星期幾,完全不需要昂貴的整數除法指令。

const u32 M = 613566756;      // floor(2^32 / 7)
u64 product = (u64)(u32)rd * M;
u32 result  = (u32)product + 4u * (u32)(product >> 32) + Z;
weekday     = result >> 29;   // 0..6

其中 Z 是用來對齊星期起始日(例如週日或週一為 0)的校正常數,實際數值依採用的曆元定義而異。

Nundinal Map 技巧

文章另外提出一個作者稱為 「Nundinal Map」 的技巧,把常見的 n - (n/7)*7 取模運算,改寫成 (n + ⌊n/7⌋) mod 8 的形式。因為除數從 7 換成了 8,最後一步的取模運算可以直接用位元遮罩(bitmask)完成,省掉一次乘法指令。這個命名借用古羅馬「集市週期(nundinal cycle)」的曆法術語,呼應星期週期性計算的主題。

效能比較

作者分別在 AMD Ryzen 9Apple M4 Pro 兩款處理器上跑基準測試,以 Neri(2024)演算法的耗時為基準值 1.0x

演算法相對耗時備註
Neri (2024)1.0x(基準)作為對照基準
Joffe 新變體(Variant 3 等)0.3x – 0.5x本文提出的位移/乘法技巧
Hinnant civil_from_days 系列1.5x – 3.0x經典但較慢的做法
傳統雙重取模(double-mod)1.5x – 3.0x直接用除法與取模運算

兩種硬體架構上的相對排序一致,顯示新演算法的加速效果並非單一處理器的特例,而是源自指令層級(除法指令 vs. 乘法+位移指令)的根本差異。

原始來源:benjoffe.com: A faster way to calculate the day-of-week


End of article
0
Would love your thoughts, please comment.x
()
x