ねこめもmkII(マークツー)

本家ねこめも (http://nekomemo2.site)の補助用。 主に勉強ネタ。

5日目(bootpack.cの改造とフォント対策)

4日目終了時点での振り返り
現在の自分の作業フォルダ:~/tolset/haribote$
上記内で作業中のファイル

作業はHariboteOS/prjects/05_days/harib02aフォルダからbootpack.cを開いて写経。
と思ったが、最後のinit_screenの部分は長くて結局コピペ。
make runで4日目の最後と同じ画面が出てくる。
次にharib02bフォルダのbootpack.cを参照。さらにharib02cフォルダのも参照。
これも2つとも同じ画面が出るだけ。
harib02dで同じ画面だが文字「A」が出せる。
だんだんとbootpack.cの内容を充実させていく日だとわかる。
 

しかしharib02eで詰まる。
結局、hankaku.txtをコンバートするためのC言語プログラムは検索してコピペさせてもらった。
(ここはLinuxユーザーの人は自作している場合が多い)
このファイルは名称をconv_hankaku.cと名付けた。

harib02eにあるhankaku.txtを自分の環境にコピーしておき、試しに実行してみる。 
 $ gcc -o conv_hankaku conv_hankaku.c
 
$ ./conv_hankaku
これでhankaku.cが作成できている。
これを最終的にOSに組み込むようにMakefileを編集する。

この終了時点でのMakefile

--- 

# ファイル生成規則
default:
    make img

ipl.bin : ipl.nas Makefile
    nasm ipl.nas -o ipl.bin -l ipl.lst

asmhead.bin : asmhead.nas Makefile
    nasm asmhead.nas -o asmhead.bin -l asmhead.lst

nasmfunc.o : nasmfunc.nas Makefile          # nasmfunc.nasのバイナリファイル
    nasm -g -f elf nasmfunc.nas -o nasmfunc.o

bootpack.hrb : bootpack.c har.ld  nasmfunc.o Makefile     # リンカスクリプト使用
    gcc -march=i486 -m32 -nostdlib -T har.ld -fno-pic bootpack.c hankaku.c nasmfunc.o -o bootpack.hrb

haribote.sys : asmhead.bin bootpack.hrb Makefile
    cat asmhead.bin bootpack.hrb > haribote.sys

haribote.img : ipl.bin haribote.sys Makefile
    mformat -f 1440 -C -B ipl.bin -i haribote.img ::
    mcopy haribote.sys -i haribote.img ::

# コマンド
hankaku :   # conv_hankaku.cでhankaku.cを作る
   gcc -o conv_hankaku conv_hankaku.c
    ./conv_hankaku

asm :
    make -r ipl.bin

img :
    make -r haribote.img

run :
    make img
    qemu-system-i386 -fda haribote.img  # -fda追加

clean :
    rm *.lst *.bin *.sys *.img *.hrb *.o

---

自分のレベルと環境に合わせたMakefileになってきたので、他の人のものが参照しづらくなりかなりきつい。

その後harib02eフォルダのbootpack.cを使って、make run。
今度は前と同じ画面上にABC 123が出てきて成功。



 今回参照させて頂いたサイト:
https://qiita.com/pollenjp/items/d0f4e09a7fd50dfd58f5
http://bttb.s1.valueserver.jp/wordpress/blog/2017/12/13/makeos-5-1/

4日目(C言語入門)

本書の通りに nasmfunc.nasbootpack.cを書き換える。
make runすると白い画面が出るはずが、まだ黒いままだった。
細々としたところを書き直したが、結局のところリンカスクリプトを変えたら白い画面になった。

最終的に書き換えたというかコピペしてきたhar.ldファイル。

---

/* https://vanya.jp.net/os/haribote.html#hrb */

OUTPUT_FORMAT("binary");

SECTIONS
{
   .head 0x0 : {
       LONG(64 * 1024)  /* 0 : stack+.data+heap の大きさ(4KBの倍数) */
       LONG(0x69726148)      /* 4 : シグネチャ "Hari" */
       LONG(0)               /* 8 : mmarea の大きさ(4KBの倍数) */
       LONG(0x310000)        /* 12 : スタック初期値&.data転送先 */
       LONG(SIZEOF(.data))   /* 16 : .dataサイズ */
       LONG(LOADADDR(.data)) /* 20 : .dataの初期値列のファイル位置 */
       LONG(0xE9000000)      /* 24 : 0xE9000000 */
       LONG(HariMain - 0x20) /* 28 : エントリアドレス - 0x20 */
       LONG(0)               /* 32 : heap領域(malloc領域)開始アドレス */
   }

    .text : { *(.text) }
    .data 0x310000 : AT ( ADDR(.text) + SIZEOF(.text) ) {

        *(.data)
        *(.rodata*)
       *(.bss)

    }

    /DISCARD/ : { *(.eh_frame) }

}

---

内容は不明。でもこれで白画面になった。しましま模様もOK。
余談だが、リンカスクリプトについては別途検索して、この本とは関係のないサイトを参照した。
これは別途学習する必要がある。 

C言語の内容は初心者向きでわかりやすかったので、このまま進める。
nasmfunc.nasのwrite_mem8のところはコメントアウト

続けてbootpack.cを書き換え、nasmfunc.nasも増えた関数を追加して実行し、ウィンドウの色が変わることを確認。
nasmfunc.nasでは、関数は最初のアンダーバーは消しておく。
タイプミスしなければ、エラーはないはず。

そういえば、後半はいちいちmake cleanしないと、前の画面(しましま)が出てきた。
なのでこの辺りから、古いファイルの削除は必須かもしれない。 

内容の詳細は一度では理解し辛かったので、今後もその都度読み返すことにする。 



今回参照させて頂いたサイト:
https://inakadeikinaosu.com/shumi/os_nyumon_8/
https://hariboteos.hatenadiary.org/entry/20060305/1141555667
https://vanya.jp.net/os/haribote.html 
http://hrb.osask.jp/wiki/?tools/nask
https://yyatsuo.com/?p=523 

STM8S関連で参考にしているサイト

目次代わりに、自分がよくSTM8関連で使っているリンクまとめ。

https://www.stmcu.jp/stm8/stm8s/
本家メーカーの日本語サイト。
内容がわからなくても必須。

http://www.count-zero.ru/
ロシアのサイトなので、Google翻訳頼り。
STVDのインストールはここを参照するといい。

https://blog.mark-stevens.co.uk/
カテゴリSTM8で見ていく。

https://ednjapan.com/edn/articles/1303/11/news001.html
EDN Japanのマイコン初心者入門。(途中で有料)
STマイクロの中の人が解説しているため、STMシリーズ中心の内容でわかりやすい。
この項目以外にも、よく参照している。

現状ここまでだが、もし増えたら追記していく予定。