1985年 我是如何程式設計的

oschina發表於2013-05-02

  1985年,我曾經致力於實現一種機器的計算機化,這種機器用來給瓶底貼商標。有家公司製造了這種機電控制的機器,把商標卷在滾輪上,然後貼到傳送帶上的產品(比如洗髮露的瓶底)的表面。整個工作需要精確到毫米級,因為消費者不喜歡看到貼得歪歪扭扭商標。

  不幸的是,機電控制不像計算機控制那樣靈活,因此這家公司跟一家本地的技術院校簽約,製造基於KIM-1的計算機控制的機器原型,而我正在此學校學習電子技術。另一名學生也被招進來搞這臺機器,包括傳送帶,商標分貼機制,步進電機控制機制,用於檢測標籤和產品的紅外感測器。

  我的工作是用6502組合語言編寫軟體。不幸的是,當時沒有彙編器並且KIM-1只有一個十六進位制鍵盤和一個小小的螢幕。所以,這意味著只能手寫程式碼,手工彙編並把機器碼鍵入進去。程式碼看起來像這個樣子:

  很明顯計算機控制將會非常靈活。這個程式首先進行自動測量:卷軸上商標的長度,商標之間的距離,以及確保操作員快速擺好伸出距離(保證商標伸出時剛好能被產品接住)。

  它能夠在執行時自動檢測傳送帶的速度,實現運動補償,以及在商標不夠用(卷軸剝離發生故障)停止傳送帶

  當然,像這樣編寫程式碼是一種痛苦。首先你不得不手寫程式碼(藍色部分),然後把它轉換成機器碼(紅色部分),並且計算每條指令和相對跳轉的記憶體位置。那時我還沒有能夠用於計算十六進位制的計算器,所以自己完成了大部分的計算(相對跳轉則用了心算)。

  但是,這教給我兩件事情:第一次就把事情做對和在自己的大腦裡執行程式碼。後一件直到今天仍然重要。在除錯時,我不斷在大腦中執行程式碼,在使用gdb或者其他偵錯程式之前我就用人腦偵錯程式工作了。KIM-1只有最基本的除錯功能,我只把少數編程式序,大多數的除錯工作是檢視輸出(十六進位制螢幕),步進電機的行為,以及在大腦中執行程式碼。

  如果感到好奇的話,這裡可以檢視完整的程式。

  另外,有人指出就1985年當時來說,KIM-1已經相當落後,並且那時編譯器也已經出現了等等事實。沒錯。實際上,在該工作前我就已經在CP/M上使用BASIC和ZASM(Z80彙編程式),但是你必須受限於條件的限制:這家技術學院有一臺空閒的KIM-1,它有良好的I/O能力,作為一臺嵌入式控制器的原型系統還是相當不錯的。

  英文原文:How I coded in 1985

相關文章