借り初めのひみつきち

仮ブログです。

2019-01-01から1年間の記事一覧

自作フォントエディタの話

今年作ったソフトの紹介をします。 Font Edit '95 このソフトウェアはビットマップフォントを編集することができます。 ビットマップフォントというのは名前の通りフォントデータをピクセル単位のビットマップで扱うフォント形式で、昔のOS・自作OS・組み込…

x86 の汎用レジスタのルーツ

x86 の汎用レジスタは AX CX DX BX です。AX BX CX DX ではありません! この由来について 8086 のルーツから探ってみたいと思います。 Intel 4004 Intel が初めて作った CPU は電卓を作るために開発された 4004 でした。 このことから 8086 は電卓の子孫と…

任意コード実行可能なホームページ作った。

今年作った自作アプリの紹介します。 TL; DR Virtual Playground GitHub - neri/vpc: A PC Emulator implemented by WebAssembly このアプリは Web ブラウザ上で PC をエミュレーションします。 技術的には WebAssembly、 Canvas、 WebWorker、 WebAudio、 W…

UEFI ゴルフの果てに

前回の記事の UEFI ゴルフの続報です。Hello world はどの環境でも文字列出力関数(API, メソッド, etc...)を呼び出すだけなのでコードはほぼ定型となりコード部分の最適化の余地はほとんどありませんでした。 ゴルフのお題のひとつに CHARS というものがあり…

最小の UEFI Hello World

UEFI は実行ファイルに PE/COFF という形式を採用しています。PE/COFF 形式はご存知の方も多いかと思いますが Windows で現在主流の実行ファイル形式で、名前の通り昔 UN*X で使われていた COFF 形式の派生です。 COFF から PE/COFF になる際にオリジナルの …

最小限の USB Hub 対応

更新したのでこちらを見てください!!!neriring.hatenablog.jp

BitTest 命令

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

exFAT について

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

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 でもほ…

地獄のデバッグ

ある日家にあった 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が命令の実行を継続できない事象が発生し…