今天為了試驗 SDCC code banking,一直在試 crtbank.asm,怎麼弄都不行,最後想到直接置掉 mcs51.lib 看看。結果,當我下 sdcclib -m mcs51.lib,竟然回我一個錯誤訊息。
sdcclib -m mcs51.lib
ERROR: File 'mcs51.lib' was not created with 'sdcclib'
最後,直接下 sdcclib -a mcs51.lib crtbank.rel,把檔案暴力加進去,結果....裏面檔案都不見了,只剩下 crtbank.rel
sdcclib -a mcs51.lib crtbank.rel
sdcclib -m mcs51.lib
crtbank.rel
當然這樣是不能用的啦,其它的 startup code 都不見了,根本無法編譯。所以又手動把 C:\Program Files\SDCC\lib\src\mcs51 下的 asm 全部編進 mcs51.lib。傻眼的是雖然可以加到 SDCC,但是搞出來的 hex 檔燒進去竟然動不了,真是怪了。
只好又去拜酷狗大神,歷經千幸萬苦,最後找到原始編譯 mcs51.lib 才解決了問題。原來我一直使用 asx8051 -ol 是不對的,應該下 asx8051 -plosgff 才對。而且 sdcclib 也不用加 -a 參數。
del mcs51.lib
del *.rel
asx8051 -plosgff crtbank.asm
asx8051 -plosgff crtcall.asm
asx8051 -plosgff crtclear.asm
asx8051 -plosgff crtpagesfr.asm
asx8051 -plosgff crtstart.asm
asx8051 -plosgff crtxclear.asm
asx8051 -plosgff crtxinit.asm
asx8051 -plosgff crtxstack.asm
sdcclib mcs51.lib crtbank.rel
sdcclib mcs51.lib crtcall.rel
sdcclib mcs51.lib crtclear.rel
sdcclib mcs51.lib crtpagesfr.rel
sdcclib mcs51.lib crtstart.rel
sdcclib mcs51.lib crtxclear.rel
sdcclib mcs51.lib crtxinit.rel
sdcclib mcs51.lib crtxstack.rel
copy /Y "C:\Program Files\SDCC\lib\src\mcs51\mcs51.lib" "C:\Program Files\SDCC\lib\small"