人,很是奇妙,總是要把簡單事情複雜化處理。
凡事簡單化處理不是挺好嗎?
就像一個可以日處理幾千億元的證券交易系統,這麼複雜的軟體,
攤開到底,也不過就是0與1而已!
高一下,賴姓同學突然拿了本書給我-<6501組合語言>,說他看不懂,問我要不要,50塊便宜賣我就好!當下我也不懂,沒敢要,趁著回家再仔細翻了翻那本小教授的操作手冊,終於知道組合語言就是機器語言用的那個語言....莫非這就是我打著遊戲,片頭片尾那個捲動字幕所用的那個....也就是我用BASIC始終覺的不可能設計出這個由遊戲的畫面效果的那個.....組合語言!
就這樣,50元買了這本帶領我走向靈異世界(0與1啦)的書。
畢竟電腦不再身邊,這書一連看了好多天始終沒看懂,就連怎麼從我習慣的開機後”>”的狀態,切換成”-”,都讓想破頭,百思不得其解,應該是哪裡沒注意到吧!最後在操作手冊上,終於發現該不就是這個指令吧"Call -151”(註1)。新奇感維持沒幾天,很外就被強烈挫折感給淹沒了,這....是天書吧!MOV, ADD, ROL, INT….誰看的懂啊!
不死心下,持續再仔細看了看,終於漸漸看懂了,或者是說: 腦袋終於格式化完成了,就像倚天屠龍記裡面,張三豐臨危傳授張無忌太極拳那般,果然是要把腦袋裡既有的程式觀念給忘的乾乾淨淨的,才能真正學會組合語言。
所以,我入門了......似乎功力開始升級了.....嗯....應該說是降級!因為,我從高階語言,降為寫低階語言!
玩著玩著,逐漸發現竟然是低階語言才能控制所有電腦周邊,
玩著玩著,我發現,這組合語言的指令,怎麼沒有乘除?
玩著玩著,似乎每個指令都有個執行週期!
執行週期是啥?
在以前寫BASIC程式,只知道解題,頂多著重在迴圈數的多寡,在排序都還是泡沫....等的討論時期,沒人太注重程式效能,但是,對聲光效果娛樂的遊戲而言,效能才是王道。沒想到,這本組合語言最後附錄篇之一的指令清單的最後那個週期欄位,原來才是關鍵。
原來,在組合語言世界,計較的是0點以後多小數位的速度之爭,要讓字幕很平順地從螢幕下方捲動到上方,光是80*192(螢幕320寬*192像素高)的座標轉換相對記憶位址,還真是很深很深的學問!
8位元組組合語言沒有乘除指令,頂多用旋轉指令來達到2,4,8..倍,或½,¼….。沒有乘除!那有斜率的直線怎麼畫?看到該本書那篇純粹用加減做出畫線的功能,令我太震驚!竟然...原來...算了10年的數學,竟然不知道乘除的基礎就是加加減減,這10年數學算是白學了!
因為某些因素,我後來並沒有繼續深入這門學問,但這兩年的摸索,對我卻是有非常非常深刻的體認,收穫巨大,但也造成後面的悲劇,這是後話。
註:
[開發技術組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/dev/1
[鐵人人生組]全文閱讀
http://ithelp.ithome.com.tw/ironman6/player/yafuu168/life/1
yafuu168提到:
Call - 151
終於找到文了 caLL -151,但為何我還記得?!都快30年了......
<pre class="c" name="code">http://apple2.org.za/gswv/a2zine/faqs/csa2pfaq.html
All Apple II's include a "monitor" program in ROM. Entering CALL-151 from the BASIC prompt puts you 'in' the monitor. Here you can view and change values in key memory locations and enter machine language routines.
今天天氣這麼好,怎麼我老是秀逗秀逗....這是網址, 不是程式碼
http://apple2.org.za/gswv/a2zine/faqs/csa2pfaq.html