1985年我是如何寫代碼的
回到1985年,我還在給一個(gè)設(shè)計(jì)成給瓶子貼標(biāo)簽的機(jī)器計(jì)算機(jī)化。制造這個(gè)機(jī)器的公司用機(jī)電控制,將標(biāo)簽從卷軸上撕下帖到傳送帶傳來的產(chǎn)品(例如洗發(fā)液瓶子)上。整個(gè)過程需要工作在毫米級精度上,因?yàn)橄M(fèi)者不喜歡沒有完全對齊的標(biāo)簽。
不幸的是,機(jī)電控制不像電腦控制那樣靈活,因此該公司與當(dāng)?shù)匾凰W(xué)院(我正在該校學(xué)習(xí)電子學(xué))簽訂了合同,用KIM-1來設(shè)計(jì)電腦控制原型。另一個(gè)學(xué)生整合機(jī)器,他把傳送帶,標(biāo)簽發(fā)放機(jī)制,步進(jìn)電機(jī)控制,還有探測標(biāo)簽和產(chǎn)品的紅外感應(yīng)器進(jìn)行組裝。
我的工作是用6502匯編語言寫軟件。不幸的是,沒有編譯器,而且KIM-1只有一個(gè)十六進(jìn)制的小鍵盤和一個(gè)小的顯示屏。因此這意味著要手工寫代碼,手動(dòng)編譯和打字。代碼是這樣子的:(下面兩張圖片,點(diǎn)擊均可查看原始尺寸)
很快電腦控制需要變得更加靈活。程序首先自動(dòng)校驗(yàn):測量卷軸上的標(biāo)簽自身的長度,測量標(biāo)簽之間的距離,并且它啟用了一個(gè)運(yùn)算器快速設(shè)立”懸掛”距離(標(biāo)簽要伸出去多少才能讓產(chǎn)品抓到)。
在運(yùn)行中,它要能自動(dòng)檢測傳送帶移動(dòng)的速度,還有當(dāng)供應(yīng)卷軸上的標(biāo)簽缺失時(shí)(當(dāng)一個(gè)卷軸意外掉落時(shí)就會發(fā)生)進(jìn)行補(bǔ)償和標(biāo)記。
當(dāng)然像這樣寫代碼是一種痛苦。你首先必須寫完代碼(藍(lán)色),然后轉(zhuǎn)化成機(jī)器碼(紅色),并計(jì)算每個(gè)指令的內(nèi)存地址和相對跳轉(zhuǎn)地址。那時(shí)候我沒有能夠計(jì)算十六進(jìn)制的計(jì)算器,所以我自己完成大部分所需的計(jì)算(如在大腦里計(jì)算相對跳轉(zhuǎn)地址)。
然而它教會了我兩件事:在***時(shí)間寫對代碼 和 學(xué)會在大腦中運(yùn)行代碼。后者至今仍然重要。我調(diào)試時(shí)還是會先在大腦里跑一遍。通常情況下我會先于gdb或類似的工具,使用我的大腦調(diào)試器。KIM-1里只有最基本的調(diào)試功能,我在程序里也寫了點(diǎn),但是大部分調(diào)試都是盯著輸出(十六進(jìn)制顯示屏上),(步進(jìn)器的)行為看,還有在腦子里運(yùn)行代碼。
如果你好奇,這里是整個(gè)程序。
PS:一些讀者指出在1985年KIM-1離先進(jìn)水平還很遠(yuǎn),而且我們有很多好東西例如編譯器等等。是的。事實(shí)上比這還早的時(shí)候我用BASIC和 ZASM(Z80編譯器)在CP/M下編程,但是你是用你已有的條件來干活的,工學(xué)院有空閑的KIM-1,它有不錯(cuò)的I/O,因此它是制作嵌入式控制器的很好的原型系統(tǒng)。
英文原文:JGC
譯文連接:DEEPFISH