mdj982が遅刻してきたので最初はしかく係だったがシミュレーター書いてくれてシミュレーターになった。最初はモチベが高かったので一週間で足し算くらいは動いて中旬にはfibが動いて月末には浮動小数点数の実装を始めた。meetingなどがあり前半から中盤はコアの進捗はほぼ0、代わりにコンパイラとシミュレーターが頑張ってくれていた。後半にやる気が出て浮動小数点数やuartの実装を始めた。12月12月に入ってから怒涛のやる気が出て4日間学校に泊まりデバッグをした結果12/05に完動した。divの命令を増やしたりコードを読みやすくかなり書き換えたりしたが結局この期間のコードは最終的に使わなかった。冬休みより1週間早く自主冬休みにしてヨーロッパ行くなどした。後半は研究室行ったり渡航関係の細々したことしたり人と会ったりしていて進捗は出なかった。2月20日の発表会の2週間前から怒涛のやる気が出た。ここから細かく見ていく。2/8riscv-toolchainを使ってとりあえずlinuxをビルドしてみる。32bitでビルドし、ブートローダーを持ってきてシミュレーターにこのlinuxとブートローダーが動くようなシミュレーター作ってとお願いする。2/9gccをビルドする際にRV32IのみだけではなくRV32gcというデフォルトでビルドしていたためcompressed命令が含まれていてシミュレーターが頭をひねる。linuxのカーネルコンフィグをいじって最小構成にしようと試みる。このsifiveというバークレー発のriscv実装している会社が提供しているツールチェインが32bitサポートされていなくてチーンとなる。2/11hikaliumやkczらと地下で泊まりをする。この時点ではデバドラやQEMUに追加命令は実装していない生のriscvだが、QEMU上でlinuxのカーネルパニックが見れる。2/13Emperorと命名して命令を足したりリファクタリングをしていた2ndコアが動かないことが判明し、1stのAdelieを元に浮動小数点数命令をはじめとした使わない命令を消して動くコアにした。シミュレーターはlinuxがelfなのでelfのヘッダー読むように変えていた。2/15自作アーキ用にパッチを当てたlinuxがQEMU上でカーネルパニックをするようになった。riscvの仕様通りに仮想メモリやシステムレジスタを実装するの厳しい等の理由でlinux移植は現実的に無理だろうという話になり、目標を自作コア上で自作OSを動かすことに軌道修正した。その時のslackこの時kczと地下で会議をして2時間くらいで自作OSの仕様が決まり、じゃあこれを実装していこうという話になった。ドキュメント2/16コア、シミュレーター、OS共に自作OS用に実装を始める。この日に三人とも大体実装が終わる。この日から2/20の発表会まで僕は地下に泊まり込む。TSG*15でxv6分科会をしてxv6のコードを読んだり書いたりしてたのがだいぶ役に立ったっぽい。2/17OSがコードを綺麗にしたり微修正したりする。sb)などのデバッグ、カーネル用に作った命令のデバッグなどをする。コアがなんとなく動く。2/18カーネルをcoeにしてコアに読み込ませてからのコアデバッグが始まる。MMUのon/offがちゃんとできているか、タイマー割り込みで動いているか、ちゃんと割り込みハンドラに飛んでいるか、レジスタは退避されてるか、など。in/out命令で半日以上溶かしたが、inやoutでuartで通信している際にタイマー割り込みが来るとuartのstatusを管理しているレジスタが退避されず保存されるので次のin/outで死ぬということだった。2/19動くシェルの実装を始める。適当に2時間くらいで書いた。マルチタスクなのでpsとkillは実装したかったのでそのためにカーネルがプロセスを起動する際にレジスタでプロセス構造体のアドレスとプロセス数を渡すように変える。シミュレーターでは動きコアは何も変えてないのに無限にバグらせていて時間を溶かしていたらgccがmul命令を吐いていてコアでは実装されてないので動かないがシミュレーターでは動くという事案でとてもああああとなっていた。構造体のサイズが一定値を超えるとオフセットでアクセスしたいのかmulをしたくなるらしい、知るかそんなの。2/20ということでシェルが動く。したシェルスクリプト動くようにしてみる?ということでシミュレーターが変数を実装する。