ぼちぼち。

70.9kg

 

お米を食べる代わりに豆腐へ変更。

大量に豆腐を確保してもらい、毎食お米の代わりに食べてみる。

また、奥様に鳥のムネ肉を茹でてもらったものまで用意してもらった。

これでダイエットは進めるぜ!

また、朝の散歩も20〜30分程度だが始めた。

まだ足の筋肉痛が取れておらず、辛いがまずは筋力を戻さねば。。

 

さて、もう始めてかなりの時間が経っているが、本の中では4日目。。

 

$ make run

make -r img

make -r haribote.img

nasm ipl10.nas -o ipl10.bin -l ipl10.lst

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

nasm -f elf32 naskfunc.nas -o naskfunc.o -l naskfunc.lst

x86_64-elf-gcc -c -g -march=i486 -m32 -nostdlib bootpack.c -o bootpack.o

x86_64-elf-ld -m elf_i386 -e HariMain -o bootpack.hrb -T hrb.ld bootpack.o naskfunc.o

cat asmhead.bin bootpack.hrb > haribote.sys

mformat -f 1440 -C -B ipl10.bin -i haribote.img ::

mcopy -i haribote.img haribote.sys ::

qemu-system-i386 -L . -m 32 -monitor stdio -s -drive file=haribote.img,format=raw,if=floppy -boot a

QEMU 5.0.0 monitor - type 'help' for more information

(qemu) 

f:id:kanazo3:20200605074439j:plain

じゃ〜ん!!!

確かに本の通り進んでいるだけだけど、確かにこの状態まで来るとなんか嬉しい。。。。

 

絵を描いている部分のコードを見てるけど、なんとなくどういう風に

一つ一つが絵を描いているのか?のイメージが掴めなかったので一箇所ずつ色変えて確かめてみた。

 

f:id:kanazo3:20200605081418j:plain

 

なるほどね。。

 

こういう状況まで来ると、単に楽しい。。。

ちょっとずつだけど、少しずつ進めていこう。

止まっている感がない事は嬉しいものだ。

 

続く。

 

 

 

調べ続ける。。。

71.1kg

 

昨日の朝、ちょっと歩きたくて、外へ出て階段をガッツリ登ってみたら

とんでもない筋肉痛になって辛い。。。。

こんなに筋力落ちているのか。。

徐々に復活させよう。

 

という事で、ちょっとずつ読み進めるが、まぁ、分からない事ばかり。。

今までのように動かないって状態では無いので、気分は少し違うが。。

 

void set_palette(int start, int end, unsigned char *rgb)

{

        int i, eflags;

        eflags = io_load_eflags();      /* 割り込み許可フラグの値を記録する */

        io_cli();                       /* 許可フラグを0にして割り込み禁止にする */

        io_out8(0x03c8, start);

        for (i = start; i <= end; i++) {

                io_out8(0x03c9, rgb[0] / 4);

                io_out8(0x03c9, rgb[1] / 4);

                io_out8(0x03c9, rgb[2] / 4);

                rgb += 3;

        }

        io_store_eflags(eflags);        /* 割り込み許可フラグを元に戻す */

        return;

}

特に、本の中に説明は無いように見える。。

(AT)BIOS - os-wiki

このページにあるのを読んでいて、多分、こういう事なんだろうという予測の答えに

自分の中で辿り着いた。(と思っている。。)

VGAグラフィックスの設定は、320x200x8bitカラーというモードなのだが、

パレット設定という項目があり、16色モードの際にはパレット設定というものが

Red: 0〜0x3f

Green: 0〜0x3f

Blue: 0〜0x3f

って書いてある。

多分、ここから来るのだろう。要するに8bit全部使っていなくて6bitで色を表現している

って事なのかな。。

RGB ⇄ グレイ変換ってのがあって、

 Gray = 0.299 * red + 0.587 * green + 0.114 * blue

って式で変換されるらしい。

 

つまりは、色表現の輝度の幅とかが小さくなるのかなって理解をしてみてます。。

 

まずは、そういう理解で多分、そんなに間違っていないのかなって思っているが。。

(全然違ったら、悲しいけど。。。)

 

さぁ、調べる事は尽きないな。。。

 

続く。

 

 

前進!

71.8kg

 

様子見だな。

 

さぁ、ついにC言語が導入されたので気分はかなり楽になった。

ただ、余りに時間が空いてしまった為、何をやっていたのか?忘れて

しまった為、もう一度3日目及び導入直前にやっていた部分を復習!

 

ふむふむ。確かに、そんな事やってた。。

って感じで、本とコードを読み直し。

 

という事で、bootpack.cを修正して実行!

$ make run

make -r img

make -r haribote.img

nasm ipl10.nas -o ipl10.bin -l ipl10.lst

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

nasm -f elf32 naskfunc.nas -o naskfunc.o -l naskfunc.lst

x86_64-elf-gcc -c -g -march=i486 -m32 -nostdlib bootpack.c -o bootpack.o

x86_64-elf-ld -m elf_i386 -e HariMain -o bootpack.hrb -T hrb.ld bootpack.o naskfunc.o

cat asmhead.bin bootpack.hrb > haribote.sys

mformat -f 1440 -C -B ipl10.bin -i haribote.img ::

mcopy -i haribote.img haribote.sys ::

qemu-system-i386 -L . -m 32 -monitor stdio -s -drive file=haribote.img,format=raw,if=floppy -boot a

QEMU 5.0.0 monitor - type 'help' for more information

(qemu)

f:id:kanazo3:20200601083029j:plain

 

いいね。

安心感がある。

 

 

抜けたぁ。。。。

72.4 kg...

 

完全にコメ断ちできていないとはいえ、また増えた。

まぁまぁコメもオヤツも食べて無いと思うんだけど。。。(Orz..)

 

という事で、ipl10.nasからJumpした後のコードが全く実行されていない

って状態のようだが、何故か。。

 

う〜ん。。。。

 

こうなったら、実行されているはずのバイナリを直に観測してみながら

何かヒントを得るしか無いか。。

 

ipl10.lstよりJumpしてasmheadへ移る直前を抜粋:

81 000000A8 882EF00F            MOV    [0x0ff0],BYTE CH        ; IPLがどこまで読んだのかをメモ 

82        ;                     JMP     0xc200

83                                  

84 000000AC C606F10F0B          MOV    BYTE [0x0ff1],0x0b      ; 進捗チェック用フラグ

85                                                  

86 000000B1 E9(30C3)            JMP     0xc330

 

asmhead.lstより、最初の部分を抜粋:

18        ;      画面モードを設定

19

20 00000000 C706F20F0C00        MOV             WORD [0x0ff2], 0x000c   ; 進み具合テスト1

 

asmhead.lstの20行目が実行されていない。

バイナリは狙ったアドレスへ読み込まれているのか?はQEMUにて確認

$ make run

make -r img

make -r haribote.img

nasm ipl10.nas -o ipl10.bin -l ipl10.lst

nasm -f elf32 asmhead.nas -o asmhead.bin -l asmhead.lst

nasm -f elf32 naskfunc.nas -o naskfunc.o -l naskfunc.lst

x86_64-elf-gcc -c -g -march=i486 -m32 -nostdlib bootpack.c -o bootpack.o

x86_64-elf-ld -m elf_i386 -e HariMain -o bootpack.hrb -T hrb.ld bootpack.o naskfunc.o

cat asmhead.bin bootpack.hrb > haribote.sys

mformat -f 1440 -C -B ipl10.bin -i haribote.img ::

mcopy -i haribote.img haribote.sys ::

qemu-system-i386 -L . -m 32 -monitor stdio -s -drive file=haribote.img,format=raw,if=floppy -boot a

QEMU 5.0.0 monitor - type 'help' for more information

(qemu) xp/200xh 0xc200

000000000000c200: 0x457f 0x464c 0x0101 0x0001 0x0000 0x0000 0x0000 0x0000

000000000000c210: 0x0001 0x0003 0x0001 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c220: 0x0040 0x0000 0x0000 0x0000 0x0034 0x0000 0x0000 0x0028

000000000000c230: 0x0006 0x0002 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c240: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c250: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c260: 0x0000 0x0000 0x0000 0x0000 0x0001 0x0000 0x0001 0x0000

000000000000c270: 0x0006 0x0000 0x0000 0x0000 0x0130 0x0000 0x0140 0x0000

000000000000c280: 0x0000 0x0000 0x0000 0x0000 0x0010 0x0000 0x0000 0x0000

000000000000c290: 0x0007 0x0000 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2a0: 0x0270 0x0000 0x002b 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2b0: 0x0001 0x0000 0x0000 0x0000 0x0011 0x0000 0x0002 0x0000

000000000000c2c0: 0x0000 0x0000 0x0000 0x0000 0x02a0 0x0000 0x0130 0x0000

000000000000c2d0: 0x0004 0x0000 0x0013 0x0000 0x0004 0x0000 0x0010 0x0000

000000000000c2e0: 0x0019 0x0000 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2f0: 0x03d0 0x0000 0x007d 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c300: 0x0001 0x0000 0x0000 0x0000 0x0021 0x0000 0x0009 0x0000

000000000000c310: 0x0000 0x0000 0x0000 0x0000 0x0450 0x0000 0x0018 0x0000

000000000000c320: 0x0003 0x0000 0x0001 0x0000 0x0004 0x0000 0x0008 0x0000

000000000000c330: 0xc766 0xf205 0x000f 0x0c00 0xb000 0xb413 0xcd00 0x6610

000000000000c340: 0x05c7 0x0ff2 0x0000 0x0008 0xc766 0xf405 0x000f 0x4000

000000000000c350: 0x6601 0x05c7 0x0ff6 0x0000 0x00c8 0x05c7 0x0ff8 0x0000

000000000000c360: 0x0000 0x000a 0x02b4 0x16cd 0xf1a2 0x000f 0xb000 0xe6ff

000000000000c370: 0x9021 0xa1e6 0x66fa 0x05c7 0x0ff4 0x0000 0x000d 0xace8

000000000000c380: 0x0000 0xb000 0xe6d1 0xe864 0x00a3 0x0000 0xdfb0 0x60e6

 

ふむ。

確かに予定アドレスへコードは読み込まれているようだし、動いても良いだろうと

思うのだが。。。

 

う〜ん。。。。(おっ!!)

そもそも、この前からよく分かっていない0xc200から入っているelfなんちゃって部分が

関係あるのかな。。。

Tips ELFフォーマットその1 ELFフォーマットについて

ここに詳しく書いてあるが、現状からするとこれがあっても、その先のバイナリへ

直接飛ばしてれば、そんなに問題があるようには思えない。

じゃ、なんで実行されないんだろう。。。

 

という事で、そうなら同じ事させた場合のバイナリコードの違いを見てみよう。

ipl10.lstよりJumpしてasmheadへ移る直前(上と同じ):

81 000000A8 882EF00F            MOV    [0x0ff0],BYTE CH        ; IPLがどこまで読んだのかをメモ

82        ;                     JMP     0xc200

83                                  

84 000000AC C606F10F0B          MOV    BYTE [0x0ff1],0x0b      ; 進捗チェック用フラグ

85                                                  

86 000000B1 E9(30C3)            JMP     0xc330

 

asmhead.lstより、最初の部分を抜粋(バイトアクセスへ修正):

18        ; 画面モードを設定

19

20 00000000 C605F20F00000B      MOV    BYTE [0x0ff2], 0x0b     ; 進み具合テスト1

 

ん??

なんか、違ってねぇか??これか??

。。。。

 

よく考えたら、asmhead.nasアセンブル事に、よく分からず変なオプションつけてた。。

 

Makefile内 アサンブル及びコンパイル部分より:

asmhead.bin : asmhead.nas Makefile

#       nasm asmhead.nas -o asmhead.bin -l asmhead.lst

        nasm -f elf32 asmhead.nas -o asmhead.bin -l asmhead.lst

 

naskfunc.o : naskfunc.nas Makefile          # naskfunc.nasのバイナリファイル作成

#       nasm -g -f elf naskfunc.nas -o naskfunc.o -l naskfunc.lst

        nasm -f elf32 naskfunc.nas -o naskfunc.o -l naskfunc.lst

 

bootpack.hrb : bootpack.c hrb.ld naskfunc.o Makefile       # リンク,コンパイル

#       i386-elf-gcc -march=i486 -m32 -nostdlib -T hrb.ld -g bootpack.c naskfunc.o -o bootpack.hrb

        x86_64-elf-gcc -c -g -march=i486 -m32 -nostdlib bootpack.c -o bootpack.o

        x86_64-elf-ld -m elf_i386 -e HariMain -o bootpack.hrb -T hrb.ld bootpack.o naskfunc.o

 

 

 

この辺り、naskfunc.c側の処理とごっちゃになってて、

同じようなオプションにしたような。。

 

でも、結局、catでつなげているだけなんで、関係無いんじゃないか???

 

Makefile 内イメージファイル作る辺りより:

haribote.sys : asmhead.bin bootpack.hrb Makefile

        cat asmhead.bin bootpack.hrb > haribote.sys

 

haribote.img : ipl10.bin haribote.sys Makefile

        mformat -f 1440 -C -B ipl10.bin -i haribote.img ::

        mcopy -i haribote.img haribote.sys ::

 

もしかして、asmheadは -f elf32なんてオプション外せば良いのでは。。。

Go!!!

 

$ make run

make -r img

make -r haribote.img

nasm ipl10.nas -o ipl10.bin -l ipl10.lst

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

nasm -f elf32 naskfunc.nas -o naskfunc.o -l naskfunc.lst

x86_64-elf-gcc -c -g -march=i486 -m32 -nostdlib bootpack.c -o bootpack.o

x86_64-elf-ld -m elf_i386 -e HariMain -o bootpack.hrb -T hrb.ld bootpack.o naskfunc.o

cat asmhead.bin bootpack.hrb > haribote.sys

mformat -f 1440 -C -B ipl10.bin -i haribote.img ::

mcopy -i haribote.img haribote.sys ::

qemu-system-i386 -L . -m 32 -monitor stdio -s -drive file=haribote.img,format=raw,if=floppy -boot a

QEMU 5.0.0 monitor - type 'help' for more information

(qemu) 

 

f:id:kanazo3:20200531170119j:plain

 

よく見慣れた画面だ。

さて、ここでバイナリコードを確認!

ipl10.lst: 

84 000000AC C606F10F0B       MOV             BYTE [0x0ff1],0x0b      ; 進捗チェック用フラグ

85

86 000000B1 E9(30C3)         JMP             0xc330

 

asmhead.lst: 

18              ; 画面モードを設定

19

20 00000000 C606F20F0B       MOV             BYTE [0x0ff2], 0x0b     ; 進み具合テスト1

21

22 00000005 B013             MOV             AL,0x13                 ; VGAグラフィックス、320x200x8bitカラー

 

良し!意図通り同じ命令!だったら、ここに飛んでれば絶対同じ動きするでしょ!!

(qemu) xp/100xh 0xff0

0000000000000ff0: 0x0b0a 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

0000000000001000: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

0000000000001010: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

0000000000001020: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

0000000000001030: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

 

う〜ん。。。やっぱり動いてない。。(涙)

 

コードはちゃんとロードされているのか?確認

(qemu) xp/200xh 0xc200

000000000000c200: 0x06c6 0x0ff2 0xb00b 0xb413 0xcd00 0xc710 0xf206 0x080f

000000000000c210: 0xc700 0xf406 0x400f 0xc701 0xf606 0xc80f 0x6600 0x06c7

000000000000c220: 0x0ff8 0x0000 0x000a 0x02b4 0x16cd 0xf1a2 0xb00f 0xe6ff

000000000000c230: 0x9021 0xa1e6 0xc7fa 0xf406 0x0d0f 0xe800 0x00b5 0xd1b0

000000000000c240: 0x64e6 0xaee8 0xb000 0xe6df 0xe860 0x00a7 0x010f 0x3a16

000000000000c250: 0x0f01 0xc020 0x2566 0xffff 0x7fff 0x8366 0x01c8 0x220f

000000000000c260: 0xebc0 0xb800 0x0008 0xd88e 0xc08e 0xe08e 0xe88e 0xd08e

000000000000c270: 0xbe66 0x0140 0x0000 0xbf66 0x0000 0x0028 0xb966 0x0000

000000000000c280: 0x0002 0x75e8 0x6600 0x00be 0x007c 0x6600 0x00bf 0x1000

000000000000c290: 0x6600 0x80b9 0x0000 0xe800 0x0060 0xbe66 0x8200 0x0000

000000000000c2a0: 0xbf66 0x0200 0x0010 0xb966 0x0000 0x0000 0x0e8a 0x0ff0

000000000000c2b0: 0x6966 0x00c9 0x0012 0x6600 0xe981 0x0080 0x0000 0x39e8

000000000000c2c0: 0x6600 0x00bb 0x2800 0x6600 0x8b67 0x104b 0x8366 0x03c1

000000000000c2d0: 0xc166 0x02e9 0x1074 0x6766 0x738b 0x6614 0xde01 0x6766

000000000000c2e0: 0x7b8b 0xe80c 0x0014 0x6766 0x638b 0x660c 0x1bea 0x0000

000000000000c2f0: 0x1000 0xe400 0x2464 0x7502 0xc3fa 0x6766 0x068b 0x8366

000000000000c300: 0x04c6 0x6766 0x0789 0x8366 0x04c7 0x8366 0x01e9 0xea75

000000000000c310: 0x00c3 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c320: 0x0000 0x0000 0x0000 0x0000 0xffff 0x0000 0x9200 0x00cf

000000000000c330: 0xffff 0x0000 0x9a28 0x0047 0x0000 0x0017 0x0120 0x0000

000000000000c340: 0x0000 0x0001 0x6148 0x6972 0x0000 0x0000 0x0000 0x0031

000000000000c350: 0x0000 0x0000 0x007d 0x0000 0x0000 0xe900 0x0010 0x0000

???

違わね?確かに当たり前かもしれないが、ヘッダ部分変わってる。。。

しかも、この命令は、見覚えが。。。。(asmheadの最初の命令!!)

000000000000c200: 0x06c6 0x0ff2 0xb0

 

って事は!!! ipl10.nasのJump先を直せば、もしかして!!!!

ipl10.lst: 

86 000000B1 E9(30C3)         JMP             0xc330 → 0xc200へ!

 

$ make run

make -r img

make -r haribote.img

nasm ipl10.nas -o ipl10.bin -l ipl10.lst

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

nasm -f elf32 naskfunc.nas -o naskfunc.o -l naskfunc.lst

x86_64-elf-gcc -c -g -march=i486 -m32 -nostdlib bootpack.c -o bootpack.o

x86_64-elf-ld -m elf_i386 -e HariMain -o bootpack.hrb -T hrb.ld bootpack.o naskfunc.o

cat asmhead.bin bootpack.hrb > haribote.sys

mformat -f 1440 -C -B ipl10.bin -i haribote.img ::

mcopy -i haribote.img haribote.sys ::

qemu-system-i386 -L . -m 32 -monitor stdio -s -drive file=haribote.img,format=raw,if=floppy -boot a

QEMU 5.0.0 monitor - type 'help' for more information

(qemu) 

f:id:kanazo3:20200531172026j:plain

静止画では伝わりませんが、この画面がチラチラして、何度もブートが繰り返されている

ような動作に見える。。。(何かが変わったようだ。。)

 

ちなみにメモリ上のチェッカ部分はどうか?と確認

(qemu) xp/100xh 0x0ff0

0000000000000ff0: 0x000a 0x0008 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

0000000000001000: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

0000000000001010: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

ここは、予期せぬ動きで書き変わってしまっている。

コードはどうなったんだろう。。

(qemu) xp/200xh 0xc200

000000000000c200: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c210: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c220: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c230: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c240: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c250: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c260: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c270: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c280: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c290: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2a0: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2b0: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2c0: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2d0: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2e0: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2f0: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c300: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c310: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c320: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c330: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c340: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

 

なぁにぃ〜!!!!!

空じゃねぇか!!!

もしかして、これか!!

 

asmhead.nasの先頭部分抜粋:

;        ORG             0xc200                  ; このプログラムがどこに読み込まれるのか

 

; 画面モードを設定

 

         MOV             BYTE [0x0ff2], 0x0b     ; 進み具合テスト1

asmhead.nasの先頭は、確か -f elf32オプション付けた際にエラーになるので外してた。

(それでもちゃんと0xc200にロードはされたのに。。ちゃんと分かってない。。)

 

じゃ、これ戻して、実行じゃ!!

        ORG             0xc200                  ; このプログラムがどこに読み込まれるのか

コメントアウト用の ”;” の削除だけ!! 

 

Go!!!

f:id:kanazo3:20200531174443j:plain

 

キタ〜 ♪───O(≧∇≦)O────♪!!!!

行ったじゃねぇか!!!!

 

イェ〜イ!(おっさん感半端ねぇか。。)

 

という事で、長い間全く進まず、本読んだり、Youtube観たり

寄り道ばかりしていたが、前進できた!!!

ただ、結論から言えば、ハマっていた理由は、全くのおバカさんな事のような気がするが、

まぁ、そういうものだろうと諦めずに、チョコチョコ続けていた自分を褒めよう。

 

という事で、これでC言語導入じゃ!!!

 

続く。

 

 

体重だけは。。

71.0kg!!!

 

おぉぉぉ。。。

糖質カット(お米断ちOnly)って、すごいな、やっぱり。。。

これ続けると、もしかして夢の60kg台へ!!(わくわく)

 

さて、全く進まないが調査もできていない。

ここに書ける事も体重の事だけになってきた。。。ヤバイ。。。

 

まずは、本やらネットやら、調べる事を続ける。。。

 

続く。。

緊急事態宣言解除から二日目!! & 祝 71kg台!!

71.5kg

ここ二日は、お米を一切食べなかった事及びお菓子も無し!

お酒は糖質オフをいつものように飲んでいたが、

結果、朝測ってみたら、久々の71kg台。

ふむ。続けてみたいと思う。。(できるかな。。)

 

さて。。。。

しかし、現状を打破する策が思い当たらない。。。(涙)

こういう時に、技術力っていうか、発想力というか、デバッグ力というか

が発揮されるんだろうな。。

 

一先ず、ゆっくり考えてみる。

1. ブートはできているっぽい。

2. asmhead.nasへきちんと飛んでいないように見える。

3. 確認方法は、これまで画面が黒くなっているのを確認しただけ。

 

さて、じゃ、やっぱりasmhead.nas辺りがおかしいのかなって思うよな。。。

そもそも、asmhead.nasにある最初の命令が実行されていないっぽいし。。。

 

ipl10.nasとの違いは、Makefile内で -f elf32ってのをつけているかどうか?って事で、asmhead.nas側から外して実行すると。。

(これも、Makefile内でやっている事がめちゃくちゃなのかも。。

 分かってる人からすると、アホすぎる事してるんだろうな。。。 多分。。 

 理解しないでやってるって、悲しい。。。。 Orz...)

 

$ make run

make -r img

make -r haribote.img

nasm ipl10.nas -o ipl10.bin -l ipl10.lst

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

nasm -f elf32 naskfunc.nas -o naskfunc.o -l naskfunc.lst

x86_64-elf-gcc -c -g -march=i486 -m32 -nostdlib bootpack.c -o bootpack.o

x86_64-elf-ld -m elf_i386 -e HariMain -o bootpack.hrb -T hrb.ld bootpack.o naskfunc.o

cat asmhead.bin bootpack.hrb > haribote.sys

mformat -f 1440 -C -B ipl10.bin -i haribote.img ::

mcopy -i haribote.img haribote.sys ::

# -SはデバッガのコマンドまでCPUを起動させないオプション。-sは-gdb tcp::1234.の意味らしい。

# ただし、-s部分は直接書くとエラーで止まってしまう。。。

# -monitor stdioってのは、QEMUデバッグ用モニタって事らしい。

qemu-system-i386 -L . -m 32 -monitor stdio -s -drive file=haribote.img,format=raw,if=floppy -boot a

QEMU 5.0.0 monitor - type 'help' for more information

(qemu)

 

f:id:kanazo3:20200526090137j:plain


 むふ。これで、まずはブードでストップ!!

元に戻して、再度実行(asmheadの部分に、 -f elf32オプションをつけて実行)

$ make run

make -r img

make -r haribote.img

nasm ipl10.nas -o ipl10.bin -l ipl10.lst

nasm -f elf32 asmhead.nas -o asmhead.bin -l asmhead.lst

nasm -f elf32 naskfunc.nas -o naskfunc.o -l naskfunc.lst

x86_64-elf-gcc -c -g -march=i486 -m32 -nostdlib bootpack.c -o bootpack.o

x86_64-elf-ld -m elf_i386 -e HariMain -o bootpack.hrb -T hrb.ld bootpack.o naskfunc.o

cat asmhead.bin bootpack.hrb > haribote.sys

mformat -f 1440 -C -B ipl10.bin -i haribote.img ::

mcopy -i haribote.img haribote.sys ::

# -SはデバッガのコマンドまでCPUを起動させないオプション。-sは-gdb tcp::1234.の意味らしい。

# ただし、-s部分は直接書くとエラーで止まってしまう。。。

# -monitor stdioってのは、QEMUデバッグ用モニタって事らしい。

qemu-system-i386 -L . -m 32 -monitor stdio -s -drive file=haribote.img,format=raw,if=floppy -boot a

QEMU 5.0.0 monitor - type 'help' for more information

(qemu)

 

f:id:kanazo3:20200526090321j:plain

 

ふむ。

画面が変わった。。(asmhead.nasが実行された?と思いたい。。)

 

でも。。。

(qemu) xp/100xh 0x0ff0

0000000000000ff0: 0x0b0a 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

0000000000001000: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

0000000000001010: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

0000000000001020: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

0000000000001030: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

0000000000001040: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

 

最初のコードは実行されていないように見える。。。。

う〜ん。。。

なんか、意図しているアドレスと違う所に書くようになってるのかな。。。

 

(qemu) xp/400xh 0xc200

000000000000c200: 0x457f 0x464c 0x0101 0x0001 0x0000 0x0000 0x0000 0x0000

000000000000c210: 0x0001 0x0003 0x0001 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c220: 0x0040 0x0000 0x0000 0x0000 0x0034 0x0000 0x0000 0x0028

000000000000c230: 0x0006 0x0002 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c240: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c250: 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c260: 0x0000 0x0000 0x0000 0x0000 0x0001 0x0000 0x0001 0x0000

000000000000c270: 0x0006 0x0000 0x0000 0x0000 0x0130 0x0000 0x0140 0x0000

000000000000c280: 0x0000 0x0000 0x0000 0x0000 0x0010 0x0000 0x0000 0x0000

000000000000c290: 0x0007 0x0000 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2a0: 0x0270 0x0000 0x002b 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2b0: 0x0001 0x0000 0x0000 0x0000 0x0011 0x0000 0x0002 0x0000

000000000000c2c0: 0x0000 0x0000 0x0000 0x0000 0x02a0 0x0000 0x0130 0x0000

000000000000c2d0: 0x0004 0x0000 0x0013 0x0000 0x0004 0x0000 0x0010 0x0000

000000000000c2e0: 0x0019 0x0000 0x0003 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c2f0: 0x03d0 0x0000 0x007d 0x0000 0x0000 0x0000 0x0000 0x0000

000000000000c300: 0x0001 0x0000 0x0000 0x0000 0x0021 0x0000 0x0009 0x0000

000000000000c310: 0x0000 0x0000 0x0000 0x0000 0x0450 0x0000 0x0018 0x0000

000000000000c320: 0x0003 0x0000 0x0001 0x0000 0x0004 0x0000 0x0008 0x0000

000000000000c330: 0x05c7 0x0ff2 0x0000 0x000c 0x000b 0x13b0 0x00b4 0x10cd

000000000000c340: 0x05c6 0x0ff2 0x0000 0x6608 0x05c7 0x0ff4 0x0000 0x0140

000000000000c350: 0xc766 0xf605 0x000f 0xc800 0xc700 0xf805 0x000f 0x0000

 

これって、多分、あっているような気もするが。。

何がおかしいんだろう。。。。(Orz...)

 

やっぱり、きちんとハードウェアやコンパイラとかも理解しないと進まないのかな。。。。

 

悩みは続く。。。