いいかげんさがねぇ。。。
70.7kg
ふむ。
油断は禁物!
という事で、怪しい場所は分かった。
要するに、asmheadでメモリに書いておいた値がおかしい為、
C言語側で使うとおかしくなる。って事。
で、恥ずかしく思いっきり間違えたものを書いてた。
(修正しておいた。)
0x0ff4: 0x0d00 (0x000d)= 3328 (14)→ ???(X方向の解像度で、320つまり0x0140のはず)
そう、ここ!
何故このアドレスだけ値が壊れている。。。
bootpack.cで、読めているのか?は当然、メモリの値が読めているだろうけど念の為確認。
short *tst_binfo_scrnx, *tst_binfo_scrny;
tst_binfo_scrnx = (short *) 0x1004;
tst_binfo_scrny = (short *) 0x1006;
*tst_binfo_scrnx = *binfo_scrnx;
*tst_binfo_scrny = *binfo_scrny;
(qemu) xp/100xh 0x0ff0
0000000000000ff0: 0x000a 0x0008 0x000d 0x00c8 0x0000 0x000a 0x0000 0x0000
0000000000001000: 0x0000 0x0000 0x000d 0x00c8 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
あたり前だが、c言語は意図通り。
やっぱり、asmheadの中身。
なんでこのアドレスだけ。。
; MOV BYTE [VMODE],8 ; 画面モードをメモする(C言語が参照する)
MOV WORD [VMODE],8 ; 画面モードをメモする(C言語が参照する)
MOV WORD [SCRNX],320
MOV WORD [SCRNY],200
MOV DWORD [VRAM],0x000a0000
ここも、以前のデバッグ時によく分からず、色々試行錯誤している際に
残った残骸だと思うがアドレス的には問題なさそうであるが、念の為、
アクセスをBYTEもWORDも試したが問題なし。
さて、何故、0x0ff4だけ。。。
ん???
もしかして、以前コードの進行具合のチェッカーを入れたような。。。
MOV WORD [0x0ff4], 0x000d ; 進み具合テスト2
いた。。。。。。。😭
これかよ。。。。
という事で、チェッカーを削除(他にもない事は確認)
$ 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) xp/100xh 0x0ff0
0000000000000ff0: 0x000a 0x0008 0x0140 0x00c8 0x0000 0x000a 0x0000 0x0000
0000000000001000: 0x0000 0x0000 0x0140 0x00c8 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
おかえり。。。
さて、またここから始めよう。
ほんっと、進まねぇ。。
でも、ゆっくり進めば良いか。。。
ちなみに、そのまま読み進め、
まぁ、当然と言えば当然だが、ここまで二日。。(涙)
ゆっくり続けよう。。
続く。