説説“漢卡”的進化史_風聞
老左bj-04-13 22:21
看到有人説“漢卡”,勾起了陳年的記憶。原帖已經消失,乾脆直接發新主題説幾句。
“漢卡”一詞的含義,其實有一個歷史演變的過程,不同時期的“漢卡”對應的意義是大相徑庭的。漢卡的誕生及演變,又與當時的電腦主機密切相關。
最早的IBM-PC是沒有漢字的,為了讓電腦能顯示及處理漢字,國內若干單位投入力量進行了“漢化”,技術路線上又分成了軟、硬兩派,其中的典型代表分別是電子工業部第六研究所的CCDOS和長城電腦的漢卡。
原版PC的圖形顯示很簡單,在文本模式下,只要往內存0xB0000開始的“屏幕緩衝區”的某個地址寫入一個ASCII代碼,屏幕上就會在相應的位置自動顯示出來一個實際的字符,它如此實現的背後是從設計之初給予保障的:緩衝區的字符關聯到了字符發生器,發生器裏邊保存着每個字符的圖形點陣,硬件邏輯使得這些點陣可以受控地影射到“顯卡”的特定地址、並最終在屏幕上顯示出來。當然,那時還沒有顯卡的概念。
顯然,這樣的顯示方式非常的快捷。軟件只需往屏幕緩衝區寫入ASCII碼,屏幕上就會顯示出對應的圖形。這在CPU慢騰騰的早期,保證了良好的顯示效果。
CCDOS是純軟件方式實現的漢字顯示:首先把系統切換到圖形模式,然後從軟件自帶的漢字圖形庫中取出某個漢字的點陣數據,一筆一劃地複製到屏幕緩衝區的對應位置。一個漢字的點陣是16×16,佔用32個字節儲存空間,顯示過程是一次往緩衝區寫入一個字節、即8個像素點的數據,如此重複32次完成一個漢字的寫入。顯然,這樣的過程比英文字符的顯示就慢了太多太多,以至於肉眼都可以清楚地看到屏幕更新的過程,而不同於英文顯示的一瞬間完成。
純軟件方式實現了漢字的顯示,但也帶來兩個主要的問題。一個是顯示太慢,再一個就是因為早期的屏幕只有320×200的分辨率,滿屏只能顯示11行的漢字(10行用於顯示正文,最底下的1行用於輸入法的提示行),導致很多軟件無法與英文的24行界面相兼容。為此,CCDOS又在軟件中加入了滾屏的功能,勉強兼容了大多數的流行軟件。
另外,一個一級漢字字庫就要佔用200多K的內存空間,對於只有640K物理空間的DOS而言也是一筆不小的開銷,會嚴重壓縮應用軟件的可用內存,所以總體而言,CCDOS雖然實現了漢字的顯示,但也帶來了各方面的不盡人意,這時純硬件的長城方案就顯出了明顯的優勢。
長城方案從技術上講就是通過特定的硬件設計,完全實現了以文本模式顯示漢字,而不是CCDOS的圖形模式。它跟英文字符的顯示方式完全相同,在自家的漢卡上集成了字庫及顯示邏輯器件,只要往屏幕緩衝區寫入一個漢字代碼,屏幕上就會自動顯示出對應的漢字。為了保證漢字與英文的一致性,它的屏幕也換成的高清的640×400分辨率。如此,大量的英文軟件幾乎不需要做很大的改動,就可以很好地兼容漢字顯示。
當然,硬件的漢卡方案的代價也非常高:為了顯示漢字,要往主機中插入一塊物理的“漢卡”,其價格在當年也相當昂貴。
長城的硬件方案好像是獨家的,因為門檻太高,擋住了同行的腳步,但CCDOS變成了軟件方案的祖師爺,各種在它基礎上修修補補的山寨版如雨後春筍相繼問世。印象中,好像普遍都是以CCDOS的2.10或2.13版本為基礎修改的。
當時市場上還沒有現成的彙編語言編譯器,或者因為CCDOS的發行版已經固化了內部函數的地址,山寨版只能以DOS自帶的debug工具對CCDOS進行簡單粗暴的修改,套路基本都是在某個不重要的地址範圍內“挖”出一個窟窿,然後把自己的代碼放到那裏,再通過jmp彙編跳轉指令把調用關係連接起來。
用debug工具打開各家山寨的CCDOS,可以很清楚地看到負責顯示的int10中斷處理函數被改得千瘡百孔,東邊一塊西邊一坨,一些處理方式顯得十分笨拙,除了作者的水平所限,或許背後還有若干的無奈。這在軟件工程高度專業化的今天是難以想像的,但那就是當年國內眾多高手的實際水平。
等到PC電腦具備了漢字處理能力後,國內廠家又進入了輸入法的比拼時代,一時間百花齊放,進而造成了“漢卡”概念的異化。
CCDOS實現了漢字的顯示和錄入,但它自帶的輸入法非常的原始,非常折磨用户。輸入法有四種,分別是區位、首尾、拼音和快速。區位就是直接輸入漢字編碼的“區位碼”,錄入漢字要挨個查找漢字編碼表,幾乎無法實用;首尾碼則是按照一定的規則取漢字筆畫的首和尾,以對應的字母找出最終的漢字;拼音則是通過全拼字母來輸入漢字。最後這個“快速碼”則是集合了首尾和拼音兩種編碼,先輸入一個漢字的兩鍵首尾碼、再輸入兩鍵拼音碼,以此來選擇漢字。
首尾和拼音都有大量的重碼,快速碼則大幅壓縮了重碼率,有一定的積極意義,但代價就是要同時記住兩套完全不同的規則,實際操作的時候對大腦是非常殘酷的負擔。多年以後的今天,只記得漢字“的”對應的快速碼是TDDE。
顯然,CCDOS唯一能被用户普遍接受的編碼其實只有拼音一種,但它的設計非常反人類。漢字有大量的重音字,但CCDOS只是簡單粗暴地把按照拼音排序的一級字庫放了進去,並沒有按照使用頻度進行優化,特別是字庫是按照漢字的四聲排序的,一聲的在前、四聲的在後,最終導致一些非常常用的漢字要多次在提示行翻頁才能找到。有的用户甚至最後都形成了肌肉記憶,在輸入四聲“是”的時候,先打上shi三個字母,然後嘴裏默唸着123456789…拼命翻頁,最後大約是在第10頁的第四個位置終於找到!
因為CCDOS自帶輸入法的糟糕,給了其他廠家一展身手的機會,各種方案八仙過海各顯神通,搞輸入法編碼的一度踏破了國家專利局的門檻,甚至最後逼得專利局直接停止了對編碼方案的授權。
當時,後來粉墨登場的五筆輸入法好像還沒問世。因為DOS內存的限制,輸入法除了編碼方案不成熟,技術上也難以採用更復雜的算法來優化用户體驗,於是大家普遍採取了“少花錢、多辦事”的改良方案。其中最著名的大約是“聯想式輸入法”,其大致思路就是,當你輸入一個“中”字的時候,軟件會幫助“聯想”出後邊可能的“國”“華”“文”“間”等最可能的漢字,如果用户恰好要輸入其中的某個字,就可以直接一鍵選中,速度也因此大大加快,這一簡單粗暴的功能,對於很多需要大量輸入官話、套話的用户而言,是非常有吸引力的。憑藉這套聯想式輸入法,在當年舉辦的輸入法比賽中,有人甚至創造了每分鐘輸入180字的驚人速度。
與此同時,PC電腦也從8088進入到了80286時代,速度大大加快;DOS也升級到了4.0以上版本(此處記憶可能不太準確),增加了“擴展內存”,屏幕也基本普及了高清顯示,如此,制約軟件漢字方案的各種因素基本消除:顯示速度不再緩慢,字庫可以放到擴展內存中、不再佔用寶貴的常規內存,屏幕顯示也做到了中英文完全相同,各種軟漢字系統開始成為主流。
軟件方案雖然保證了實用效果,但因為盜版的存在,無法保證廠家的經濟利益,於是聰明的廠家又把本來的軟件方案做了部分的“硬化”,推出了各種各樣的“漢卡”。有的漢卡集成了顯示字庫,但最終顯示仍然是軟件實現的,硬件只是相當於一個儲存文件;有的漢卡甚至連字庫都沒有,僅僅是一個標識版權的加密卡。這些後來的“漢卡”,與當初長城的漢卡只是名字相同,功能卻完全不是一回事。
在那幾年的漢卡大戰中,各路人馬各顯神通,從技術、產品乃至銷售領域全面發力,最終有一家自帶“聯想式輸入法”的廠家大獲全勝,公司的名字也改成了大名鼎鼎的聯想電腦。自帶WPS編輯軟件的“金山漢卡”也取得了很好的市場業績。
輸入法比拼告一段落後,又開始了新一輪的打印效果的比拼。最早的漢字是16點陣的顯示和打印,後來進化到了16點陣顯示、24點陣打印,再後來就是更高的32、48點陣打印了。這一輪的明星是“巨人漢卡”,漢卡的內涵,從代表顯示到代表輸入法,再到代表打印效果,一路被重新定義。
因為軟件方案的勝出,代價高昂的長城硬件方案逐漸淡出。純軟件方案也從最早的修修補補,進化到了各自寫源代碼從頭開發,其中最具影響力的是UCDOS系統。這套系統推出的同時,PC進入到了windows 3.0時代,顯示和打印都有了全新的技術路線,國內高手為了跟上節奏,又推出了相應的漢化補丁。早期的補丁是跟DOS時代同樣套路的粗暴修改系統文件,後來有人找到了更精巧、安全的辦法,通過修改windows核心函數的調用指向,讓系統進入獨立的漢字模塊,並以此推出了風靡一時的“中文之星”,其創始人後來又推出了“四通利方”…..
一直到windows95發行之初,四通立方還在頑強地推出“更懂中文”的系統補丁,但慢慢發現實在無法做得更好,用户也不再接受這些東西,先後歷經10多年的“漢卡”大戰也終於成為歷史。