借り初めのひみつきち

仮ブログです。

moe の xHCI / USB 実装

現在の moe の xHCI / USB 実装について軽く解説します。 実装の解説がメインで、各レジスタやビットの意味などあまり詳細に解説すると本が書ける量になってしまうので省略ご了承ください。 xhci.c, xhci_init() PCI エニュメレーションとコンフィグレーショ…

UEFI 自作 OS 日記 v0.7 / First Anniversary

moe を公開して一年経ちました。neriring.hatenablog.jpmeg-os.orgで、そろそろなんかどーんとやりたかったところですが、v0.7が目立った新機能もないのでひっそりします。。。

GPD MicroPC

正直、 GPD 社に期待はしてるけど今まで出した製品はあまり出来がいいと思ってない Nerry です。エンジニア向けとして期待されていた GPD MicroPC ですが、やっと触る機会ができたので自作 OS の観点から調査してみましたヽ(•̀ω•́ )ゝ✧ 結局、 Portrait なの…

BitTest 命令

x86 には BitTest というマイナーな命令があります。具体的には BT BTS BTR BTC の4種類あって、それぞれ特定のビットをテスト(1かどうか返す)、セット(1)する、リセット(0)する、反転する(0⇔1)命令になります。BitTest 命令をレジスタに使った場合はち…

exFAT について

exFAT というファイルシステムがあります。 FAT ファイルシステムの次世代ファイルシステムとしてリムーバブルメディアなどに採用実績がありますが、仕様が公開されておらず特許が絡むために Microsoft 製以外の OS からはあまり使い勝手がよくありませんで…

MOE は MEG-OS MOE になりました。

MOE は MEG-OS MOE になりました。 MEG-OS Dawn もともと MOE は内部コードネーム「MEG-OS Dawn」として企画された MEG-OS ファミリーの最も新しい OS でした。MEG-OS Dawn の主な要件は以下の通りです。 新しい 64bit OS UEFI で起動し、 PIC や PIT に依存…

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 の中身とスレ…