借り初めのひみつきち

仮ブログです。

UEFI自作OS日記 v0.6.1 ゆ。

前回の記事で紹介したように v0.6 は大幅なリメイクとなりましたが、それには大きな目的がありました。github.com現代の PC ではペリフェラル接続に主に USB を利用しています。 キーボードやマウスもデスクトップ PC では USB 接続が主流です。 モバイル PC…

UEFI自作OS日記 v0.6 再始動

しばらく開発の停滞していた moe ですが・・・github.com思うところあってリファクタリングしながら再実装しています。既存のコードを再利用できるところは再利用していますが、完全に新規に書き直してる部分もあります。これだけだと面白くないので具体的な…

WASM自作PCエミュレータ制作日記/5

ついに某OSの起動画面が出ました。まだ動作が怪しいですが...この辺ならキーボードも普通に動きます。(マウスは死んでます某OSも途中で止まります。 cpuid実装してるはずなのに認識されてないのが気になります。FreeDOS (32bit) はまだよくわからない動作を…

WASMで自作PCエミュレーター Part4

自作エミュレーターが VGA に(一部)対応しました!github.com今までは UART 経由で端末エミュレーターに接続していました。 DOS やその上で動く多くのソフトウェアは標準入出力という概念があるので、今まではこの方法が簡単に実装できてうまく動いていま…

ロングモードと64ビットモードの違い

ロングモードと64ビットモードの違い、分かりますか?おそらく多くの人が混乱していると思うのでブログにまとめます。(そしてぼくは混乱してないことを祈る極論を言うと、現代の x86 系プロセッサにはリアルモード、プロテクトモード、ロングモードの3つの…

WASMでPCエミュレータ作った話 / Part 3

github.comさいきんはずっとエミュレーター作ってるます。 FreeDOS ついに、FreeDOS (16bit版) が起動しましたヽ(•̀ω•́ )ゝ✧MSDOSはまだどこかおかしいようです。 Web MIDI Web MIDI に対応しました。 MPU-401 UART モード互換インターフェースのつもりなの…

IBM PC のタイマー事情

IBM PC の BIOS は通常、約 55ms / 18.2Hz ごとにカウントしています。 この数値は一体どこから来てどんな意味があるのでしょうか?まず、 IBM PC で使われているタイマーIC 8254 PIT の動作クロック入力が約 1193182Hz となっています。 すごく中途半端な値…

続・WASMでPCエミュレータ作った。

neriring.hatenablog.jp前回の記事の時点では、対応する命令も少ないしペリフェラルは UART のみでとても OS が起動する状態ではありませんでした。 その後色々実装して前回動かなかったブラウザにも対応し、ついに自作 OS の osz が起動しました!基本的な…

WASMでPCエミュレータ作った。

WASM で PC エミュレータ作りました☆(ゝω・)vキャピgithub.com※ 現時点では自作のOSすら起動しません。すでにいろんなエミュレータが存在しているので今更感あるかもしれないですが、このエミュレーターは WebAssembly を使っているのが大きな特徴です。もと…

フォントエディタ作った。

フォントエディタにいろいろと不満があったので自作することにしました☆(ゝω・)v現在は base64 エンコードした ASCII 形式の FONTX2 のみ入出力できます。 オリジナルフォーマットも考えてるけど実現可能性は未知数です。Electron で作ったので Web でもほ…

きんきょうてきな?

また更新間隔が空いてしまいました。 フォントのあれ 以前公開すると宣言していた megos フォントについてあえず現場を公開しておきます。 (0610と0608は字形が一緒じゃないかとかまだ気になるところはあるのですが...)github.commoe で使用しているフォント…

地獄のデバッグ

ある日家にあった Surface 3 で moe を起動してみたら、画面が真っ黒のまま進みませんでした。現在の moe はウィンドウシステムが起動する前は基本的に何も画面出力しないので何が起こっているのかさっぱりわかりません。 こういう時はどうしたらいいでしょ…

ACPI で電源を切るの補足

前回の ACPI 記事が当初の予定より長くなってしまって説明を省略した部分の補足したいと思います。neriring.hatenablog.jp FADT FADT というのは Fixed ACPI Description Table の略で、 ACPI のもっとも基本的で重要なテーブルのひとつで、電源制御などの多…

ACPI で電源を切る

いまどきの PC はすべて ACPI に対応しています。 ACPI について学習する大きなモチベーションのひとつが、 ACPI による電源切断だと思います。 これを覚えれば ACPI に対応した全てのコンピューターで電源を切断することができるようになり、自作 OS に shu…

x86の割り込みが遅いワケ

CPUが現在実行中のプログラムを中断して処理しなければならない事象が発生した時、一般に「割り込み」というメカニズムを使ってその事象を処理します。広義の割り込みは実際には以下の3種類に分類できます。 例外 CPUが命令の実行を継続できない事象が発生し…

ACPI BGRT

昔同じタイトルの記事を書いたところ結構googleしてる人がいるみたいなので、ちゃんとした記事のせときますね:;(∩´﹏`∩);:win8くらいの時からPCが起動する時にメーカーロゴが表示された状態のままwindowsが起動してることにお気づきでしょうか?この仕組みは…

BIOS で消耗するな、 UEFI で消耗せよ。

この記事は 自作OS Advent Calendar 2018 - Adventar の記事です。未来ある若者よ、 BIOS で消耗するな UEFI で消耗せよ。Intel は 2020 年までに CSM (BIOS 互換機能) を撤廃して UEFI に完全移行する方針を発表しました。つまり、もう BIOS に未来はありま…

最小ステップで作る UEFI OS v0.5.1

ウィンドウの基本的な部分はできましたが、本格的なウィンドウシステムとしては全然機能が足りてなかったので色々実装しました。半透明のウィンドウもほぼチラつきなしで動くようになりました!そして、自作OS界隈では元ネタより有名な noiz2bg なんかも移植…

最小ステップで作る UEFI OS v0.5

今週は SMP 環境の安定化と格闘しておりましたがなんとか進捗出せました。。github.com ウィンドーシステム スレッドが動くようになったのでウィンドウシステムの改良です。 今まではルートウィンドウとマウスカーソルだけの特別な処理だったので、他のウィ…

最小ステップで作る UEFI OS v0.4.1?

昔の CPU は世代が進むごとに動作周波数が向上していき、それに伴って動作も高速になっていました。しかし、やがて動作周波数をあげるのが困難になり、別の方法で性能向上する必要が出てきました。 そこで偉い人は考えました。 超高速な CPU を1個作るより…

最小ステップで作る UEFI OS v0.4

そろそろ GUI の実装に入りたい感じですね。github.com メモリの拡張 現在実装されているメモリ管理はコンパイル時に静的に割り当てたブロックを切り取って分配する手抜き実装でした。 今まではそこまで大量のメモリを必要としていなかったのでこれでよかっ…

最小のEXEファイル?

EXEファイルにはいろいろ形式がありますが、現在主流なのはPEという形式です。これはもともとUN*X方面で使われていたCOFFという実行ファイルの形式にWindowsのために必要な機能を拡張したもので、PE-COFFなどの名称で呼ばれることもあります。 本家UN*X系OS…

最小ステップで作る UEFI OS v0.3.1

前回はコンテキストスイッチを実装しましたが FPU(SSE) のコンテキストスイッチには未対応だったので実装します。 Lazy FPU Context Switch FPU や SSE はレジスタが多く汎用レジスタに比べてコンテキストスイッチのコストが高いわりにほとんどのプログラム…

最小ステップで作る UEFI OS v0.3

もう UEFI とあんまり関係なくなってきましたが OS の開発を続けていこうと思います。github.com スレッディングの実装 まずはスレッディングを実装します。コンテキストスイッチには setjmp/longjmp を使います。 これによって setjmp/longjmp の中身とスレ…

世界一有名な人。

世界で最も有名な人は誰だろう?候補をあげるなら一人目は Phil Katz だと思う。 彼は PKZIP を開発し、彼のイニシャルはたくさんの ZIP ファイルの先頭に刻まれている。 また、 ZIP ファイルはしばしば名前を隠して至る所に存在している。 何億台だかの PC …

最小ステップで作る UEFI OS v0.2.1

v0.2 で忘れていたことがあったので補足します。 EFI Runtime Services の構成 ExitBootServices を呼び出した後も EFI Runtime Services を使うためには GetMemoryMap で取得したメモリマップの VirtualStart の値を適切に設定し、一度だけ SetVirtualAddre…

最小ステップで作る UEFI OS v0.2

前回は IDT の初期化が終わって割り込みが処理できるようになりましたが、まだ外部割り込み (IRQ) の処理ができなかったので実装します。github.comほぼ全ての OS はタイマー割り込みをサポートし、タスクスイッチなどの重要な役割を持っています。 これらは…

フォントのお話

さいきん進行中のUEFIプロジェクトをはじめるにあたってちょうど良いフォントがなくてフリーで使えるフォントを探していたのですが、FONTX2フォントってだいぶ配布してるところが減ってきて、ライセンスも不明瞭だったり作者も行方不明で配布元も閉鎖したり…

最小ステップで作る UEFI OS v0.1

前回は最小ステップで UEFI からカーネルを起動するところまでできたので、今回はその続きを作ってみようと思います。github.comなお、前回は起動までの最短ステップを紹介しましたが、 UEFI Aware な OS を作る場合には RuntimeServices API を使うためにも…

最小ステップで作る UEFI OS v0.0

UEFI で OS ローダーを作るために必要な最小ステップを考えてみました。github.com 1. ACPI テーブルの取得 bootinfo.acpi = efi_find_config_table(&efi_acpi_20_table_guid); 対応するハードウェアが完全に既知でそれ以外対応しないなら不要な気もしますが…