永遠に時間が潰せる、と思った。
平日は大体仕事してるので、というかまぁ忙しいので定時じゃ上がれないわけですね。
でもOS作りたいなって思ってるんだけどガッツリはできないからその代わりに遊んでる。
シンプルに
彩度をいじる
もっとれいんぼー
![]() |

マジでこの苦しみを分かち合いたい。
この辺の人達もだいたい同じところで苦戦してる。
【ゼロからのOS自作入門】MikanOSをRustに移植する 1章・2章Rustの人たち3人よれば文殊の知恵になったらいいな。
3人目の俺がポンコツなのでならないかもしれないけど。
というわけでさらなる4人目のRust使いがこのあたりしんどい・・・ってなったときの道標として↑の記事読んでも詰まった部分を書いていく。
何度も言うけど、UEFIライブラリ(uefi-rs)で詰まった。
詰まりどころじゃない部分のソースもgithubに載せておくので、コピペして使ってOK
3章(3日目)は1~2日目とは違って、カーネルファイルをロードするというそれっぽいことをします。が、Rust使いには茨の道だったという話を書いていくつもり。
これでようやく、カーネルをロードできるようになった。
あとは「MikanOSをRustでやってますが、しんどい。」の記事に習って、ロードするだけ。
で、色々やりたいことをやればよろしい。
UEFIで動くHSV色空間からRGBに変換する部品は2年くらい前に作ってあったので、それを動かしてみた。
ゼロからOSを作る本(通称:みかん本)、某30日本のモダンOS版ですね。
なんとなくPDF版を買いました。
余剰のモニター使えば顔上げたまま読めるし^Fの検索も効くので。
とりあえずRustでやるからには環境を整えないといけない。
Day1はバイナリ打ち込もうぜ。っていう話でPEバイナリをひたすらバイナリエディタで作るだけなのでただやるだけ。ひたすらにやるだけ。なので記事は書いてない。
Rustのデフォルトビルドコマンドである、 cargo build コマンドでビルドができるようにしたので、この界隈でよく使われるxargoとかxbuildは使っていない。
Rustでやるならここらはしっかりこだわりたい。
Makefileとか使わなくてええんやで。という強い推しをしていきたいんだけど
それ以外の部分がだいぶ苦行だからちょっと推せない気がしてきてる。
ちょっと早いけど、こちらがリポジトリ(Day2終了時点のコミット)
最新のリポジトリ本体






というわけで、左から右へ評価される と定義されているらしい。Order Of Evaluation
Binary expressions and function arguments are evaluated in strictly left-to-right order. This is similar to Java but different to C and C++, where the evaluation order is unspecified. Thus, the following code is valid and well defined.

int i=0;機械語を読むとこう評価されている模様。(後置のインクリメントは1度だけ実行)
i = i++ + i++;
i = 1+(0 + 0);というわけで、Javaだけじゃなくて、D言語も対象言語に入るよ~
ふとD言語のimportExpressionが気になって書いてみたコードがあって— α改 (@alpha_kai_NET) 2016年9月2日
なにってそれはバイナリをコンパイル時に読めるかな〜ってことでテストコードを書いたらSEGVしないと思ったところでSEGVしたしバグかなぁ
— α改 (@alpha_kai_NET) 2016年9月2日OS(というかバイナリの形式、Windowsの場合はPE、Linuxの場合はELF)によって
Machine: i386IDAで答え合わせ。
applicationBits: 32
Subsystem: Windows CUI
ImageBase: 0x400000
BaseOfCode: 0x2000
SizeOFCode: 183296
AddressOfEntryPoint: 2565c
Absolute entry point: 42565c
SizeOfImage: 274432
@segfo (僕が行ってたのは ここの Thanks to のところのhttps://t.co/poDEJbqRoT です https://t.co/DrfHEgOw1t)— α改 (@alpha_kai_NET) 2016年7月2日
ふむむ…(uefi-d, ずい分前に触ったので忘れてしまいました…)
minimal-d/object.d:1248: `_deh_beg' に対する定義されていない参照です無いってさ!
minimal-d/object.d:1249: `_deh_end' に対する定義されていない参照です
extern __gshared
{
/* Symbols created by the compiler and inserted into the object file
* that 'bracket' the __deh_eh segment
*/
void* _deh_beg;
void* _deh_end;
}