借り初めのひみつきち

仮ブログです。

2023年のご活躍

今年一年の活動を振り返ってみます。 シンプルでそこそこの圧縮率が出る組み込みに有用な非可逆画像フォーマット「MPIC」を作りました。 neriring.hatenablog.jp また、去年作った画像ツールをMPICに対応しました。 最初は画像の表示と保存しかできないアプ…

RISC-V で自作OS

じだいは RISC-V です。 github.com RISC-V とは Windows でよく使われている x86 は 40 年以上前から基本的に互換性を持ったまま拡張を続けた結果、現代ではほとんど必要ない機能との互換性のためにかなり複雑な仕様になっています。 また、 Arm に比べると…

QEMU RISC-V virt マシンで VGA を使う

さいきん QEMU RISC-V virt マシンで何ができるか色々探していたところ、なんと VGA が使えることがわかったので記事を書きます。 github.com 最新の RISC-V で古き良き VGA が動いてるのが面白いだけです。実用性はあまりありません。笑 解説 qemu で virti…

Intel APX

面白そうな拡張が発表されたようです。 www.intel.com Intel APX は一言で言うとx86汎用命令のAVX化です*1 AVX では新しいプレフィックスを追加することで今までの SSE 命令ではエンコーディングできない機能が追加されました。 APX もこれに似ていて、今ま…

MYOS の現状

前回の記事でチラッと触れたものの正式な告知をしていなかったのでここで現状をまとめます。 もともと MYOS の実装には Rust の nightly の機能が必要だったため、 nightly の機能を積極的に使っていました。 nightly の機能は安定化されていないため、今ま…

x86S

Intel が 64bit モードのみのサブセットの x86 アーキテクチャを検討中という噂が流れてきました。 www.intel.com 検討始めるのが10年遅くないですか? ここから普及するまでまた何年もかかるのに… x86 の枷 以前ぼくのブログでも紹介したことがあるように、…

ハイブリッドアーキテクチャ

第12世代 Intel プロセッサの最大の特徴は、高性能コア (Performance の P) と高効率コア (Efficient の E) によるハイブリッドアーキテクチャを採用していることです。 これは Arm で big.LITTLE と呼ばれていたものによく似ていて、 ひとつのプロセッサで…

非可逆圧縮作ってみた

シンプルな非可逆圧縮を作ってみました。簡単な処理しかしていません。 github.com 組み込み向けに設計したのでデコードのメモリ消費は抑えてあり、圧縮後の画像は16bitカラー相当になります。 *1 また、以下のような画像は苦手です。 モノクロ画像 もともと…

自作OSの描画が遅い理由 - MTRR と WriteCombining

自作OSで描画重視のプログラムを作っていると、本来スペックが高いはずの機種で思ったほど描画速度が出ない現象に遭遇することがあります。 memtest などでベンチマークを取ってみるとメモリの転送速度は十分に出ているはずなのに、実際に描画してみると単純…

最小限の USB Hub 対応 ver.2

以前 USB Hub の制御方法について記事を書きましたが、当時は USB2 Hub しか制御できていなかったのでアップデートします。 USB Hub の基本 USB ではそれぞれのデバイスに 1〜127 の 7bit のアドレスを割り当て、バス全体で最大 127 台までの USB デバイスを…

最近の myos

最後にこの記事書いたの何ヶ月前だったかな?な感じなのでタイトルも変更です。 綺麗なウィンドウシステムがそれなりに動くようになって逆に見た目の進化が乏しくなってしまった myos ですが、今も中身は進化しています。 外部アセンブラの廃止 高級言語で O…

Kano PC

教育用パソコンとかいう奴らしいです 元は5万円くらいしたようですが、現在は2万円くらいで手に入るので購入してみました。 結論から言うと、ハードウェアはゴミです。これを買うくらいなら mouse の E10 の方がはるかにマシです。 windows がギリギリ動くス…

raspberry pi ベアメタルでマルチコアを利用する方法

入手困難とうわさの raspberry pi を偶然にも入手たので最近触っています。 raspi の CPU は4コアで動作しますが、現在のファームウェアは最初のコア (ID 0) のみ起動します。*1 他のコアがどうしているかというと、ファームウェアが物理アドレス 0x0000_00E…

私の OS のご紹介

ここ数年 Rust で meg-os という名前の自作 OS を作っています。 github.com 過去に何度か0から作り直しているので、似たような名前の別のものを昔見たり聞いたりしたことがあるかもしれません。 現在のコードベースのコードネームは「Maystorm」となってい…

謎の SSE 例外

先週、 myos で hd audio に対応しましたが、波形メモリに直接波形を書き込むことで beep 音を生成していました。 この方法だと波形生成後のフィルター処理などが困難で、複数のアプリケーションで同時に音を鳴らすこともできませんでした。 ということで、…

今月の myos

久しぶりの更新になります。 現在のバージョンの myos には明確な内部目標がありました。 Intel HD Audio の対応です。 *1 HD Audio は近年の PC にはかなりの割合で搭載されており、仕様も公開されていてそれなりに情報が出揃っているので実装可能だろうと…

QOI 画像ビューワーつくった

最近 QOI (Quite OK Image Format) という新しい画像形式が登場しました。 QOI — The Quite OK Image Format PDF1 ページに収まる単純な仕様でエンコーダーやデコーダーもC言語で数百行と単純で高速ですが、PNGよりやや圧縮率が悪い程度というトレードオフが…

誰も教えてくれない AMD64 と Intel64 の違い (ページング編)

Intel64 は AMD64 を参考に実装したので、9割以上のアプリケーションにおいて概ね互換性があります。 一方、船頭多くしてなんとやら、両社の政治的な思惑などが絡んで意図的に非互換になっている部分があったり、細部の互換性をとることができていない部分…

Compound Device と Composite Device

USB

Compound と Composite の違い、わかりますか? このふたつの単語、綴りも似ていますが意味も似ていて、ニュアンスの違いを説明しろと言われると正直ちょっと自信がないです。 USB 規格には Compound Device と Composite Device という2種類の用語が存在し…

今月の myos

このシリーズ、ほぼ月1になっていたのでタイトルを変更します。 SIMD と Lazy FPU save / restore CPU の高速化はいくつかの歴史を経て、近年の CPU は「ひとつの命令で多数のデータを処理する」命令をサポートしています。 これを一般に SIMD (Single Inst…

今週の MYOS 🧚‍♀️

MYOS でも簡単なゲームを動かせそうになってきたので準備をします。 多くのゲームは画面内をキャラクターが動き回りますが、キャラクターを描画する時は背景との重ね合わせ処理が必要になりますし、キャラクターが移動するときはそれに加えて元いた場所の背…

今週の MYOS

wasm-strip MYOS のアプリケーションは WebAssembly 形式に対応していて、現在は Rust で開発する前提でライブラリの整備を進めています。 しかしどうやら Rust で WebAssembly を生成すると Release ビルドにも関わらずバイナリにデバッグ情報のようなもの…

今週の MYOS

今週というタイトルなのに最後の更新何週間前だったっけ?という最近の MYOS 界隈のトピックです。 スケジューラキュー 一般にマルチタスク OS のスケジューラには実行待機中のスレッドを管理するためのキューがあります。 このキューは全てのプロセッサコア…

今週の MYOS

さいきんの MYOS 界隈のトピックです。 WASM 高速化 以前の大規模改修で数倍の高速化に成功した WASM ランタイムですが、まだいくつか課題と高速化の余地があります。 まず、実行時エラーの処理を改善しました。 以前のエラー処理は命令実行時に現在の命令を…

GPD MicroPC の内蔵キーボードを使う方法

エンジニア向けに人気らしい GPD MicroPC ですが、実はいくつかの OS で内臓キーボードが使えない問題があります。 いくつかの OS には自作 OS も含まれます。 ※ リビジョンによってハードウェア詳細が異なる個体があるようなので、この記事が全ての個体に当…

今週の MYOS 🎉

今週、というには間が空いてしまった最近の MYOS/TOE 界隈のトピックです。 MAYSTORM 直訳すると5月の風になります。 MYOS が最初のコミットから1年経ったので、1周年を記念して新しい名前を付けて仮プロジェクトから正式なプロジェクトに昇格しました gi…

今週の MYOS

さいきんの MYOS/TOE 界隈のトピックです。 WebAssembly 高速化 (fused op) 中間コード変換とスタック操作合理化によって以前に比べると結構速くなりました。 この2つの改良によって実現可能になった新しい高速化手法があります。 WebAssembly は所謂スタッ…

MYOS のウィンドウのつくりかた

MYOS/TOE のアプリでウィンドウを作るところを少し詳しく見てみましょう。 ※ 執筆時点のバージョンの TOE をもとに記述しています。まだ API 安定化してないのでバージョンごとに細かい違いがあったり MYOS と TOE の間でも微妙に違うことがあります。 アプ…

wasm ランタイムの高速化

現在の自作 wasm ランタイムはインタプリタ実行しています。 インタプリタと JIT VM やエミュレーターの実装方法は大きく分けると2種類あります。 ある程度一気にターゲットの機械語に変換してしまう JIT 方式と、1命令ずつ読み込んで動作を再現するインタ…

Wasm on Wasm

ついに、 WebAssembly の自作エミュレータの上で動く自作 OS の上で自作 WebAssembly ランタイムが動くようになりました つまり Wasm on Wasm ですね٩( 'ω' )و 以下に試験的に体験版設置してるので起動してみることができます。 meg-os.org もちろん PC98 …