三級警戒比想像中要來得早結束 (我原先認為最樂觀的情形是 2021/09 月份以後降級,最悲觀要一年以後才會降級)。即使如此,對台灣經濟也已經產生實質傷害。
原先的計畫是在 6/14 - 6/30 期間: 繼續撰寫作業系統、製作論文讀後懶人包
但是,收入的問題還是沒有被解決。
–
這段時間沒有收入,支出卻依然存在。
我雖然住在老家,但還是要每個月給房租、電話費也照樣得繳、還是一樣得吃飯。
那些東西從哪裡來? 答案當然是 「錢」。
–
「有沒有辦法在這段期間依舊擁有收入?」
這樣的想法源自於自我要求,以及想要補貼損失的心理。(因為錢還是要花,日子還是得過)
檢視自己的身份資格,我到衛福部網站申請了急救紓困, 審核後得到了 20000 元的補助,但這終究是應急用的一次性補貼。
現在我不能實體教課、也不方便外出、又想要從中獲得成長,到底該怎麼做?
這讓我想到商業裡很常出現的一張圖:
突然腦中靈感來了,我轉個念把圖裡的那三個元素換掉:
說不上來,但當時的直覺告訴我「這或許做得到」, 於是我開始研究可以怎麼做。
後來找到有學習補助的工研院線上課程,部份緩解了沒有收入的焦慮感。
–
稍微整理了一下這段時間發生的事情:
項目看起來很多很雜,但可以粗略的用兩個指標區分:
(一) 它能不能為我帶來(現階段的)收入?
(二) 它能不能為我帶來學習或成長?
在接下來的幾篇文章裡, 我會以主題為單位和大家分享這段時間自己在做的事情,以及從中帶給自己的收穫。
【題外話】這個部落格從大學開始更新,不知不覺也六年了,真有意思。
果然還是要給自己明確的要求和挑戰。
從 5/17 - 5/30 結束後到現在快兩週了, 除了忙著處理研究所的資料和極少量的訓練外,就沒有做其他事情了。
剛好資料的部份也告了一個段落,繼續給自己設定挑戰吧。
這次的設定期間是 6/14 - 6/30。
從撰寫原始檔、組/編譯程式,到了最後還要跑虛擬機。
如果每次都要一行行打指令會很辛苦。
所以要把這些指令寫成 Makefile,在往後的測試會相對容易和簡便。
-
Makefile 主要要做的事情有:
ipl10.asm
asmhead.asm
、nasmfunc.asm
、bootpack.c
、os.lds
主要的指令有這些
nasm ipl10.asm -o ipl10.bin -l ipl10.lst
nasm asmhead.asm -o asmhead.bin -l asmhead.lst
nasm -g -f elf nasmfunc.asm -o nasmfunc.o
gcc -march=i486 -m32 -nostdlib -g -O0 -T os.lds bootpack.c nasmfunc.o -o bootpack.hrb -fno-pie
cat asmhead.bin bootpack.hrb > haribote.sys
有兩種產生映像檔的寫法,這兩種都會用到 mcopy
。
mformat
、mcopy
):
mformat -f 1440 -C -B ipl10.bin -i haribote.img ::
mcopy -i haribote.img haribote.sys ::
dd
、mcopy
):
dd if=/dev/zero of=haribote.img bs=512 count=2880
dd if=ipl10.bin of=haribote.img conv=notrunc
mcopy -i haribote.img haribote.sys ::
將以上 STEP 1、STEP 2 裡的指令寫成 Makefile。 (以下為完整程式碼)
``` OSNAME := haribote
.DEFAULT_GOAL : all .PHONY : all all : img DEBUG_DIR := ./debug OBJDUMP_FLAGS := –full-contents –all-headers –target=binary –architecture=i386:intel –disassemble-all
#=============================================================================== ipl10.bin : ipl10.asm asmhead.bin : asmhead.asm nasmfunc.o : nasmfunc.asm
%.bin : %.asm @make make-debug-dir nasm $^ -o $@ -l ${DEBUG_DIR}/$*.lst
%.o : %.asm @make make-debug-dir nasm -f elf $^ -o $@ -l ${DEBUG_DIR}/$*.lst
BOOTPACK_FILES := bootpack.c nasmfunc.o bootpack.hrb : ${BOOTPACK_FILES} os.lds @make make-debug-dir
gcc -march=i486 -m32 -nostdlib -g -O0
-T os.lds
-o $@
-fno-pie
${BOOTPACK_FILES}
objdump ${OBJDUMP_FLAGS} $@ > ${DEBUG_DIR}/$@.dasm
${OSNAME}.sys : asmhead.bin bootpack.hrb %.sys : @make make-debug-dir cat $^ > $@
objdump ${OBJDUMP_FLAGS} $@ > ${DEBUG_DIR}/$@.dasm
專案原始檔 (01_source1_ipl):https://github.com/shouzo/My-30OS/tree/master/20210517/01_source1_ipl (延續 2017/07/09 的進度)
在 helloos.nas
裡新增以下內容,並存成 ipl.nas
MOV AX,0x0820
MOV ES,AX
MOV CH,0 ; 磁柱0
MOV DH,0 ; 磁頭0
MOV CL,2 ; 磁區2
MOV AH,0x02 ; AH=0x02:讀入磁碟片
MOV AL,1 ; 磁區1
MOV BX,0
MOV DL,0x00 ; 磁碟機 A
INT 0x13 ; 呼叫磁碟片 BIOS
JC error ; Jump If Carry:「進位旗標」 (Carry Flag) 為 1 時,執行跳躍程序
nasm -o bootloader -l ipl.lst ipl.nas
dd if=/dev/zero of=ipl.img bs=512 count=2880
dd if=bootloader of=ipl.img conv=notrunc
ipl.img
專案原始檔 (01_source2_ipl10):https://github.com/shouzo/My-30OS/tree/master/20210517/01_source2_ipl10
以下為 ipl10.nas
的完整程式碼:
``` ; haribote-ipl ; TAB=4
CYLS EQU 10 ; 讀取 10 次 (磁柱的份量)
ORG 0x7c00 ; 指定從 0x7c00 開始執行
; 以下是為了標準 FAT12 格式的軟式磁碟片的記述
JMP entry
DB 0x90
DB "HARIBOTE"
DW 512
DB 1
DW 1
DB 2
DW 224
DW 2880
DB 0xf0
DW 9
DW 18
DW 2
DD 0
DD 2880
DB 0,0,0x29
DD 0xffffffff
DB "HARIBOTEOS "
DB "FAT12 "
RESB 18