ウォンツテック

そでやまのーと

nchaos

リンカスクリプトを使ったことによる不整合が。。 文字列リテラルを以下のように使った場合 char *str = "hogehoge"; コンパイラはこの"hogehoge"を.rodataに置きリンクする時に先頭からの相対アドレスでこの文字列を参照しにいく。しかし先頭にはbootacient…

CPUのプロテクトモード移行が成功したのでコードをassemblerからcへ移行。またmakefileも用意。今回はGASとリンカスクリプトを使ってるのでメモリ配置がわかりやすい。catを使ったfirst,second,c部分の結合も無くなったし。 makefile BASEDIR = /home/sode/p…

CPUのプロテクトモードへの移行において、GDT(グローバルディスクリプタテーブル)部分を読み直した。 IA-32 インテル アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアル下巻で今回必要な部分を詳しく見てみる 全部で8バイト ディスクリプタテーブ…

実機FD読み込みバグ修正(print_debugでFDのエラーステータスが「4:sector mark not found」だった) FDのsectorに入れる値を間違えていた。(sectorは1〜18の値を入れる必要があるが、0を入れていた) > movb $0x1, (%si) # sector is 1

bootacient.Sは64KBまでのカーネルならFDから読み込めるように出来たので 次の目標は以下のようにしてみる。 ・物理メモリマップの取得 ※nchaOSの時はLinuxのコードをほぼそのまま書いていたけど 今回はちょっとじっくりやってみようと思う。 ・メモリマップ…

bootacient.SのFDからの読み込み部分を先に書いた。 bootacient.S, bootmiddle.Sはそれぞれfirstboot, secondbootの役割でこれらは0x90000, 0x90200に置きkernelは0x1000に置く。 また、kernelのstack領域はとりあえず0x9f000としておいた。

qemuでのデバッグ方法メモ

qemuでイメージを立ち上げた後にCtrl+Alt+2を押したら以下の方法でdebug (qemu)stop ※まずstopしハングアップするのを防ぐ (qemu)x /10i 0x90000 ※メモリ上の値を逆アセンブルしてみる (qemu)x /10x 0x90000 ※メモリ上の値を16進数でみる (qemu)info registe…

nchaOSではfirstbootからsecondboot、さらにstartKernelへの移動をljmp命令などで行い、それぞれのバイナリをcatなどでつなげてメモリ上の位置を制御していたが、今回はldのリンカスクリプト等を使い制御していきたいと思う。 そこでリンカスクリプトやその…

昨日嵌った事が色々と解決したのでまとめて書いてみようと思います。 また、自分が分からない所や気になった所は適宜コメントを入れてみます。 sodex まずnchaosというのを一昨年の7月頃にhigepon氏のmona osに触発されて書いてました http://sourceforge.jp…

nchaosという2年くらい前に書いてたkernel(ほとんどブートのみ)を1から書き直そうと思い、さらにどうせならgas(GNU as)で書き直そうとしたのだが、何故かnasmと違ってバイナリに余分なものがたくさん引っ付いている。。リンカが正常に働いていないのか原因…

去年買った「パソコンのレガシィI/O活用大全」にものすごいプレミアがついてる・・・ http://www.amazon.co.jp/gp/product/4789834336/249-8612780-7330760?v=glance&n=465392

FDCDriver

☆recalibrate関数fdc_cmd関数でrecalibrateコマンド 1byte 0 0 0 0 0 1 1 1 2byte x x x x x 0 0 0 (HD=0, US1&US0=0) を送信。 その際fdc_cmd関数内ではFDCがアイドル状態かどうかを調べる。 アイドル状態の検査はMSRレジスタ(0x03f4/0x0374)の bit7(RQM)を…

再開?

そろそろnchaosを書きたくなって来たので、去年中断していたFDCDriverのネタをメモっとこ。 ☆FDCDriver構想 フェーズ1) ・指定論理セクタへの1セクタの読み込みが可能 ・指定論理セクタへキーボードから読み込んだ文字列を1セクタ以内で 書き込み ※とりあ…