喜歡這篇文章嗎?
BASIC的各種版本
原刊於《微電腦時代》1985年11月號
冼鏡光
October 20, 2019上線
寫在前面
前者日子寫 在1984年(蔡英文女士得博士學位)時有沒有右邊切齊的打字機或軟體? 這篇文章時查了很多1980年代早期或更早的電腦和軟體資料,因為國內名嘴寫手在攻擊論文右邊切齊的說法匪夷所思,對1980年代上半或更早時期的電腦發展幾乎完全無知。要知道,國內的個人電腦發展就是從1970年代末的Apple II開始、再在1980早期跨入IBM PC而蓬勃發展的。經歷過這個時期的最年輕朋友目前應該是40多到50歲前後吧。對右邊切齊攻擊力最旺的一位50多歲名嘴在讀大學時應該經歷過這一段國內個人電腦急速發展的年代,怎麽都不知道一些點點滴滴的電腦基本知識呢?那個左右切齊是1990才「發明」的說法,實在令人發噱。
我從1985年5月開始筆耕、為《微電腦時代》寫文章賺點零用錢,這系列的文章叫做Micro隨筆,後來在1987年4月27日收集了16篇文章結集出版(還有若干篇沒包含在內,其中最有趣的就是程式設計之道,但是我手頭上的原稿已經殘缺不全)。當年我沒有安裝中文輸入(因為不像今天好用),所以都是在稿紙上手寫的,常常亂七八糟、剪剪貼貼,最後的定稿都是老婆完成,所以在單行本的序中才有這樣一段:
老婆得幫我抄稿、寄稿等等的工作,原因如前所述就是沒有用中文文書處理系統,但是我卻常用英文的系統而且軟硬體設備十分充足,所以個人可以說對那位名嘴的說法感到十分不可思議。正因為如此,我打算從Micro隨筆中挑些重要的、有趣的一些(老)文章 和大家分享,瞭解當時的一些情況。
在1980年代早期,BASIC是很普及的程式語言,因為Apple II和IBM PC在買機器時都會付了BASIC,然而每一個BASIC系統都有點缺陷,所以1970年代末和1980年代初很多BASIC編譯系統如雨後春筍般地出現,Micro隨筆中就有一篇介紹當時各種BASIC的狀況。個人覺得這篇短文很有趣,所以把它在此他重貼一次、不過修正了一些小地方。
說起BASIC,玩電腦的朋友幾乎無人不知、無人不曉,但是有許多玩家卻老是弄不清楚xBASIC是什麽,不但如此,一些老手恐怕也不甚了解。其實BASIC版本之多,多如過江之鯽,很難數得出來,所以此地的「各種版本」指的不過是微電腦上頭常見常用的那幾款而已。微電腦上頭的BASIC到一兩年前,天下英雄不過「使君與操耳」,也就是Microsoft BASIC與Digital Research的CBASIC,再加上Applesoft(其實窮本溯源,也是Microsoft BASIC的一個旁支),一直到近年才大量地湧進許多不同的BASIC。
最低限度的標準
BASIC也是有個ANSI標準的,叫做Minimal BASIC,也就是最低限度的BASIC;在訂定ANSI標準時(1960年代末期)早已群雄並起,每一家廠商都在儘可能地玩花樣,吸引住購買者的眼光,所以就使ANSI不知如何在各路英雄中訂出一個標準,最後的結果就是一個「最低限度」的BASIC標準,也就是大家都有的那一部份,當然也就是大家都會用、行之四海皆準的那一「小」部份,至於繪圖、聲響、WHILE-WEND、IF-THEN-ELSE等都是沒有的。
我們回到微電腦上頭。Apple早期的Integer BASIC是Steve Wozniak自已發展的,後來才委託Microsoft發展出Applesoft,也就是您的Apple II ROM中的語言。在CP/M-80系統方面,Digital Research(簡稱DRI)在推出CP/M-80的幾乎同時,就在賣Aubank博士論文中的CBASIC,DRI一直宣稱它適合商業用途(事實上也的確如此),因此這個C大概指的就是Commercial吧!早期的CBASIC我沒見過,不過後期的CBASIC因為市面上早就在賣了,所以也用了一段時候。CBASIC是個半編譯(semi-compile)程式,我們先把原始程式寫好並且儲存起來,然後叫出CBASIC編譯後産生一個中間檔(不是可執行檔),再用一個CRUNxx的執行時期程式來解譯(interpret)、並且執行該中間檔,此地xx通常表示CBASIC的版本號碼。為了加快被CBASIC編譯出來的程式的速度,Digital Research很快地又推出了CBASIC編譯程式、一般都叫做CB-80,它接受CBASIC語言寫成的原始程式,譯成真正的Intel 8080機器指令,所以在執行時速度就快了許多。自從16-bit機器出現之後(不一定是IBM PC,除了IBM之外還有許多廠家生産S100匯流排機器的),CP/M-86是第一個16-bit的作業系統,Digital Research也把CBASIC和CB-80改成16-bit的CP/M-86版,後來MS-DOS大大成功之後,又有了MS-DOS版,一般都叫做CBASIC-86與CB-86。
BASIC在微電腦上另一大支就是Microsoft的MBASIC,原本叫做BASIC-80,是Bill Gates和Paul Allen兩人合作寫成的,最先與CP/M-80沒多大關係,後來CP/M-80風行一時,MBASIC就有了CP/M版本。許多硬體製造商也向Digital Research購得使用CP/M的權利,自然會想到也向Microsoft買來使用MBASIC的使用權,於是許多廠家就宣稱他們有x-BASIC了。譬如說,日本廠家就有N-BASIC(NEC)、F-BASIC(富士通)、H-BASIC(日立,Hitachi)等等,說穿了就是罩上了不同外衣的MBASIC,當然每個廠家為自己添些花樣總是不免,不過基本上就是MBASIC。
在Apple的CP/M上也是一樣。Microsoft是第一個為Apple II機型生産介面卡、讓Apple可以執行CP/M軟體的廠家;在早期Microsoft的SoftCard CP/M版本中有兩個BASIC,一個MBASIC、另一個是GBASIC。因為Apple本身有低解析度與高解析度繪圖的能力,而且也有一些一般CP/M機器沒有、或者是很不容易達成的功能(譬如清除螢光幕,標準CP/M機器用一般的終端機,這些終端機上用來清除螢光幕的控制碼就未必相同,但在Apple中用HOME就行了;同樣地,HTAB和VTAB也是如此),所以MBASIC包含了Applesoft中除了高解析度繪圖之外的命令與中除了高解析度繪圖之外的命令與敘述,以便與Applesoft相容,而GBASIC則把MBASIC擴大,加上了高解析度繪圖功能。這些從CP/M-80標準版衍生出來的各式各樣BASIC(N-BASIC、F-BASIC、G-BASIC等),都只能在它們各自的機器上作業,而很難在標準CP/M之下工作的,因為標準CP/M沒有那些功能;譬如幾個月前,我就提到過SoftCard版的MBASIC無法在PCPI公司的Apple-Card上作業的問題。
16-bit的情況
再看16-bit的世界。IBM的PC-DOS是Microsoft MS-DOS的叧一個版本,在MS-DOS的原型中,MBASIC的態勢只比CP/M版的好一些,也是沒有繪圖、顔色等功能的,但是在IBM PC上的BASIC可就不同了,聲響、彩色、繪圖等樣樣俱全;如果把這個BASIC在其它機種、甚至於不很相容的機器上執行,成功的機會恐怕是不大的。對應著CBASIC的CB-80,MBASIC也有一個編譯程式,在CP/M之下叫做BASCOM;16-bit的機型中名稱也沒有變,不論是IBM版或者是MS-DOS版,也都叫做BASCOM(IBM叫做Basic Compiler),但內含卻不一定相同。先用CP/M為例,SoftCard的MBASIC有HOME、GR、TEXT等敘述,如果要把用了這些敘述的MBASIC編譯成可執行檔的話,就得用SoftCard版的BASCOM、而不能用標準的BASCOM。同樣的道理,在IBM上也有IBM版的BASCOM,彼此之間的差異正好是CP/M的翻版。
在商業應用上,二進位的實數運算是不夠精確的(不論是單精度還是倍精度),主要的原因不外是十進位的輸入轉換到二進位時不夠準確(不妨考慮把0.3轉成二進位),而且在運算時會造成誤差(請參看 使用浮點數最最基本的觀念http://blog.dcview.com/article.php?a=BjgGYwVtAjM%3D 這篇文章的進一步討論)。在商業上通常只有兩位小數(角與分),但在要求沒有誤差的情況下,運算就該用十進位而非二進位了。為了這樣,許多BASIC都有十進位(用BCD碼)算術,它固然比二進位慢、但精確度高,因此Microsoft的Business BASIC編譯程式就於焉而生。Business BASIC可以接受標準MS-DOS MBASIC的原始程式檔,編譯成用十進位算術的機器語言,因此對商業應用是很方便的,畢竟有時候用COBOL不如BASIC來得順手,您說是嗎?可惜的是,這是個MS-DOS版、沒有CP/M版,玩8-bit的朋友不妨用CBASIC。
不良後遺症
其實,雄霸天下的到了目前卻不完全是CBASIC和MBASIC,因為(特別是MBASIC)8088/8086對記憶分段(segment)的處理幾乎沒有得到分段機器的優點(請參看我的《作業系統》上冊第三章的討論),卻出現了一些不良的後遺症;因為這個系列的微處理機一個記憶體分段只有64K,於是程式與資料區域大小不能超越64K的界限,若要超過64K就得用到其它的技巧。當然,小型的程式不會有什麽問題(連CP/M-80都可以做了,不是嗎?)但對大程式來說,為了要跨越記憶體分段就要有額外的指令,於是編譯程式的工作就更複雜,所以我對8088/8086架構沒多大好感。
言歸正傳,因為有這一層障礙,您在PC上頭用BASICA時,大約就只有60K多一點的空間可以使用而已,這個限制在編譯程式中也存在。Microsoft三年來也沒有什麼突破這一項障礙的意圖,於是群雄並起、逐鹿BASIC市場的盛況又再重現,最先是Professional BASIC(見「微電腦時代」1985年10月號)和Better BASIC,它們都宣稱最大可以有640K的容量,徹底清除了分段式機器的障礙。接下來的就是BASIC原創人Kemeny與Kurtz所發展出來的True BASIC;兩位大師把一般的BASIC叫做馬路BASIC(Street BASIC),而把自己發展的BASIC定名為正宗(True)BASIC,從國外雜誌的評論看來,還相當不錯(此地後來在1986年1月號介紹過),因此我在能夠用得它之前先不亂發議論。不過可以肯定的是,True BASIC的處理過程和Professional BASIC相似,執行速度很快。
Digital Research的BASIC
讓我們回過來看看Digital Research公司。PC市場上除了CBASIC與CB-80之外,為了對抗Microsoft MBASIC,去(1984)年(或許更早一些)也推出了一套Personal BASIC,它與MS-DOS的MBASIC相同、沒有IBM PC上的聲響與繪圖的能力,但是它可以在CP/M-86與Concurrent CP/M還有Concurrent PC-DOS之下作業,作業方式與語言的用法幾乎與MBASIC相同,但是我“覺得”它比較快。我曾經在Concurrent PC-DOS之下同時執行三份下面的Personal BASIC程式:
在三個視窗看來速度固然慢了、但是還能夠接受,多工(Multi-Tasking)的感覺是有的,也就是三個程式的確給人有同時執行的感覺,但是在TopView之下同時執行兩個上述的程式時很明顯地就慢了許多。因此若不想要有特殊效果,不妨在Concurrent PC-DOS之下玩一玩Personal BASIC。我有一套Concurrent DOS 386,這是比Concurrent PC-DOS更新、為Intel 80386設計的系統,結果是好很多。
除了這些之外,PC與CP/M市場上還有一些特殊用途,或古裡古怪的BASIC,有些我沒用過、有些實在不太好,因此無法在這兒介紹,不過若有新的、而且還不錯的產品,我不會放過。
拉雜談來也是不少篇幅,這個話題就在此地打住吧!最近朋友寫書或寫文章的時候要特別小心,不要因為Microsoft BASIC會簡寫成MBASIC,於是把Professional BASIC簡稱為PBASIC、Better BASIC寫成BBASIC,這種自以為是(而不是廠家的)說法是很危險的;一來是這個名詞可能是個商標,二來亂取名字也可能引起混亂。請問Personal BASIC要怎麽辦?或許那天又出現個Pxxx BASIC呢?所以在討論的時候還是多費些筆墨,把全名拚出來好些;沈默的大多數消費者,您以為然否?
未經本人同意,請勿轉載轉貼本文任何片段,請尊重智慧財產(著作)權
引用方式:冼鏡光,BASIC的各種版本,DCView.com達人部落格(http://blog.dcview.com/article.php?a=U28HYgBpCj0Daw%3D%3D)
喜歡這篇文章嗎?