# 30日OS自作入門のこととか <p>この記事は2019MIS.W53代アドベントカレンダーの21日目の記事となっております. </p> <p>こんばんは.もうすぐクリスマスですが皆さんいかがお過ごしでしょうか. クリスマスを過ぎて年が明ければついに2020年ですね. いやはや何とも大学生になってからというもの, 月日が経つのが早いものです...</p> <p>TO☆KO☆RO☆DE, <strong>今年はごちうさ三期の年です. </strong>(わーーーわーーーわーーーー888888888)異論は大歓迎ですが個人的にはそうとしか思えませんのであしからず. 好きな方, まだみたことないけど日常系好きな方, 是非とも見ましょう. </p> ## 30日OS自作入門 *uchanさんからmikanOS本が出されましたのでこの記事はもう必要ない記事です.* 本題に移りまふ. みんな大好き「30日でできる!OS自作入門」について少しばかり紹介をしていきたく思います. 主に初心者of初心者の僕が詰まってばたんきゅーしてしまったところについて触れていくだけの実践方面の記事なので興味ない方とか, 経験豊富で環境構築でつまずいたりなんかしないでコードの行間を余裕で埋めることができる方とか, OSの理論周りについて触れたい方には向かない記事かもしれないですはいごめんなさい.あと, windows10(ビルド19041.1以前でやってました.これ以降の環境でもどうなっていくか分からないです)環境でしかやってないので他はしらないです.(なんか全方向から銃口を突き付けられそうですが) 後, 本記事の中でリンクをべたべたと貼ってしまっていますがこれらの記事を労力をかけて書いてくださった偉大な先人の方々にこれという許可は全くとってないので, 本当に申し訳ないというかこれってやっぱりまずいのですかねというお気持ちですがいろんな方のいろんな理解を提示したり, もう先人の方々が触れていて完結していることをわざわざ自分がわかりづらく書くのもあれだと思いますので, だめと言われれば消しますという感じにしたいのですけどそんな感じでいいのでしょうか...?と逡巡しております. (それでもとりあえず公開していくスタイル) 後, 学校の授業かなんかでポインタ分からんってなった方はこの本のp75あたりを読むとピンとくるかもしれませんので記述しておきます. また, 詳しく知りたいって方で, ごりごり読める方はAMD64 Architecture Programmer’s Manual https://www.amd.com/system/files/TechDocs/24594.pdf https://www.amd.com/system/files/TechDocs/24593.pdf https://www.amd.com/system/files/TechDocs/24592.pdf をごりごり読んでいったほうがいいかもしれません. 多分ここらへんが大本?な気がしたりしなかったり. ### 0日目(環境構築編) <p>CDについてるファイルをコピーしてきますと, (あまり変なところにコピーすると後々にパス関連でばたんきゅーするかもしれないです.)</p> ![](https://i.imgur.com/IbYm92d.jpg) <p>こんな感じのがあると思います. projectsはコードやmakefileなどそれぞれの日に必要なものが入っています. tolsetはtoolsetの略なのでしょうけど, 各日を通してつかうソフトがたくさん入ってます.tolset->z_toolsの中身が開発でメインに使うソフト群で, 本を進めていく途中で出てくるmakefileはz_tools内のファイル構造を前提においていますので僕のような初心者of初心者はこれを下手にいじらないでそのまま使うのが吉かと...(いくつか作者オリジナルのものとかありますし)</p> <p>僕のやり方としましては, 本の各章を読んでほへーと言って, projectsから引っ張ってきまして走らせてわー動いた888888という感じで進めていました.</p> ![](https://i.imgur.com/t1LOfmS.jpg) <p>こちらが遊んでた時の環境で, cドライブ直下に適当なフォルダ作って そこにCDのものをコピーしてきて, さらに各日のファイル群をコピーしてきて遊ぶスペースとしてnekoフォルダ<s>(名前は適当です. これを付けた時には記事にするつもりなど毛頭もなかったためですね. 誰かに使ってもらうことを想定したプロジェクトや, 個人でもそれなりの規模のプロジェクトを行う際にはちゃんとした命名を心がけましょう本当に.名は体を表します.どうか誰かの理解の高速化のためにお願いします. (自戒)ただforeachループ回すとかどうでもいいところはどうでもいい名前をつけることでかえってここは本当にどうでもいい名前なんだなーと思わせたりもできますので時と状況に応じてry</s>を用意してます.で, そのnekoフォルダの中身は</p> ![](https://i.imgur.com/fdAfigA.jpg) <p>このようになってます. これは結構後の状況ですので色々ごちゃごちゃしてますがz_toolsをこの中にコピーしてきて, <s>makefileのデフォルトの中身的に, nekoファルダではなくてその上の階層にコピーしたほうがいいような気もしますが相対パスをあまり理解してなかったのでこの時は力押しな方法でやりましたねはい</s>projectsの中の各日のファイル群をnekoフォルダ内にコピーしてきて手軽に試せるようにはしてあります. ただしmakefileやz_tools内のあるファイルの中身のパスを多少書き換えていかないといけませんが...</p> <p>書き換える必要が出てくる所はMakefile内に数か所とz_tools->haribote->haribote.rulファイル内のパスの部分だった気がします. </p> ![](https://i.imgur.com/qWeNy1W.jpg) <p>こちらがharibote.rulの僕の環境での書き換え方ですが, このことにつきましてはちゃんと触れてくださっている方がいますのでこっちを見たほうがいいと思いまふ</p> <p><iframe class="embed-card embed-webcard" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" title="haribote.rulについて" src="https://symfoware.blog.fc2.com/blog-entry-708.html" frameborder="0" scrolling="no"></iframe><cite ><a href="https://symfoware.blog.fc2.com/blog-entry-708.html">OS自作入門 3日目</a></cite></p> <p>次にmakefile内についてですがこちらはTOOLPATHとINCPATH以外にも至るところでパスを指定しているのでそれらをすべて書き直していかないといけないです.<s>こんな面倒なことしなくても多分できると思うのですけどね...僕は面倒臭がりやで本のいろんなところを飛ばし読みしてしまったのでどこかに書いてあったのかもしれないです...</s></p> ![](https://i.imgur.com/TBJFE35.jpg) <p>イメージファイルを作るこことか</p> ![](https://i.imgur.com/rq1gPSB.jpg) <p>QEMUを動かすところとか</p> <p>また, もしかしたらここらへんをごちゃごちゃやった後で</p> <p>Rule file error : can't find format section</p> <p>とか,</p> <p>Can't open rule file</p> <p>とか</p> <p>Warning : can't link _HariMain</p> <p>とか</p> <p>process_begin: CreateProcess((null), ../neko/z_tools INCPATH = ../neko/z_tools/haribote/make.exe -r img, ...) failed. make (e=5): アクセスが拒否されました。</p> <p>とかでるかもしれません. こちらは以前適当にまとめたものを一応ブログにしてありますので遭遇してばたんきゅーしてしまった方の助けになれば幸いです</p> [文字コードとかでばたんきゅーする話](https://willmw.hatenablog.com/entry/2019/09/21/101934 "文字コードとかでばたんきゅーする話") <p>8日目とかでエラーなく動いていればそこからしばらくはパス関連で引っかかることはないと思いますきっと</p> <p>ここからは各日々でうーんてなったところを確認していきまふ.</p> ### 1日目 #### 覚えておくべき?こと nask: 筆者作のアセンブラ. NASMとの違いはこちら http://hrb.osask.jp/wiki/?tools/nask ここから先, メモリにどんな感じで配置されていくのかが分からないとどこに何をおいているのかがわからんになってしまうと思いますので, <ul> <li>リアルモード(16bitモードのこと. 8日目までこれメインで開発. 1MBまでしかメモリを使えない. A20GATEの設定を行わないと1MBより上の方のアドレスは使えない.)でのメモリマップはこちらに. http://softwaretechnique.jp/OS_Development/kernel_loader1.html </li> <li> はりぼてOSでのメモリマップはp171に書いてありますがまとめてくださった先人の方がいらっしゃったのでそちらに https://vanya.jp.net/os/haribote.html </li> <li> <p>後, 序盤の方については, 先人の方が既に一行一行丁寧に追ってくださったものがありましたのでこちらのリンク先もどうぞ</p> http://aikiriao.hatenablog.com/entry/2017/11/04/025501 </li> </ul> また, ネットの検索にも引っ掛かってなくて, どうしても見つからないよって場合にはこちらに先人の方々のQ&Aが載っていますのでここでとりあえず確認してみてください. http://hrb.osask.jp/wiki/?faq それでも載ってないよってばいいには生のログをみるのも手かと思います.Ctrl+Fを左手にれっつさーふぃん. http://hrb.osask.jp/wiki/?q_and_a それでもだめだーって場合にはtwitterで叫びましょう. 優しい/強い人々が, 運が良ければ助けてくれます多分. ただ, 待っててもまぁまず来ないので, ひとまず付箋かなんかでメモ書きしておいて, 気持ち悪いなぁと思いながらもひとまず本を一周してみることをおすすめします.(p171の0x0000001bにJMPするのが何故か, というのはp460に書かれていることを前提としていたためである, というのみたいに後の方になってわかることが本の構成上, あるためです. 後は, 本の最後の方までいけばお気持ちが随分と分かりますでしょうし.) あるいは, 本の内容から逸脱している場合があるかもしれませんのでこちらを漁ったりとかですかね... http://hrb.osask.jp/wiki/?impressions また, 2019年では随分とこの本自体が時代遅れ感があるらしくって取り組む前にこの記事を読んでみる方がいいのかもしれません(僕はこの本が初めてなのでそこらへんの事情を全く知らないです...ごめんなさい) https://knowledge.sakura.ad.jp/22963/ そういえばosaskのサイトのログが以前ほどはやくないのを見る限り, 別の大規模なサイトでやってるのでしょうけど, 自作OSの人々は今どこのコミュニティに集まってらしゃるのでしょうね... ### 2日目 #### 覚えておくべき?こと 0x7c00: ブートセクタ(フロッピーディスクのはじめの512バイト(一番目のセクタ)のこと)が読み込まれるメモリの最初の番地 ここの最後は55 AA でないとPC側が正しいブートフラグと認識せず, この中のコードに制御を移してくれない. メモリマップについては本のリンクが多分切れていますので詳しくは下のリンク参照 http://oswiki.osask.jp/?cmd=read&page=%28AT%29memorymap&word=memorymap ### 3日目 #### 覚えておくべき?こと 0x8000-0x81ff: ブートセクタの中身をコピーしてくる予定のメモリの番地 0x8200-0x83ff: ディスクの中身をコピーしてくるメモリの番地 セグメントオーバーライド: MOV AL, [ES:BX]とかするやつ. メモリの番地指定の際には必ずセグメントレジスタを一緒に指定してやらないといけなくて, 大半の場合はそれがDSレジスタであるけど, これを変えたい時には上のように明示的に書いてやる必要がある. (今回のはまだリアルモード(16bitモード)のためにセグメントレジスタの値*16+指定したレジスタの値でメモリのアドレスが決まるらしくて, その結果一つのアドレスについて二通り以上の表し方が存在する. プロテクトモード(32bitモード)(8日目)になるとGDT(5日目)を使ってよしなに(GDTの先頭アドレス+GDTの先頭アドレスを0とした時のセグメント内での相対的なアドレス)してくれるようになる. この違いについて詳しくはここをみると良いのではないでしょうか? http://caspar.hazymoon.jp/OpenBSD/annex/intel_segment.html) 0x002600: 空のディスクに対してファイルを保存したときにファイル名が入る位置 <a id="0x4200">0x004200: ファイルの中身が入る位置</a> 0x00c200: 筆者はPCのメモリの番地0x08000にブートセクタの先頭を入れたいと, で, その後にディスクの内容を10シリンダ分コピーしてくると, また, ディスクイメージでファイル適当なファイルを保存したらディスクイメージの番地0x4200にファイルの中身が入っていたと, つまり, 実際にPC内のメモリにディスクの中身をロードし終わったときには0x8000+0x4200=0x2c00にディスクにいれたファイルの中身が入っているということ.(この段階では0x8000にブートセクタをコピーするプログラムは書かれてないと思われまふ.) ### 4日目 #### 覚えておくべき?こと static: ファイル内に直接データを書いてしまう. ファイル内でそのデータについて代入命令を使わなくて済む. VRAM: 解像度を考慮した画面上の一ドットに対応するRAMのこと. ここでは ![](https://i.imgur.com/N54fFrN.jpg) とあるように0xa0000~0xaffff (ここに書き込むとなんで表示されるのか気になるところではありますが, こちらに色々と書かれていました. http://softwaretechnique.jp/OS_Development/kernel_development01.html) を使っている. ここに, パレット設定で設定した色に対応する番号を書き込めばその色が画面上に描かれる. 詳しくは下のリンク参照. http://oswiki.osask.jp/?%28AT%29BIOS http://oswiki.osask.jp/? ```c void set_palette(int start, int end, unsigned char *rgb) { int i, eflags; eflags = io_load_eflags(); /* 割り込み許可フラグの値を記録する */ io_cli(); /* 許可フラグを0にして割り込み禁止にする */ //次のパレットも連続して設定する場合はここは改めて0x03c8に出力する必要はないとのこと io_out8(0x03c8, start); for (i = start; i <= end; i++) { //======================================================= //ここがなぜ4で割られているんでしょうね io_out8(0x03c9, rgb[0] / 4); io_out8(0x03c9, rgb[1] / 4); io_out8(0x03c9, rgb[2] / 4); //======================================================= rgb += 3; } io_store_eflags(eflags); /* 割り込み許可フラグを元に戻す */ return; } ``` 上のコードにおいて4で割られているのは書き込む時には上位2ビットを0にすることを求められているから. 上のリンクのVGAの方の中にこのような記述がある. ![](https://i.imgur.com/qPseeEu.jpg) こちらに別の方がまとめてくださったわかりやすいものもありますので分らないんじゃいねこ!って方はこちらもどぞ http://bttb.s1.valueserver.jp/wordpress/blog/2017/12/09/makeos-4/ http://hrb.osask.jp/wiki/?qa_log/0000 途中に筆者と思われる方から, とてもよいご質問をありがとうございます。その部分の説明を書いていませんでした(書いたつもりになっていました)。私たちは通常、輝度を00-ffつまり0~255として扱っていますが、ビデオカードの標準状態では、輝度を0~63の範囲で指定しなければいけないのです(63で255の明るさになる)。そのための割り算です。 -- K 2006-03-16 (木) 08:48:53 との返答があります. 引数とか, c言語の関数とアセンでどうやって整合性つけてんのう?って知りたい方はこちらを見て回るといいのではないでしょうか https://vanya.jp.net/os/x86call/ ### 5日目 #### 覚えておくべき?こと sprintf: GOコンパイラ付属 OSの機能を一切使わないように設計されている関数 出力内容をメモリの中に生成する. 0x280000~0x2fffff: bootpack.hrbが配置されている場所(パレット設定したり描画したりしてhltするやつ) 0x270000~0x27ffff: GDTを配置する場所 0x26f800~0x26ffff: IDTを配置する場所 GDTR: (僕の勝手な理解が含まれます)PCから見えるメモリの中にはあるアプリ用の部分だったり, 外からはアクセスされては困る部分だったりが混在しています.それで, 適当に使っていたのでは変なところから上書きされてわけわかめの状態になってしまいます.また, アプリは自分がどこに読み込まれるかを知らない(20何日目かででてくる)ので人間が教えてやる必要がありますがそんなことやってらんないのでORG0でひとまず作って, あとはPCがよしなにしてくれることを期待したいです.それででてくるのがセグメンテーションで, メモリを言葉通り, いくつかの部分に区切って, それぞれにアクセス制限を付与することができる機能です. で, どこで区切ったのか(ベース), 区切ったところからはじめて, 何バイトをそのセグメントとするのか(リミット),そのセグメントの管理用属性はなんなのか, を設定するのですが, これらの情報のことをディスクリプタと言って, その集合体をディスクリプタテーブルというらしいです. ではディスクリプタテーブルはどこに設定するのかというとそれはOSを作る人の自由でありますが, ただし, その場所はPC側に知らせる必要があり, それを知らせる媒体がメモリ管理用レジスタの一つのGDTR(グローバルディスクリプタテーブルレジスタ)ですきっと.(ローカルは20日過ぎ当たりででてきます.タスク関連の話と一緒にしないと差異がわかりづらいかと.) GDTRは48ビットレジスタとビット数が特殊でMOV命令では代入できず, LGDT命令を用いてテーブルの情報を代入します. IDTR: (僕の勝手な理解が含まれます)上のディスクリプタテーブルはメモリをセグメントに分割して管理を補助するものでしたが, これと似たようなもので, 割り込み時にどういう処理を行うのか(割り込みハンドラ)を設定したテーブルがありまして, そのテーブルの配置も個人が勝手にメモリのどこか使ってないところにおいてよく, その位置をPC側に知らせるためのレジスタがIDTR(インタラプトディスクリプタテーブルレジスタ)ですきっと. 中身知り亭って方はこちらのサイトを見て回るといいのではないでしょうか...? http://capm-network.com/?tag=InterruptDescriptorTable メモリ管理用レジスタのことについてもっと知り亭って方はこちらのサイトも見て回ると面白いのではないでしょうか...? http://softwaretechnique.jp/OS_Development/kernel_development02.html https://blog.ishikawa.tech/entry/2018/12/10/215234 (こちらの方はリアルモードとプロテクトモードのメモリアクセスの仕方の違いについて端的に述べてくださっていますので, いまいちこの二つのモードの違いについてピンとこないという方にはありがたいかと思われます. アドベントカレンダーには素晴らしい記事がたくさんありまして, 調べまくるサーフィンをするのに丁度いいかと思われますので, もし存在を知らない方がこの記事をみることがあれば, 見に行ってみてくださいな. 界隈で有名な方々がたくさん投稿していらっしゃる自作OSアドベントカレンダーというのもあります.) 後, ディスクリプタテーブルって複数あるの?って思われた方はこちらへどうぞ. http://babyron64.hatenablog.com/entry/2017/12/22/210124 https://kernhack.hatenablog.com/entry/2013/05/11/022220 <details> <summary>P112のページングが気になった方へ</summary> (ところでp112の下の方でセグメンテーションとは異なったページングというメモリの使い方の思想みたいなものが出てきていますが, (セグメンテーションはフラグメンテーションの解消のためにメモリコンパクションをやれだのとある一方で, そういうのはやらなくていいけど, ページイン/アウトに際してのスラッシングで死ぬ可能性のあるページングという)もしもここら辺の仕組みや長所と短所についてちゃんと知りたいて方がいらしゃれば, 岩波講座 ソフトウェア科学6 オペレーティングシステム にかなり詳しく書いてありましたのでもしよろしければどうぞ...(この本は情報量がなかなかにえぐかったので, 僕のような低スぺ人間にはつらかったですが, それでもメッセージングの各種問題や局所性のこととか, 疑似デッドロックのこととか, わりと非自明そうなことを知るきっかけとなりましたのでどぞ...特に局所性, とても面白そうなのですよね...研究テーマに(なるのかどうかは知りませんが)したみがありますがいかんせん僕は金属についても割りと興味のある機械科の人間なので学校ではそれできないのですよね...個人ではいくらでもできますが...ところでこの界隈いいですよね...twitter大好き界隈で自分よりもずっと強い方々がすぐに観測できてタカキよろしく僕も頑張らないとなってなりますので)) </details> <br> ### 6日目 includeするときに""なのか<>なのか: ""はソースファイルと同じフォルダ内にある場合に用いて, <>はコンパイラ付属のものを使うときに用いる. セグメント属性: CPUがシステムモードになるか, アプリモードになるかは実行中のプログラムがどのアクセス権のセグメントにおいてあるかによる. <ul> <li>0x00: ディスクリプタテーブル内の未使用のところ(本の書き方だと, 複数のディスクリプタテーブルがあるようにも思われますが多分一つのはずかと...)</li> <li>0x92: システム専用 読み書き可能 実行不可</li> <li>0x9a: システム専用 読みのみ可能 実行可能</li> <li>0xf2: アプリ用 読み書き可能 実行不可</li> <li>0xfa: アプリ用 読みのみ可能 実行可能</li> </ul> ```c //bootpack.c(projects->05days->harib02i) void init_gdtidt(void) { struct SEGMENT_DESCRIPTOR *gdt = (struct SEGMENT_DESCRIPTOR *) 0x00270000; struct GATE_DESCRIPTOR *idt = (struct GATE_DESCRIPTOR *) 0x0026f800; int i; /* GDTの初期化 */ for (i = 0; i < 8192; i++) { set_segmdesc(gdt + i, 0, 0, 0); } //======================================================= //ここでGDTへの設定を行ってる. 0x4092の上位4ビット(4のこと)は拡張アクセス権のこと(p125を見て) //その4ビットを0100とすることで32ビットモードになる. (本の中でのD=1に対応) set_segmdesc(gdt + 1, 0xffffffff, 0x00000000, 0x4092); set_segmdesc(gdt + 2, 0x0007ffff, 0x00280000, 0x409a); //======================================================= load_gdtr(0xffff, 0x00270000); /* IDTの初期化 */ for (i = 0; i < 256; i++) { set_gatedesc(idt + i, 0, 0, 0); } load_idtr(0x7ff, 0x0026f800); return; } ``` #### bootpack.c はどこから実行されるの? ##### IPL10.nasからasmhead.nasへ ここまで書いてて, どこからbootpack.cは実行されるのかが気になりましたが, その流れを追ってみたく思います. IPL10.nasが0x7c00にBIOSによって読み込まれた後に実行され, (8日目5章に色々と書いてありますが自分は全体的な流れを見てみたかったので) ``` ipl10.nas ; haribote-ipl ; TAB=4 CYLS EQU 10 ; どこまで読み込むか ORG 0x7c00 ; このプログラムがどこに読み込まれるのか ``` 10セクタの読み込みが終了したときに, ディスクの中身を(将来的にブートパック512バイトの先頭が0x8000となるように考えて), セクタ2が0x8200の位置となるように読みこませたことと, ``` ipl10.nas ; ディスクを読む MOV AX,0x0820 MOV ES,AX MOV CH,0 ; シリンダ0 MOV DH,0 ; ヘッド0 MOV CL,2 ; セクタ2 ``` OS関係なく, <a href="#0x4200">ディスクイメージ単体でファイルを保存したときに保存される場所が0x4200であったことから(三日目p58)</a>, OS込みで考えた場合にはメモリの0x8000+0x4200=0xc200番地にファイルがあるはずで, 読み込み終了時に ``` ipl10.nas ; 読み終わったのでharibote.sysを実行だ! MOV [0x0ff0],CH ; IPLがどこまで読んだのかをメモ JMP 0xc200 ``` で0xc200にJMP(これはIPレジスタの値を変えるだけのNEARジャンプ?)してasmhead.nasを実行させてます. (asmheadの細かい解説は本の8日目(p166)にあります)(この中でやってることには20日以降の内容とか15日目にやるタスクの考え方みたいなのが入っています.そしてここの内容が説明されています(p294)) http://softwaretechnique.jp/OS_Development/Tips/IA32_Instructions/JMP.html (JMP命令のこととか) ##### asmhead.nasからbootpack.nasへ で, そのasmhead.nasはどうなっているのかといいますと, ``` asmhead.nas ; haribote-os boot asm ; TAB=4 BOTPAK EQU 0x00280000 ; bootpackのロード先 DSKCAC EQU 0x00100000 ; ディスクキャッシュの場所 DSKCAC0 EQU 0x00008000 ; ディスクキャッシュの場所(リアルモード) ; BOOT_INFO関係 CYLS EQU 0x0ff0 ; ブートセクタが設定する LEDS EQU 0x0ff1 VMODE EQU 0x0ff2 ; 色数に関する情報。何ビットカラーか? SCRNX EQU 0x0ff4 ; 解像度のX SCRNY EQU 0x0ff6 ; 解像度のY EQU 0x0ff8 ; グラフィックバッファの開始番地 ORG 0xc200 ; このプログラムがどこに読み込まれるのか ``` どこに何をいれるのかをラベル付けして, あらかじめ定めて, ORG 0xc200で整合性をとり, ``` ; 画面モードを設定 MOV AL,0x13 ; VGAグラフィックス、320x200x8bitカラー MOV AH,0x00 INT 0x10 MOV BYTE [VMODE],8 ; 画面モードをメモする(C言語が参照する) MOV WORD [SCRNX],320 MOV WORD [SCRNY],200 MOV DWORD [VRAM],0x000a0000 ``` 画面モードを設定し, (320*200からより高解像度にするのは14日目の3章(p279)なので当分はこれ. 14日目で画面が大きくなるとなんかすっきりしますはい) ``` ; キーボードのLED状態をBIOSに教えてもらう MOV AH,0x02 INT 0x16 ; keyboard BIOS MOV [LEDS],AL ``` でキーボードサービス機能(BIOS割り込み0x16)を呼び出しAHレジスタにファンクションコード0x02でインサートキーが押されてるとかキャプスロックが押されてるとかをALレジスタに入れて返してもらって, それを[LEDS] (0xff1, asmhead.nasの先頭にかかれています)の領域にコピーしてきてます. キーボード関連の割り込みについて, 詳しくは下記にありまふ. http://softwaretechnique.jp/OS_Development/Tips/Bios_Services/keyboard_services_02.html で, その次が割り込み禁止で, p166の最初にも書かれているのですが, 一応この段階でもわかるということで, ``` ; PICが一切の割り込みを受け付けないようにする ; AT互換機の仕様では、PICの初期化をするなら、 ; こいつをCLI前にやっておかないと、たまにハングアップする ; PICの初期化はあとでやる MOV AL,0xff OUT 0x21,AL NOP ; OUT命令を連続させるとうまくいかない機種があるらしいので OUT 0xa1,AL CLI ; さらにCPUレベルでも割り込み禁止 ``` ここは筆者がp128で具体的なポート番号についてはbootpack.hを見てくださいと言っていたところと関連していて, ``` bootpack.h /* int.c */ void init_pic(void); #define PIC0_ICW1 0x0020 #define PIC0_OCW2 0x0020 #define PIC0_IMR 0x0021 ←これと #define PIC0_ICW2 0x0021 #define PIC0_ICW3 0x0021 #define PIC0_ICW4 0x0021 #define PIC1_ICW1 0x00a0 #define PIC1_OCW2 0x00a0 #define PIC1_IMR 0x00a1 ←これに注目 #define PIC1_ICW2 0x00a1 #define PIC1_ICW3 0x00a1 #define PIC1_ICW4 0x00a1 ``` となっていることと, ``` MOV AL,0xff OUT 0x21,AL NOP ; OUT命令を連続させるとうまくいかない機種があるらしいので OUT 0xa1,AL ``` となっていることと, p129のIMRについての筆者の解説から分かるように, 0xffがCPUに, PICからの割り込みを全て見えなくする意味を持つことから, これはx86CPUに備わっている割り込み禁止(CLI命令)に先駆けて外部からのハードウェア割り込みを禁止にする意味で, あれそれってCLIで十分では?ってなることを予想して, 筆者が ``` ; AT互換機の仕様では、PICの初期化をするなら、 ; こいつをCLI前にやっておかないと、たまにハングアップする ; PICの初期化はあとでやる ``` との注釈をいれているものですきっと. (8259Aが云々はこちらとそのリンク先にありました. こちらの方はほかにもなんで0x7c00に(二次)ブートローダが入るのかという歴史についての記事も書かれていたりしてまして興味深いなぁと思いましたのでそちらもぜひ(https://www.glamenv-septzen.net/view/614) https://www.glamenv-septzen.net/view/468 ) で, その次が, A20GATEで, (A20GATEについてはこちらに書いてありました. http://softwaretechnique.jp/OS_Development/kernel_loader3.html ) ``` ; CPUから1MB以上のメモリにアクセスできるように、A20GATEを設定 CALL waitkbdout MOV AL,0xd1 OUT 0x64,AL CALL waitkbdout MOV AL,0xdf ; enable A20 OUT 0x60,AL CALL waitkbdout ``` ``` waitkbdout: IN AL,0x64 AND AL,0x02 IN AL,0x60 ; から読み(受信バッファが悪さをしないように) JNZ waitkbdout ; ANDの結果が0でなければwaitkbdoutへ RET ``` これもp167に詳しく書かれているのでそこをよめば分かる感じなのですが,もっと踏み込んで, 0x64とか0x60とか0xd1とか0xdfとかなんぞやってなった場合のための記述をしておきまふ. <details> <summary>前提知識</summary> まず, 前提の知識として, https://wiki.osdev.org/%228042%22_PS/2_Controller とか http://softwaretechnique.jp/OS_Development/kernel_loader3.html とか http://yuma.ohgami.jp/x86_64-Jisaku-OS/03_kbd.html とか https://www.hazymoon.jp/OpenBSD/annex/keyboard.html とか見るとわかりやすいのではないでしょうか. 特に一番上と二番目のサイトはこれ以外にとどまらずなんかものすごくいろんなことが書かれていたのでサーフィンして学習するのに丁度いいかもしれないです(三つ目のサイトではKCBというワードが出てきまして, KCBが何かが説明されておりませんが, これはキーボードコントローラーバッファの略かと思われます.)(また, 上から二つ目のサイトにおいて, 0xddと0xdfの命令が0xddでA20GATE有効, 0xdfで無効となっていますが, ミスなのか, それともそういう規格で動くKBCがあるのか僕にはわからないので何ともいえないです...) また, アセンブラの書き方が本書と違っていることに気づくと思いますが, これは AT&T記法、 Intel記法の違いによるもので詳しくは https://qiita.com/edo_m18/items/83c63cd69f119d0b9831 を見てみるとわかりやすいかと思われます. (気になったのですが, IN命令, OUT命令でALレジスタを使うことになっているのは多分回路上の制限なのでしょう...二日目p38で, メモリの指定に使えるレジスタはBX,BP,SI,DIだけとあるようにOS自作において, 回路的な制限を受けてしまうことがほのめかされています. ここらへんの回路というか命令デコーダから実行までがどのようになっているかは CPUの創りかた - IC 10個のお手軽CPU設計超入門 を読みますと理解が深まるかと思います. で, 論理素子ってどうやって作るのかとか気になったら, トランジスタの応用とかアナログ回路方面の知見を回収する流れでいいのではないでしょうか...ところで回路を作るうえでNANDとかの論理素子を最小にしたことを証明するのってどうやるんですかね...これ結構気になってねこになってるのですが...それとも数個少なくしたところで関係ないやろってことでそんなに気にしないのですかね...? ) <br> 後, ポートIOっていうのがCPUの中のメモリと何が違うのかを知りたいと思った方は http://softwaretechnique.jp/OS_Development/kernel_loader3.html この記事の, システムアーキテクチャ(フロントサイドバス)の部分のお気持ちを知っておく必要とする気がしましたまる. IN/OUT命令で指定するアドレスというのは今までのCPU内にあるメモリのことではなくて, アドレスバスでつながっている各周辺機器へのアドレスで, 命令に応じてアドレスバスで指定された場所に, 制御バスから各周辺機器にどうしてほしいのかの命令が飛び, それと同時にその命令に必要なデータが, アドレスバスで指定された場所に, データバスから飛んで行ったり, もしくは帰ってくるデータがあればデータバスに乗って帰ってくる(そしてそれがCPU内のレジスタに入る)ということかと思われまふ. --- </details> <details> <summary>つまりどういうことだってばよ...</summary> <br> 前提として, レジスタのお話をする前に, KBCには入出力のためのレジスタはキーボード側からのデータを受け付ける役割と, CPU側からの命令の引数(みたいなもの)として飛んでくるデータを受け付ける役割と二つの役割がありますが, しかし, キーボードコントローラーバッファ(KCB)はKBC内には一つしかない(入力と出力で別々にあるとのことなので正確には二つですが), ということを念頭に置いておく必要があります. そのために, CPU側からデータを送るときには, バッファ内に既にキーボードからのデータが飛んできていないかを見て, KBC内での, CPUからの命令の処理に影響がでないようにしてあげないといけませんきっと(作って理解するOSのp446とか上記の各サイト参照) KBCにはCPUとやり取りをするために(CPU側から見るとあたかもそう見えるようになっているとのこと)二つの8bitレジスタを持っており, これがIOポートの0x60と0x64番に繋がれています. CPUはこのレジスタを介して, KBCとうまいことやり取りをします. そしてこのレジスタは(多分)制御バスからの信号に応じて, CPU側からみて, 役割が変わります. (内部では異なるレジスタにつながるようになっているらしいです.) まず0x60番の方は, CPUから, データを読み取らせろ(R命令), という命令が来た時にはKBC側から見た出力レジスタとして機能し, キーボードからのデータをCPUの方に投げます. 一方で, CPUから, データを保存させろ(W命令), という命令が来た時には, KBC側から見た入力レジスタとして機能しCPUから投げられたデータをKCBに保持します. 一方で, 0x64番の方はどうなのかというと, こちらは, R命令とW命令とで, 意味が大きく異なります. R命令の時には, ステータスレジスタとして活用されます. その名の通りに, KBCの状態を示す1byteのデータを読み取ることができます.bit0-7にそれぞれ意味のある(何に使われているのかが不明瞭なbitもあるようですが)値が入っています.(上の方に記した各サイト参照) W命令の時には, コマンドレジスタとして活用されます. こちらもその名の通り, あらかじめKBCに備わっている命令をCPU側から実行するためのものです.(OSdevの方で,キーボード側に送られるバイトと混同されるべきでないと書かれているのは, PS/2の規格のキーボード側にもコマンドが備わっているのでそれとごっちゃにしてもらっては困るよとのことなのでしょうかね) 各コマンドがどのようなものであるのかは上記のサイトを見てもらえばわかるかと思われまふ. で, このコマンドは, CPU側からIOポート0x64番に送れば勝手に実行してもらえるコマンドだけではなくて, 当然ながら, CPU側からのデータを必要とするものだったり(2byte命令て書いてあるのでもしかしたらデータではなくて命令自体が2byteあるやつもあるかもしれないですが), CPU側にデータを送り返したりするコマンドも含まれているみたいです. そういうときはどうすればいいのかということですが, まずコマンドの実行にデータを必要とする場合には, ステータスレジスタのibit目の値が0となり, KBCが入力データを受け付ける状態になったことを確認してから, 今度はIOポート0x60番にW命令を出して, データを書き込めばKBCが命令を実行してくれます. 一方で, 帰ってくるデータがある場合には, ステータスレジスタの0bit目の値が1となり, 出力データがあることを確認してから, IOポートの0x60番にR命令を出せばそのデータを得ることができます. あと, もう二つレジスタ?なのか不明ですがKBCのコンフィギュレーションバイトと,アウトプットポートというものがこれまでのレジスタとは別にあるらしくて, コンフィギュレーションバイトの方はこれもその名の通りKBCの設定に使われているもので, 0x20命令や0x60命令で読み込んだり書き込んだりできます.一方で, アウトプウトポートというものは, KBCが (これの代表的なので8042iというものがありまして, これがあまりにも広まって, しかも性能も良かったとのことで, コストを下げるために, こいつにキーボード以外にもいろいろさせようということで, A20GATEの設定やCPUのシステムリセットなどを搭載したとのことです. またPC/2の導入により, 更に, マウスの設定機能も追加されたとのことです.) その性能故に色々と担当するようになってから, 外から設定用のバイトとして見えるようになっているところで(多分です...どこにもアウトプットポートが何故存在しているかの開設が書かれていませんでしたので), ここを書き換えることで, A20GATE有効/無効設定やシステムリセットの設定ができます. ただし, システムリセットの設定とあるように, 書きミスると恐ろしいというか, そこでリセットして永遠に始まらないシステムができると思いますので, R命令でバイトを読み取ってから, OR命令でA20GATEのところのみ1にして, それをまた返すという流れで行ったほうがいいのだと思います. で, 0xD0命令と0xD1命令によって読み書きができます. 注意したいのが, どちらの設定を行う場合も, ちゃんとバッファが空いているかの確認をし, もしバッファが空いていなかったら, 次のサイクル(ループ)でもう一回見に行くなどビジィウェイティングしたりろかする必要がある点です. (色々読んでて気になったのですけどさすがに内部バッファってレジスタとは別にあるのですよねきっと...一個のデータだけしかレジスタにとどめられないと流石に計算できないはずですからフリップフロップで貯めてるんですよねきっと... あと, 本書の場合はCPUの方のKBCを介してのキーボードの割り込みは禁止にしてますけど, KBCから見たキーボードの受付とかは禁止にしてはいないので, 別のサイトでは0xAEと0xAD命令でKBCもキーボード(第一PS/2ポートに接続されているのでがキーボードのため)からのデータを受け取らないようにようにしてからA20GATEを有効化しているのでKBCがCPUからのデータを処理するタイミングでキーボードからのデータが飛んできたときとかの処理がどうなるのかもきになるところではありますが...まぁ, そのコマンドを出してしまうと, それはOSをひとまず作ってみようから!, 周辺機器のごちゃごちゃも含めてちゃんと理解しようの本になってしまうので避けたのでしょうね...) --- </details> <br> 流れを追う前にwaitkbdout関数(p172にて解説あり)についてみます. waitkbdout関数において, キーボードコントローラーのステータスレジスタを読み取って, (IN AL,0x64) そのbit1の値が0(キーボードコントローラに送信可能を意味)であるかを確認するためにAND命令を行い, (その結果は第一オペランドであるALにも入りますが, EFLAGSレジスタのZFとかにも入り, JNZ命令時にそこを見ていますきっと.AND命令で影響のあるEFLAGSレジスタは下記に載ってます. http://softwaretechnique.jp/OS_Development/Tips/IA32_Instructions/AND.html) その次にキーボードコントローラー側からIOポートの0x60番地になにか来てないかをみに行きます.(キーボード側からのデータとCPUからKBCに渡して処理をしてもらうデータは内部のバッファを共有しているためにキーボード側からのデータが処理中に影響を与えることのないように)それで最後に, JNZ命令でキーボードコントローラに送信可能であれば呼び出し元に戻って, そうでないならもう一回読み直すことをしています. では, この関数の説明?が終わったところで, この部分の流れを見ていきます. まず, waitkbdoutでKBC(キーボードコントローラの略)に書き込み可能であるかを調べ, 書き込み可能になったら, IOポートの0x64番地へ, ALレジスタに0xd1を入れてから, ALレジスタの値を出力しています. 0x64番地へのCPU側からの出力で, KBCはALレジスタ内の値をコマンドとして受け付けるようになり, この0xd1命令により, バッファが空きしだい, 0x60に飛んでくるデータをアウトプットポートに書き込めるようになるので, waitkbdout関数でバッファが空くのを待機して, 0x60への書き込み命令により, 0xdfというデータを書き込んでいます. で, 最後のwaitkbdout関数により, ちゃんと中でデータが処理されて, 次のコマンドを受け付けるようになるまで待機します. (この部分の解説は本にも載っていて, A20GATEの処理が確実に完了することを保障するためとあります.) 次の部分に行きます. (p168, p173にも書いてあります.) ``` asmhead.nas ; プロテクトモード移行 [INSTRSET "i486p"] ; 486の命令まで使いたいという記述 LGDT [GDTR0] ; 暫定GDTを設定 MOV EAX,CR0 AND EAX,0x7fffffff ; bit31を0にする(ページング禁止のため) OR EAX,0x00000001 ; bit0を1にする(プロテクトモード移行のため) MOV CR0,EAX JMP pipelineflash pipelineflash: MOV AX,1*8 ; 読み書き可能セグメント32bit MOV DS,AX MOV ES,AX MOV FS,AX MOV GS,AX MOV SS,AX ``` それでは順々に見ていきましょう. まず初めの[INSTRSET "i486p"]のところですが, こちらはNASK専用の命令となっておりまして, NASKでは命令セットでどれを用いるのかを明示する必要があるために入っています. NASKとNASMでほかにどんなことが違うのか, というのはこちらのサイトに載っております. http://hrb.osask.jp/wiki/?tools/ 次のLGDT命令についてはどうしてもGDTRとGDTのディスクリプタの中身を知る必要があります. p125にディスクリプタの中身についての解説が丁寧に書かれていますので, そちらをご覧ください. だた, この部分に関しては, http://aikiriao.hatenablog.com/entry/2017/11/04/025501 こちらの方のブログの, 仮のGDTを作っておく, のところに本当に丁寧に書かれていますので, GDT関連のこの部分はこちらを主に見ておいた方が大変わかりやすいかもしれません. それはさておき, 僕も自分なりの理解したいので, 書いていきます. まず, これは上の方のサイトにも書いてあることですが, これが大前提になっていると思いますので, ひとまずかいておきますと, プロテクトモードにおいてはGDTを使ってメモリへのアクセス (ここら辺のことで, メモリアクセスの仕方について気になった方はメモリアドレッシング?(っていうのでしたっけ)で色々調べてみるのもいいかもです) を行うため, まず, GDTRに場所を伝えるのと, GDTの設定を, 私たちがしなければなりません. プロテクトモードへの実際の切り替えはCR0レジスタへの代入を行うところで初めて実現されていますので, その前にLGDT命令をおいて, GDTRにテーブルの場所と大きさを教えているのは一つのポイントかと思われます. プロテクトモードのセグメントのところを見てみてください. http://caspar.hazymoon.jp/OpenBSD/annex/intel_segment.html こちらの論理アドレスとリニアアドレスの項も, ものすごくわかりやすいです. http://softwaretechnique.jp/OS_Development/kernel_loader2.html で, その中身のGDTはどうなっているのか, GDTR0とはなんなのか, と言いますと, ``` asmhead.nas GDT0: RESB 8 ; ヌルセレクタ DW 0xffff,0x0000,0x9200,0x00cf ; 読み書き可能セグメント32bit DW 0xffff,0x0000,0x9a28,0x0047 ; 実行可能セグメント32bit(bootpack用) DW 0 GDTR0: DW 8*3-1 DD GDT0 ALIGNB 16 ``` となっております. その名の通り, GDT0がテーブル本体であり, GDTR0の方が, レジスタに設定する内容(大きさと場所)です. 上から順にみていきましょう. まず, 気になるのが最初のRESB 8です. ヌルセレクタとのことですがこれはいったいなんなのでしょうね... (DB, DDやDWの違いが, データがひとまとまりでは何バイトか, の違いであるとのこと(p27)でありますが, では, これは内部ではどう影響しているのか,というのは, リスティングファイルを見れば, ロケーションカウンタの増え方が変わるとか, きっとわかるのでしょうけれど, 不適切な型にした場合にどうなるかとか割と気になりますね...) さて, 質問を漁っていいたところ以下のような記述を発見しました. 実はセグメント番号0番はGDT内に設定できるけど、実際には使ってはいけないセグメント番号なのです。それで使っていません。だからまあ実は設定する必要だってないのですが、これだけ初期化しないままにしておくのもかわいそうな気がしたので、初期化はしているというわけです(http://hrb.osask.jp/wiki/?qa_log/0006) なるほど, 実際には使ってはいけないものらしいです. なんかぱったしないので, これについてたどってみました.そのことを折りたたんでおきますので興味があれば見てみてください.ひとまず, 「規格上, 初めの8byteを0で埋める必要があるもの」として考えます... details> <summary>ヌルセレクタ</summary> まず  https://qiita.com/machine_engineer/items/90f0d085c1fef0a73b84 ここに行きつきました. この中で紹介されている, とあるサイトというのが毎度お世話になっているサイトでして, https://www.amd.com/system/files/TechDocs/24593.pdf このなかで, 次のような記述がありました. ``` Nullディスクリプタ Intelの仕様では0番目のセグメントディスクリプタとして値が全部0のNullディスクリプタを作る必要があります ; Null descriptor DW 0x0000 ; 全部値が0のNullディスクリプタを作ります DW 0x0000 ; Intel CPUの仕様で決まっています DW 0x0000 DW 0x0000 ``` なるほど, どうやら, intelの仕様らしいですね...しかしいまいちぱっとしません...次に辿り着いたのがこちらの毎度おなじみのstack over flowでして, 大きなAnswerの項がありませんでしたが, 次のような記述がありました. https://stackoverflow.com/questions/37861691/why-x86-processor-need-a-null-descriptor-in-gdt Selector 0 is generally only used to invalidate unused segment registers. if you place 0 in a a segment like GS an an example and try to access memory through GS, a general protection fault will be raised. – Michael Petch Jun 16 '16 at 15:38 AMD's architecture manual discusses the NULL Descriptor around page 70. Look for "Null Selector" . Selector 0 happens to have other uses in 64-bit long mode like nested control transfers which is also described. – Michael Petch Jun 16 '16 at 15:44 どうやらそれがかかれたマニュアル(AMD's architecture manual)があるようです. サーフィンしてすぐに見つかりますが, それがこちらになります. https://www.amd.com/system/files/TechDocs/24593.pdf これの70Pに確かにnull selectorの項があります. そこでは, 次のように書かれています. Null selectors have a selector index of 0 and TI=0, corresponding to the first entry in the GDT. However, null selectors do not reference the first GDT entry but are instead used to invalidate unused segment registers. A general-protection exception (#GP) occurs if a reference is made to use a segment register containing a null selector in non-64-bit mode. By initializing unused segment registers with null selectors software can trap references to unused segments. Null selectors can only be loaded into the DS, ES, FS and GS data-segment registers, and into the LDTR descriptor-table register. A #GP occurs if software attempts to load the CS register with a null selector or if software attempts to load the SS register with a null selector in non 64-bit mode or at CPL 3. ここの null selectors do not reference the first GDT entry but are instead used to invalidate unused segment registers. A general-protection exception (#GP) occurs if a reference is made to use a segment register containing a null selector in non-64-bit mode.By initializing unused segment registers with null selectors software can trap references to unused segments. が今まさにほしい答えなような気がします...訳すとこんな感じでしょうか... ヌルセレクタはGDTの最初のディスクリブタを参照しているわけではなく, 代わりに, 使われていないセグメントレジスタを無効にするために使われています. ヌルセレクタを格納しているセグメントレジスタを用いてのメモリ参照をすることになったとき, 非64bitモードの時には,一般保護例外が発生する. 使われていないセグメントレジスタをヌルセレクタで初期化しておくことによって, ソフトウェアが, 使われていないセグメントへの参照をトラップすることができるのです. つまり, 使われていないということをちゃんと機械側に明示する必要があって(エラーを出してデバッグしやすくするためか, それともなんかセキュリティ的にまずいことでもあったのですかね...?)それを伝えるところが0番目のディスクリプタへの参照ということで, ここにアクセスされた場合(GDTの0番目を使えってセグメントレジスタで指定された場合)にはとりあえず例外を出すよってことでハードと予め入っているプログラムを設計しておいて, 使う側にはここは0で初期化(仮に, 0番目にアクセスした時点で例外を吐くのなら初期化の必要性がないように思えますが...)することを要請するのでしょうか...つまり, これは未定義のディスクリプタを使っちゃった場合ではなくて, 未定義(設計者は0が入っていることを想定していそうですが)のセグメントレジスタを用いてメモリアクセスを行ってしまった場合のためのガードなのでしょうか...それならば, 未定義のディスクリプタへのアクセスが仮にあった場合にはどうなるのでしょうか...いや, そもそもこのディスクリプタは未定義であるよってことはどうやって示すのでしょうか...うーん...と, 思いましたが, そういえばGDTの設定時に, ディスクリプタのリミットって決められるのでしたよね. これをはみ出した場合には当然なんらかのエラーでるのでしょうけど, では初めに一気にばーんとリミット最大までとってしまって, かつ, 未設定のディスクリプタを指すように(0番目以外)セグメントレジスタの値をとってしまった場合にはどうなるのでしょうね...ここは後で試さないといけませんね...[to do] なんかまだ釈然としませんね... また, P74にも触れられていまして, そこでは次のように書かれています.(ここは新情報はないですかね...) A null selector points to the first entry in the GDT (the selector index is 0 and TI=0). However, null selectors do not reference memory, so the first GDT entry cannot be used to describe a segment (see “Null Selector” on page 70 for information on using the null selector). The first usable GDT entry is referenced with a selector index of 1. 他にも, null selectorで検索をかけるとわらわらと出てきます. 例えば, <ul> Stack Switching. Automatic stack switching is also modified when a control transfer occurs through a call gate in long mode: <li>• The target-stack pointer read from the TSS is a 64-bit RSP value.</li> <li>• The SS register is loaded with a null selector. Setting the new SS selector to null allows nested control transfers in 64-bit mode to be handled properly. The SS.RPL value is updated to remain consistent with the newly loaded CPL value.</li> <li>• The size of pushes onto the new stack is modified to accommodate the 64-bit RIP and RSP values. </li> <li>• Automatic parameter copying is not supported in long mode.</li> </ul> <ul> Far Returns. In long mode, far returns can load a null SS selector from the stack under the following conditions: <li>• The target operating mode is 64-bit mode.</li> <li>• The target CPL<3.</li> Allowing RET to load SS with a null selector under these conditions makes it possible for the processor to unnest far CALLs (and interrupts) in long mode. </ul> when TI=1, the selector is not a null selector The RSP register is loaded with the new RSP value read from the TSS. The SS register is loaded with a null selector (SS=0). Setting the new SS selector to null allows proper handling of nested control transfers in 64-bit mode. See “Nested Returns to 64-Bit Mode Procedures” on page 112 for additional information Nested Returns to 64-Bit Mode Procedures. In long mode, a far call that changes privilege levels causes the SS register to be loaded with a null selector (this is the same action taken by an interrupt in long mode). If the called procedure performs another far call to a higher-privileged procedure, or is interrupted, the null SS selector is pushed onto the stack frame, and another null selector is loaded into the SS register. Using a null selector in this way allows the processor to properly handle returns nested within 64-bit-mode procedures and interrupt handlers. Normally, a RET that pops a null selector into the SS register causes a general-protection exception (#GP) to occur. However, in long mode, the null selector acts as a flag indicating the existence of nested interrupt handlers or other privileged software in 64-bit mode. Long mode allows RET to pop a null selector into SS from the stack under the following conditions: • The target mode is 64-bit mode. • The target CPL is less than 3. In this case, the processor does not load an SS descriptor, and the null selector is loaded into SS without causing a #GP exception. どうやら, ヌルセレクタがなんか意味を持つようになるのは64bitモードの時のようですね... 他にも, こちらも毎度お世話になっているのですが https://wiki.osdev.org/SWAPGS にも関係ありそうなことが書いてありました. しかし, 64bitモードのOS作りってどうやるのでしょうね...きっとまたCRレジスタあたりなのでしょうか... で, 辿り着いたのがこちらのサイトで https://qiita.com/timwata/items/b70a81e46e7704edbf8d さらに検索をかけて https://wiki.osdev.org/CPU_Registers_x86-64 https://stackoverflow.com/questions/41660046/pae-in-x86-64-bit-processors-linux-kernel あたりが見つかりました. 128bitなんてのも聞くようになってきましたが, どこまで行くのでしょうね... ひとまずまとめていきましょう. A20GATE無効というのが, 旧世代のものとの互換性のためにあるもので, これがあるためにメモリは1MBまでしか使えませんでした.(16bitモード, リアルモード).で, これを有効化して,CR0で設定を行うと, GDTを必ず使い, メモリを4GBまで使えるようにした32bitモード, プロテクトモードとのことでした. ここから先に進むためには, 各レジスタの役割をおさえなければならない気がしますので, みていきましょう. 80836のレジスタについて, 今必要そうなものについて, 「x86コンピュータを動かす理論と実装 作って理解するOS」に物凄くクリアにまとまって書かれていましたのでその部分を引用します. (p178-192) 詳しいことは買うなり図書館いくなりして下さいな. (小中学生の方とかは値段的にきついかもしれませんが, 値段に対する情報量が凄いので, 挫けない心と興味があれば, 絶対に買って損はしないと思います...) 8086と比較して, という文脈で文章は書かれています. <details> <summary>80386のレジスタについて(引用)</summary> <ul> <li>汎用レジスタ</li> <details> <ul> (中略) <li>ESI</li> Source Index メモリの転送命令などで, 転送元アドレスとして利用されます. また, デフォルトでDSレジスタを参照します. <li>EDI</li> Destination Index メモリの転送命令などで, 転送先アドレスとして利用されます. また, デフォルトでESレジスタを参照します. <li>EBP</li> Base Pointer 局所的な変数を参照する. スタックポインタとして使用可能なレジスタです. 必ずSSレジスタを参照します. <li>ESP</li> Stack Pointer スタックポインタとして使用可能なレジスタです. 必ずSSレジスタを参照します. </ul> ストリング命令以外でポインタレジスタの値を自動的に加減算する命令には, 局所的(ローカル)な変数のアクセスなどで使用する, スタック操作命令があります. スタック操作命令ではSP(スタックポインタ)レジスタの値が自動的に増減します. <br> (中略) <br> 80386のアドレッシングで参照されるセグメントレジスタはベースにESPまたはEBPレジスタが使用されたときは, SS(スタックセグメント)レジスタが, それ以外のときにはDS(データセグメント)レジスタが参照されます. </details> <li>命令ポインタ</li> <details> EIP Instruction Pointer 次に実行する命令のアドレスを示すレジスタです. IPレジスタの変更は, 直接値を設定するのではなく, 分岐命令や関数呼び出しなどで行われます. 必ずCSレジスタを参照します. </details> <li>制御レジスタ</li> <details> 80386では, CR0からCR3までの4本の制御レジスタが追加されました. ただし, CR1レジスタは予約されているのでアクセスしてはいけません. <ul> <li>CR0</li> CR0レジスタは, メモリの保護とコプロセッサ制御に関するフラグが含まれています. コプロセッサ(Coprocessor)とは, CPUの補助を行う目的で作られた処理装置のことで, 汎用的な周辺機器とは区別されます. PC環境であれば, 小数演算を専門に行う数値演算処理装置を意味しています. <ul> <li>PG</li> Paging 31bit目, このフラグがセットされているとき, ページングが有効となります. PE(保護イネーブル)フラグがクリアされているときにこのフラグをセットすることは禁止されています. <li>PE</li> Protect Enable このフラグがセットされると, 保護モードが有効となります. このフラグをクリアするときはPG(ページング)フラグもクリアする必要があります. (中略) <li>ET</li> Extension Type このフラグは, コプロセッサとの通信方法を設定します. 0のときは16ビット通信, 1のときは32ビット通信を行います. このフラグは, コプロセッサの動作をソフトウェアで大体する, エミュレーションが有効なとき(EMビットが1)は無視されます. </ul> (中略) </ul> </details> <li>フラグレジスタ</li> EFLAGS <details> <ul> (中略) <li>NT</li> Nested Task flag タスクがタスクを関数のように呼び出したことを示すフラグです. このフラグがセットされた場合, 呼び出し元のタスクに戻るためのIRET命令では, タスクスイッチングが行われます. (中略) </ul> </details> <li>セグメントレジスタ</li> <details> <ul> <li>CS</li> Code Segment プログラムの実行セグメントを表します. IPレジスタを使用したメモリアクセス時に参照されます. <li>DS</li> Data Segment データを参照するときのデフォルトセグメントです. SIまたはDIレジスタを使用したメモリアクセス時に参照されます. <li>ES</li> Extra Segment 異なるセグメント間のコピーなどで使用されます. DIレジスタを使用したメモリアクセス時に参照されます. <li>SS</li> Stack Segment スタックポインタを使用するときに参照されます. SPまたはBPレジスタを使用したメモリアクセス時に参照されます. <li>FS</li> <li>GS</li> </ul> FSとGSの二つのセグメントレジスタが追加されました. </details> <li>メモリ管理用レジスタ</li> <details> <ul> (中略) <li>TR</li> (中略)TRにはタスクのコンテキスト情報を選択するためのセレクタを設定します. </ul> </details> <li>8本のデバッグレジスタと二本のテストレジスタ</li> </ul> </details> <br> さて, 次に, 上の文章を読んでいくにあたりまして, 特権レベルというか, セグメントレジスタでのディスクリプタの指定についての下3桁の部分(p135のセグメント番号の下位三桁には別の意味があってに関連.)も見ていく必要があります. 本当にこちらの方のサイトに無限にお世話になるのですが, こちらのセグメントレジスタのセグメントセレクタを見てください. http://softwaretechnique.jp/OS_Development/kernel_loader2.html また上の文章において, CPLというワードが出ていまして, RPLと似てない?関連してるの?と思いましたらどうもそのようで, 簡潔に分かりやすく書かれていますのでまずはこちらを... https://qiita.com/tetutetuman/items/cebdccf0d2fd64983db8 </details> ``` asmhead.nas ; bootpackの転送 MOV ESI,bootpack ; 転送元 MOV EDI,BOTPAK ; 転送先 MOV ECX,512*1024/4 CALL memcpy ; ついでにディスクデータも本来の位置へ転送 ; まずはブートセクタから MOV ESI,0x7c00 ; 転送元 MOV EDI,DSKCAC ; 転送先 MOV ECX,512/4 CALL memcpy ; 残り全部 MOV ESI,DSKCAC0+512 ; 転送元 MOV EDI,DSKCAC+512 ; 転送先 MOV ECX,0 MOV CL,BYTE [CYLS] IMUL ECX,512*18*2/4 ; シリンダ数からバイト数/4に変換 SUB ECX,512/4 ; IPLの分だけ差し引く CALL memcpy ; asmheadでしなければいけないことは全部し終わったので、 ; あとはbootpackに任せる ``` ``` asmhead.nas memcpy: MOV EAX,[ESI] ADD ESI,4 MOV [EDI],EAX ADD EDI,4 SUB ECX,1 JNZ memcpy ; 引き算した結果が0でなければmemcpyへ RET ; memcpyはアドレスサイズプリフィクスを入れ忘れなければ、ストリング命令でも書ける ALIGNB 16 ``` GDT関連でもっと知り亭って方は http://bttb.s1.valueserver.jp/wordpress/blog/2017/12/13/makeos-5-1/ とか http://softwaretechnique.jp/OS_Development/kernel_loader2.html をみるとわかりやすいと思いまふ. 後, 30日は筆者がごちゃごちゃしてるところは抜きにして中学生でも無理なく組めるように書いたとのことですので, 周辺機器やCPUの内部事情(各種レジスタの役割とか)やアセン周りのことは30日よりも x86系コンピュータを動かす理論と実装 作って理解するOS(技術評論社) のほうが詳しいと思いましたので興味があればそっちをみた方がわかりやすいかもしれません. ### 7日目 <工事中> ### 8日目 <工事中> ### 9日目 <工事中> ### 10日目 <工事中> ### 11日目 <工事中> ### 12日目 <工事中> ### 13日目 <工事中> ### 14日目 <工事中> ### 15日目 <工事中> ### 16日目 <工事中> ### 17日目 <工事中> ### 18日目 <工事中> ### 19日目 <工事中> ### 20日目 <工事中> ### 21日目 <工事中> ### 22日目 <工事中> ### 23日目 <工事中> ### 24日目 <工事中> ### 25日目 <工事中> ### 26日目 <工事中> ### 27日目 <工事中> ### 28日目 <工事中> ### 29日目 <工事中> ### 30日目 <工事中> ## ドット絵の知見 <工事中> ## ここからほんへ 色々と書き連ねてきましたがここで僕がこれまでに遊んできて, 面白いーーーってなったゲームの紹介をしていきたく思います. <details> <summary>長くなったので折り畳み</summary> ### FFシリーズ まぁいわずと知れたものですよね!僕はプレイしたことがあるのが1(PS1),2(PS1),4(SFC,DS),5(SFC),6(SFC),7(PS1),8(PS1),10,12,13-1,13-2,13-LRだけなのであれだはありますが紹介を... 1はやったのがリメイク版でしたのでFCの独特の感じを味わえなかったのが残念ではありましたが, HPが999までしか育たないというのはFFの後の方からやっててDQシリーズやサガシリーズをあまりやっていなかった身としてはうぉってなりましたね.ヘイストセーバー(こて)しまくって殴ればよい感じでしたが, 自分はシーフ一人旅なんてやばいマゾプレイはしてないですねはい.この時は(とFF12のアドラメレクの魔法?)サンガーだったんですよね...あと確か地味に魔法系のダメージ範囲が固定されていていたかなんかでボス戦はストライやらで強化して殴ればよい感じになってましたね...懐かしい...カオス神殿のBGMは神. 2もやったのがリメイクのほうで雰囲気が随分と違ってましたねはい.2は最初から結構な範囲を探索できるのがいいですよね.(ただし, アルテアの町から下にいって半島のようなところのぎりぎりの先端でエンカウントすると後半のモンスターがいきなり出てきて, 与えるダメージ0ばかりで一瞬でぬっころされますが)あと, 鍛え方が面白いものです. やっただれしもが自傷しまくってHPあげまくって, 4桁でFOOOOOOOして割合ダメージの敵に涙目になったのではないでしょうか.ケアル16でも自分は4桁回復できるかできないかあたりだった気がしましたので死霊系は速攻する気概でやってましたね...アスタロートで泣きそうになりましたが.セーブポイントくらいジェイドの最深部に設置してほしかったけどまぁ甘えと. キラーマンティスに傷がつけられるくらいにあって金があったら序盤でもミシディアに行くのはそれはそうでしたね.後, 単体攻撃か全体攻撃か, 魔法のレベルが上がるにつれてエフェクトが変わるシステムは本当に大好きでしたね.わくわくがやばいというかなんというか. ただ主に攻撃魔法に顕著で補助とか妨害系はそんなに変わらなかったのはあれでしたけど.で, アルテマ弱い...弱すぎる...(それはそうで普通にやってれば全熟練度maxまでは上げないよなという...全部maxにすると9800あたりのダメージを連発できるようになるのでまさに最強の魔法なのですが)やってた当時はこうていにさえも確定で100から300ダメージを与えられる!から強い...?のかとも思ってました. FF2は後半の方になるにつれて道中で魔法生物のような敵からアスピルでがんがんMP補給しないと足りなくなるんですよね...ブラットソードとか正宗エクスカリバーでごり押せばまぁはいってかんじなんですけどね.ウィングソードとかミスリスソードで切ったときの音はいい深い音でして, あと, ボス戦の曲は素晴らしいものでした...懐かしい...あとプリン系直殴りだと硬すぎて草でした. 4はSFC版とDS版をやったのでDSになってから時代の進化をかんじましたね...DS版のオープニングは神of神なので是非とも見ましょう. バブイルの巨人に戦車やら飛空艇やらで一斉に立ち向かう所に曲を合わせてくるのは卑怯だーとおもいましたね. SFC版の方から話をしていきますと, セシルがパラディンになってLv1になるのはまぁさておき(Lv1でもHPが確か600とかだったかな...ものすごく多くてびっくりしましたが), 光の剣の音がすごく良くて, これを聞くために敵を切りまくってたのは懐かしいものです. 後, 暗黒騎士時代のスキル「あんこく」が何気に全体攻撃でレベル上げするときにとても便利だったのがDSになってからはバフになってしまったのがまぁあれでしたがこちらはこちらで攻撃時のエフェクトが秀逸で, ボス戦や裏ボス時に有用だったのでえぇなぁというお気持ちです.後, 磁場で金属装備していくとやたらと遅くなってつらいってシステムはやってた当時は衝撃的でしたね. こういうのもありだよなーと.ただそのあとのダークエルフ戦, 一回目は負け戦なのでいいのですが二回目も防具をたしか装備し忘れたのか, ダメージがとても痛くて普通に負けた記憶があります. 当時は小学校低学年だったので, 少しでも工夫しないといけないところで大体死んでて, 工夫なるもののおべんつよにもなってましたね...ぼうえいシステム戦は3000回復が痛いし, 攻撃もなんかうざいていって二機ともぶっ飛ばしたらぶったい199とか謎のものが飛んできて強制9999ダメージ(だったかな)でうえーんてなったり, バハムートのメガフレアも,SFC版でしたがデルタアタックというヒントもあったのにリフレクかけて防げることを知らなくて何度も死んでましたねはい.DS版だと貫通してくるようになってシェルをかけないといけなくなってましたが, DS版はアビリティ次第なところが多々あるのでまぁはいって感じですね. ゲリュオンだったかな...こいつ二週目以降は四天王の連戦後の球体に話しかけても戦えてしまうってことを知らなくてまともな準備もせずに戦って速攻で死んで????ってなったのも今となっては思い出ですね...分身の術とかブリンクつけてても攻撃を当てられたら落ちるレベル帯だったのもあって, 二回目以降の挑戦でもばたんきゅーでしたが...(低レベルで挑む人々には頭があがりませんはい) みんな大好きフェイスの透過レーザー (アダマン装備しているときは同じ階で出てくるドラゴンのねっせん?も火力がやばくなりますが)プリンプリンセスは狩りまくるもの クリスタル装備のセシルだけは正常なままいられるというのもね... 黒チョコボ便利!可愛い! 愛のテーマ(なんか一部の音楽の教科書に載ってるとかなんとか)やゴルベーザ四天王戦からゼロムス戦のBGM神. そういえば中期ナンバリングのFF特有のATBバーの採用もこのFF4からなのですよね... どうしてリディアは大人になってしまったのだ... 5は斬新さの塊でしたね...ジョブシステムはいいものでした...ムーバー大量に狩る必要があってあれでしたが. これもやってた時は小学校のころだったので, ことあるごとにボス戦で死んでて大変でしたね...困って困って倒し方調べてたらホワイトウィンドとかマイティガードとか, どこで覚えるのよって...あぁこの青魔法の自分が食らったものをラーニングできるってシステムも当時は衝撃的でしたね...なんかあやつってやらないといけないんでしたっけ...いやーそんなの思いもよらなかったし, そういうアビリテイがあるのも昔は知りませんでしたね...記憶に残ってるものですと, すべてをしるものだったかな, こいつ魔法使いやろ?ならバーサクかけて魔法打てなくしてやるわってバーサクかけたらなんか超火力で殴り始めてきて「は?」ってなった思い出がありますね...後はムーアの大森林のボスのクリスタルでもつまずいて, こいつら全員にまんべんなく攻撃してるとHPがある程度を下回ったところで超火力の全体攻撃を連発してくるようになって顔がしょぼんになってましたね...後でやり直した時にも, ドルムキマイラからアクアブレス?を初めてラーニングしようと思ったときにも, こんなところにいるモンスターなんてみんな雑魚やろって思って軽いノリで言ったらアクアブレスを打ってもらったら火力やばくて全滅して( ω )になってましたね...終盤でも次元の狭間のラストフロアに入って, 楽勝!って言ってキングベヒーモス相手にも普通に魔法で攻撃したらメテオカウンターで殲滅されてうーんこのってなったのも懐かしいものです...他にも次元の狭間に初めて乗り込んだ時に間違ってオメガにエンカしてしまって瞬殺されたり(初見で魔法剣サンダガ乱れうちの準備なんかしてるわけないんだよなぁ), やけに長い階段の下に置いてある次元の狭間の宝箱を怪しみもせずに開けてあいつにエンカしてダイダルウェイブで全体8000とかでて(当時はLv45とかでHPが3000くらいしかなかった)は?「」ってなったりとかもありましたね.(珊瑚の指輪なんてあるのしらなかったんだよなぁ...)黒の衝撃とレベル上げる調合とオールドとレベル5デスで大体なんとかなる.(竜のつめって盗む以外で簡単に集める方法があってほしかったような別になくてもいいような) エクスデスはバーサク状態でぬっころしませう.(初見でネオのホワイトホールにやられてリカバリーきかなかったの顔) OPの曲と通常戦闘の曲,フィールドの曲(特に第二世界が好きでした), ビッグブリッヂの死闘など音楽も神. ジョブさむらいの刀のクリティカル時のエフェクトと音が大好きでしたはい.ジャベリン集めて増殖させたり変化させたりしてたのも懐かしいです...件のベルの存在(あんなの気づくわけないじゃん...)は当時は全くしりませんでしたけど, 第一世界でわけもなく飛空艇とばして喜んでた時にプロトタイプとエンカして???ってなったのは記憶にありますね... クルルとレナ可愛いですはい. 6はストーリーの毛色が随分変わって, 初めて起動時の画面(雷が光りまくってて, やけに暗いあれ)見たときに怖くなってしまった覚えがありますね.(昔はそれくらい純粋だった...)始まったら始まったで魔道アーマーで帝国に逆らう人々を虐殺していくというあれなはじまり方で(これは後になってプレイしたときの感想ですが)可愛いティナになんてことをさせるんだ, と.(ところでトランス状態の時って服どーなってるのでしょうね)しばらく進めていくとユミールとの戦闘になってここで初めてBGM決戦が流れて, 幼い心にもこの曲だけは本当に焼き付いてなんてかっこいい曲なんだと思いましたね. (行動決定してから実行にうつるまでのディレイの関係上, 殻に入るぎりぎりのタイミングで頭に攻撃指定してしまうともれなく殻に攻撃するというね)ティナの魔道アーマーだけやたらと武装が多彩で一体ミサイルはアーマーのどこに積んでいるんだろう...と思いながらやってました.FF5に比べると初見殺し感は随分とマイルドになっていたような気がしますが, 6の特徴として, パーティを分散させて別々の道を進んで, それぞれボスに挑む関係上, まんべんなくレベルを上げてないと詰む場面があって, フェニックスの洞窟でなんか奥までいって詰んだ覚えがあります. マイルドになったとはいえど, マジックマスターのFAのアルテマは初見でやられましたはい. ほかに特徴的なのがげんじゅうをセットしてレベル上げするとボーナスがつくやつでこれを当時は全く知らなくて, なにもげんじゅうをセットしないままにティラノサウルス狩りをしてましたので今思えばなにやってんだろうなぁと.他にも,ひっさつわざの入力でななめ!?ななめ!?ってなってSFCで二つ同時押しでいつも失敗してばかり(ななめは別にその方向の二成分方向のどちらのボタンでもよい)でなんだこれってなってましたね.(オーラキャノンはかっこいい). アルテマウェポン(武器)のエフェクトがかっこよくて,中盤あたりから弱くても(HPが成長しないとまともにダメージがでない)ずっとつかってましたね...後ほかにいうことがあるとすればコロシアムですよ. デュポーンに先手をとっったのにせっかくの装備のかいでんげんじで8連撃せずによくわからん行動するのは本当にもう本当に.ハイパードライブの威力頭おかしいですはい. デスゲイズが全然エンカしなくてずっと空飛び回ってたのも懐かしいです. 結局えいゆうの盾を手に入れられてないんですよね...眠れる獅子とエンカしたときに, いないやんっていって取りあえず殴ってみようっていって殴ってメテオされてうぉわってなった方は結構おおいのではないでしょうか...グランドトラインのラーニングは忘れずに...シャドウはちゃんと待ってあげようね...ゴゴの洞窟の上から降ってくるあれって一発でゲームオーバーなんですよね...バニシュデスで大体解決.飛空艇のBGMとフィールドのBGM良き良きです. いつかはここの絵師さんみたいなドット絵を描きとうございます... 7と8は忙しい時期にプレイしてたのであまり記憶にないのですよね...7はゴールドソーサーで潜水艦ゲーム楽しいーーーって言って無限にプレイしてたのと金チョコボのために躍起になってたのとウェポンにシスターレイをぶっ放すムービーとバハムート零式のムービーくらいしか思いでががが(マテリアでしたっけ, あれも画期的だったような気がします.) 8もジャンクションシステムと魔法生成システムを全く理解していなかったので永遠と敵からドローしていたり, lv100にして天国/地獄島で死ぬような思いをしたり, バハムートを拾えるところで, 選択を誤って敵を発生させる選択をしてしまってるブルムドラゴン?のメテオの恐怖に怯えながらエンカしないでしないでって言って進んでいた覚えがあります. アルテマが手に入ったらマルチジャンクションを遠慮なく使っていくスタイルをするあたり自分はそういう人間なんだなーと. メルトン怖い. あと, 敵からGFドローし忘れたんですけど!!!アルティミシア戦のBGMが途中で雰囲気かわるの大好きです. ガンブレードのタイミングつかむのはなれるまでなかなかきつかったです. ブラスティングゾーンはあれだけ派手な演出なのにどうして1Hitなのでしょうね... 10も忙しい時期にやってたのでストーリーをかなり駆け足で見て, もっとゆっくりやって世界観にどっぷりつかれれば大泣きできただろうなぁという感じなのでもっと味わいたかったなぁと...このあたりになってくるともう初見殺し感は殆どなくなっているのですが, 唯一, ユウナレスカの第三形態で第二形態のゾンビ状態を維持しておかないとオーバーデスで強制的にぬっころされるというのははい, 引っ掛かりました. スフィア盤も面白いシステムでしたよね...FF12やFF13のもここから引き継いでいるのでしょうし.ただAP稼ぎが面倒だったのと(PS2盤をやっていたので例の裏技は使えますが), 反射神経がごみなもので, 雷よけ200回できないようえーんというのと, チョコボレース?0秒達成がきつくて何回もやってようやくクリアした思い出がありますね...(こちらも時間停止できますが...)ヒュージスフィアは乱獲しませう. 七曜の武器が防御無視で混乱したときあれなので, 普通の武器に強いアビリティつけた方がいいとかなんとかっていうのも見かけましたが全員の七曜武器揃えるところまではいってないのですよね...悲しい...ブリッツボールは面白いなぁと思いましたが人集めがひたすらに地味そうで時間の都合上あきらめてましたね...いつかやりなおしたいな...(なおハードの問題) 12ですよ12!!個人的にはこのADBシステムが大好き過ぎて中学あたりだったかな...無限にやってましたね...(この時間をプログラミングに使っていればなぁと今となっては思いますが, 前述の通り, まだネットが発達しきっていなかったのでネットでの独学というのがほぼほぼ不可能で, 環境格差が酷い時代でしたからね(今も十分にひどいですが))世界も一気に広くなってもう自由にいろんなところにいけるのもすごく良かったです. 特筆すべき点としてやっぱりガンビットでしょう.これによって普段の先頭の効率化が行えるようになったのはもう素晴らしいです. 頭のあれなAIに操作を任せるのではなくて自分で行動パターンをセットできるというのが画期的で感動してましたね.(まぁこれも結果的にはプログラミングの勉強にはなったのですよね...)もう書きたいことがたくさんありすぎて全然手が追い付かないのですが, 交易品システムとかトレジャー(特にヘネとかルースとか), 最強武器のドロップがレアモンスターからのみとか, チェインシステムとか裏チェインシステムとか, リドルアナ地下の初見殺し過ぎるモンスターラッシュとかマジックポットとか, 序盤で怖い精霊とか(ガリフの里に向かうときの雨季ギーザでlv19程度のときにリフレクで弾いてやるって精霊に挑んで貫通持ちで3000くらいくらったのは懐かしい...後, エレメントって攻撃したときに自分にもダメージが飛んでくるのですよね...), 連撃システムとか, サブクエストとか(モグの師匠?がヤズマットとタイマンできるっていったいどんな強さなんだろう...), ピンクパンツのおじさんとか, あぁ無限にでてきますよ...とりあえず, オープニングと要塞バハムート関連のムービーが秀逸すぎますので是非とも見てください!(聞き取りづらいのですが, ビッグブリッヂの死闘がリメイクされて流れますのでそちらも是非(源氏シリーズを盗み忘れて連撃が不利になった方はこちらです.))戦艦というか船のデザインから召喚獣のデザイン, 上位武器のデザインとかもうデザイナーの方が天才かって感じで自分は特に戦艦イフリートの中空構造が大好きでしたね...あとは帝国の戦闘機のヴァルファーレの翼展開時のシルエットとか.(シュトラールのデザインも大好きなのですが, 主砲みたいなものから射撃を行うシーンが一度もみれなかったのは残念でした...) 13はシリーズを通してやってましたが, 13LRの最後で神からの解放ていう終わりであぁーなるほどなここに落とし込みたかったのかぁ...と. FF13の特徴はムービーとストーリーに重点をおいているのとバトルシステムですよね.(PS3の初期ロットの60GBでもディスクの中身が30GBくらいあるために色々とPS3内に溜まっていくとディスクを読み込めなくなってしまうなどがありましたね...懐かしい...)当時としてはまず圧倒的にグラフィックがきれいなのと, 曲がとても素晴らしいものばかりで初めての戦闘(マナスヴィンだったかな)で流れたブレイズエッジを聞いてまず感動したのと, そのあとに通常の戦闘曲の閃光を聞いてその後の生活でしばらくずっと脳内再生されてましたね...(ピアノはいいぞ!(難易度Aの曲しか弾けませんでしたが...))斬鉄剣使った後にオーディンに剣を返すタイミングでリザルトに行くのもよきよきでしたねはい. その後もサンレス水郷に入った時の曲や地上に降りた後のアルカキルティ平原の曲, ヤシャス山の曲とヲルバ郷の色のない世界などは世界観にばっちりあっていて素晴らしかったものです...作曲の方もそれをチョイスした側も天才すぎてひゃーってかんじでした.敵というか, メカメカしたものがたくさん出てきて, そういうのが大好きな自分にとってはものすごくよかったです.(そうはいってもそういう連中に限って大体詰ませてくるのでなかなかあれですが...森林のユイジンシャンとかテンジンタワーのペイン野郎ことスパルタンとか首都のプラウドクラッド?などは割と詰んでましたね...FF13はストーリーの進行具合によって成長限界が定まるので, レベル上げて力押しができないために戦術面でなんとかするほかないのですよね...シド戦でまともにガードしなくて打ち上げられてそのままぼこされて壊滅した方も多いのではないでしょうか...?あとは召喚獣戦は特定の行動をしまくって制限時間内(死の宣告)にゲージをmaxにしてドライヴィングモードを発動しないといけないにも関わらず向こうは割と全力で殴ってくるのでかなりぎりぎりでした...ぎりぎりになってしまうのは割とPS面の問題もあるのでしょうけど個人的にはちょうどいい感じの難易度でしたね...物語的にもそういう戦いを共有できた方がストーリーに入っていけますし) 設定で衝撃的だったのが, シ骸ですね.これの設定とデザインにやってた時にものすごく惹かれまして, マイナスの感情によって紋章の目が開いていって最後はクリスタルか化け物とうわぁなもので分からないというか謎のことには興味をもつものなのでもう他に設定資料ないのかとネットを漁りまくってましたね...後, 戦闘の特殊さというか, 全滅してもリスタートできて, ゲームオーバーには直行しなかったり, ギル稼ぎの手段がアイテム売りで戦闘入手ではなかったり(ホープ君の家で敵を狩りまくるのはお約束), ブレイクさせるもしくはある程度ゲージをためないと(ネオチューなんかはゲージをある程度貯めたらケルベロスを12秒ルールで切り替えて一気に落とす方が楽, 取り巻きのちっこいのはルインガだがエリアブラストだったかで浮かせたりして攻撃させないで落とすのが基本だった気がし)殆ど攻撃が通らないのでこのシステムになれるまでが大変でしたね...(メカ系の敵は本当にダメージが通らなかった覚えがありますので...後はブレイク継続時間関連で全枠を使って発動するあれの演出途中はブレイクが切れない仕様があって, それを逆手にとって, ブレイク延長したり, 最長ブレイクの45秒となるようにブレイクを狙いに行くときにも適度にアタッカーロールで殴らないといけないなどある程度戦闘して感覚で掴んでいかないと分からない部分が結構あってブレイク周りのシステムをよく作ったものですねぇというお気持ちです. バイオは強い.(確信) ただLRではブレイクゲージはなくなって, 現実ではそんなの見えないでしょう?と言わんばかりに, 波の大きさと色でどんな感じか判断しないといけなくなりましたが...)聖都に沸いてるアダマンをあの時のステータスでなんとか倒そうとして, 召喚獣召喚で強制的に寝転がってくれるのとデス打ちまくって上手く入ってくれるののお祈りしてましたね...(ここらへんで普通にやってると, 聖都から赤い空間に入ったときになんか色々と換金アイテムもらえるとは言えど, 金欠になっているはずで, どうしてもインゴットが欲しかった.)ちっこい亀はこの時のステータスでも割と余裕なんですけどね...(ロングイを余裕で手ですくいあげるタイタンって一体...)ストーリーはそこだけ切り取って後でまとめてゲーム内で見れたらと(そういう場所があったかもしれないっですけど)本当に本当に.(AMPテクノロジー割と好きでしたのに最初しかでてくれないのですよね...悲しみ...)(ブレイズエッジの折り畳み構造としまいかただけでも本当にかっこよくて泣いちゃいますね. モデリングした方天才ではと) 最後のシーンでみんな一瞬死ガイになったのに, 次の瞬間には復活しているの, 割と不思議ではあるのですけど, 13シリーズは人智を超えた神に躍らせれてる感があるので, その一環なのですかね? FF13-2はマルチエンディングというのと, LRに続く終わり方というので割と救いのないエンディング(エンディングの一歩前ではかなりいい感じだったのに, 上げてから落とすのは基本と.)(FF13では敵であったグライフ?っぽいのに最後はホープ君含めて主人公が乗るのがよかったです...)ところで, ホープ君は女装とかしたら絶対に合うと思うのですけど, どうなのでしょうね.(ラストリゾートはかっこいい系の方ですが.) ドラクエジョーカーよろしく敵を仲間にできてしかもFF13からのロールシステムを引き継いでいるので, 各ロールごとに必要とされるモンスターが異なり, これ捕まてずっと使えばええのよのやつがストーリー中はあまりいなかった(ような気がする)のがよかったですね(後半になるにつれて, 育成が大変だけどきっちり育て上げればもうこいつしかいないやろって感じのが出てくるのはもうしょうがないですけどね. チョコボ全般とキチューの優秀さよ...ただ万能のクリスタルをキチューに上げるのは間違ってもやめませう...ちゃんと力のクリスタルをアルカキルティでATBゲージたまるの早い武器(ロムルス&レムスだっけ?)つけてルインガあたり打ちまくって集めて与えませう...最終パラメータが全然違います.(キチューはどっかのお花畑にモーグリ投げて捕まえるかしないといけなくて, 取り直しにはDLCが必要になるので本当に本当に.おまけにキチューの二番手として赤チョコボがいますが攻撃モーション的にキチューの方が早くてね...)というか, 仲間にできるモンスターでチョコボとかキチューよりもずっと強面で強そうな連中がいるのに, こいつらが攻撃面で一番手っていうのも不思議な世界ですよね...かわいいは正義なのか...序盤でlv20まで育てれば十分強いホプリダイのお世話になった方は多いのではないでしょうか...後, こちらもバイオ強い...(やってた年齢的にセラの衣装の刺激が強くてとても水着を着せられなかったのですよね...ノエルの境遇を考えると, なにも言えないのですがうらやましいと. セラも最後にばたんきゅーするので本当になぁ...)メテオジャベリンかっこいいなぁと.ノエル, セラのテーマと疾風とアルカキルティでの戦闘曲が無限に耳に残ってますね.神.後, ルインガとか撃ったときとかに画面に残るような輝き方してるのとか, 雨季では画面が本当に濡れたかのようなエフェクトがついて本当に綺麗だなぁと.ただ死にゆく世界を初めて訪れた時の真っ赤な世界は割とトラウマになってます. あんな世界で本当にカイアスとユールと三人で暮らしていけるのかよと. 劇中でノエルが獲物を仕留めたといってますが, 食えるようなモンスターがあんな世界にいるのですかねというお気持ちです. それとは打って変わって, 新都アカデミアのAF4XXの近未来感あふれるマップが大好きでずっとうろうろしてましたね...(あれってどうやってモデリングしたのでしょうね...下向いても道路があって車がちゃんと動いていたり上は上でなんか飛んでたきがするのですが. 珍しくTHE平和な町であぁーいぃーていう感じでしたね. 大人になったホープ君見れますし. 流石にここまで成長してしまいますと女装は厳しいものがあるような気もしますがいけるのですかね? 今作ではホープ君はプレイアブルではないのが残念ではありますが...) FF13LRはロールの概念は残っているとはいえ, 自分で詳細にロールをカスタマイズできるようになって自由度が上がったのがいいですよね.(ウェアにあらかじめセットされてしまっているアビリティを同じ名前のもっと高レベルのアビリティにできたらよかったのですがそれができないので後半は大半のウェアにセットされている低レベルのアビリティが邪魔になってしまったりするのですよね...前半で入手できるやつでなくとも, 後半で某ショップで購入できるアストラルロードとかは実用性が皆無だったような気もしますが...でかい魔法しかセットされてないとそのウェア単体ではノックアウトまで持っていけないというか演出時間が長くて行動できなかったりなんとか. ダメージ倍率がHP減少時でないと跳ね上がってくれないのでやばくなったらダメ押しで打つ感じなのですかね...?そんなのよりもエレメラ連打したり, アルテミスピアス連打したり, タイミング合わせられるなら, カット性能がかなりいい旋風脚使ったりする方(僕は判定延ばすやつ装備してもあわせられませんでしたはい.だめですね.)がダメージ稼げるのですよね...) なんか色々と状況があれなだけに, ルクセリオもユスナーンも暗く見えてしまうものですが.周回プレイできるのは本当にうれしいものです. FF4のDS以来だったもので(そのFF4も三回まで?だったかな...)そうですね. これも取り上げたいところが山ほどあるのですが, やっぱり特に嬉しかったのが絶滅システムとやってて特に爽快だったのが, ムーブスイープのDODGEとかジャストタイミングなどのアクション要素ですかね. 絶滅はやりすぎると, GP回復手段がエーテル系列しか?なくなってしまってクロノスタシスぶん回しての依頼早回しができなくなってしまうので, 序盤はほどほどにしておいた方がいいのですけど, (ジェノサイドしてぇって人も終局の迷宮?いけば全部狩れるので別に問題ないのですが...) 一週目で苦労させられたような大型の連中を二週目もノーマルでやった場合にはさくさくして紫だわーいっていいながら絶滅させられるのでよきよきなのですよね...HARDやった場合にはパターンとかガードのタイミングを敵に合わせて覚えておかないと簡単に死ぬのであれですが.(イーター系とラストワンメガップルお前だよ!!) イーター系のまるかじりみたいな技, 攻撃してくる前に威嚇的なのでライトニングがひるんでそのまま大ダメージを負うの本当に初見殺しなんですよね...後, こまかいところですが, しっぽ切り落とせたり, 腕を破壊できたりと(こいつに至っては, 氷ついた時のテクスチャなのかな?が入っているのが素晴らしくて, 凍らせた時には本当におぉーってなりましたね.)で、アクション要素ですが, HARDはイモータルガードでもない限り, 大型の敵からの攻撃はジャストガードで防がないとどうしてもダメージが入ってしまって(ヘビーガードに, ガード防御の高い盾使ってない場合にはジャストでもダメージが入りますが. それはそうと, ガード時の音もいいですよね. あれって作ったのか, 実際に金属か何かにものを当ててとった音なのか気になりますよね.), ウィルダネスだとオーディンの魂の白チョコボが回復してくれるのでそれほど脅威ではないのですが, デッドデューンだと回復してくれる相棒がいませんし, マップも広大なので, ダメージをなるべく食らいたくはないのですが(GPで回復はあまりしたくはないですね...時間とめるのに全力で回したいので.)ならば回避系のアビリティでってなると完全に回避できるか, もしくは正面から思いっきり食らうかのどちらかになってしますのでハイリスクハイリターンの緊張感が味わえるというですね...(フィニッシュ回数を増やすやつを二週目の段階で, まだ進化させてない場合には大幅にHPが減っている状態でそのウェアで攻撃うけるなよと言われればまさにそうなのですが, ウェアチェンジが間に合わなかったときで回避に失敗などした場合には5000とか食らうのでとても痛いのですよね...(しかも今回はリスタートではなくて, エスケープという扱いになって時間を1時間無駄にしてしまうのでこれまでとは違って気軽に全滅できないという.))おまけに多段攻撃とかはムーブスイープで回避しても全部回避できないのでまぁはいって感じですが. いやーあと, 反応速度が昔よりも随分下がってしまったもので, ユスナーンの工業地帯周辺に出てくるやつとか, ルクセリオの暗黒街にでてくるやつとかの高速突進が発動してから反応してジャストガードできなくなってて悲しみを覚えましたね.年を取りたくないものです. サボテンダーは狩りまくるもの.(★5品質高いのよ...)(あーそうそう, こちらはCEROがCになっていまして, 間違いなく一部のウェアのせいなのでしょうけれど, ライトニングさんはセラに比べて5000兆倍くらいなんか怖いので, 見ても何とも思いませんでしたねはい.(しかしあれだけのウェアの種類をデザインした方はすごいですね...敵とかフィールドだけでなくてってまぁ切り替えて戦うのがFF13を通してのスタイルなのでそこに付随するものに力を入れるのは当然なのでしょうけど, 水着, フリフリ系, コート系, 日常系, コスプレ用の服とまぁ色んな服についての知見がある方なのでしょうね...本当に頭があがらないです...ナイトメアとかブリザド系がセットされてる魔法系のウェアとかって狙ってデザインしてるものなのですよね...) 他人にでれたシーンなんてありましたっけ...?ホープとスノウにはデレたようなところもありましたけど, 単に優しさの部分であって, 包容力というかそっち系のものではなかったような...)戦闘と言えば, ラピッド系の魔法や物理をジャストで連発するの爽快でしたね...FF12のADBとはまた違う感じなのですけど, フィールド上で斬るとかの行動ができるのは楽しかったですね...さすがに一般市民は斬れませんでしたが(斬れたらZになってしまうんですよね...)高いところから飛び降りた時にライトニングが受け身を取るのもよかったです...ところで, もう5,6年も前なのですよね...早いものですね... ### G系列 神すぎてもう語るのもあれなので一言だけ <ul> <li>GジェネレーションDS</li> クロスオーバーはこうでないと...ライバルルートは神. アムロはシャア以外でおとしませう. 賛否両論あるらしいですが, オフェンスモード2を初めて見た時はおぉーってなりました.(ギャザービートは未プレイですはい.) この作品のドット絵?大好き. ザクでも, 強化費用が半端ないですけど, 二段強化すれば機体性能だけならνガンダムとかにもおいつけます.(なお全体武器はない模様) 惜しむらくは, セーブスロットが三つしかなく, ミスってデータを上書きしてしまうことがあったことと, DS, DSliteみたいにGBAスロットがついてる機種がもう中古でしかないので, 序盤でサイコガンダムMk2作って無双したい場合は3DSではダメなところとかですね.(強化イベントわかりにくいんじゃい! ヒイロやカミーユが強化されないままで, カミーユはZではなくてνガンダムに乗せてた人は結構多かったのではないでしょうか...) 後, 序盤は普通にやってれば, 後世の方の高性能な機体ではなくて, ザクとか(ここもいいところなのですが, ジオン視点, しかもシーマ視点というのも素晴らしいですね.)ドムとか(ドム バインニヒツ/グロウスバイルとかこんな機体いるのか...と当時はほへーと思いながらやってましたね...)(途中でエルメスが大量に増えてなんだこれって言いながらプレイできます.) 後半になるにつれて王道展開になっていって, ハマーンを仲間にできたり(なんと綺麗なハマーンをみることができます. 可愛い(どうしてこんなにねじれてしまったの...)), CCAシャアをそのハマーンで連れ戻せたりと展開考えた人神ではと. <li>ギレンの野望 ジオンの系譜</li> 神. もうこれにつきますね. プロトタイプMk2はいいぞ(ライフルの音が). 当たれば強いライフルに, 紙装甲(耐久はガンキャノンにすら劣ります...紙といえばXのコルレルでしたっけ...そんなのもいましたね...) デンドロでミサイルパーティしてもいいし, ビグザム/アプサラスで焼野原にしてもいいし, 普通に物量で, アルビオン+ネモとかマラサイとか裏取引その他でごりおしてもいいしと素晴らしいです. 61式でもザクは普通に落とせますはい. 個人的には, 武器を切り替えながら段々と打ち切っていく演出大好きなのですが, どうもこれを嫌いな人がたくさん要るっぽくて, アクシズの脅威Vとかでは段々と打ち切っていくスタイルに変更されてしまって, 戦闘が寂しくなってしまったのはなぁと...後, 専用機の限界の隠し上昇値あるの, しばらくしらなくて, シャアザク150%しかでないのか...170でるⅡSに乗らせて方がいいじゃんっていうのは大変な誤りでしたね...(ザクなのにシャアザクは運動性が40くらいあってガンダムが36あたりだったので耐久面さえどうにかなればごり押せる.)(後半になるにつれてビグロとかブラウブロとかエルメスとか, ガンダムの機動性と耐久だけでは厳しくなる局面が多くなってきて, まさに原作通りだなーと. G3やアレックス(こちらは生殺ししないと一部で出せませんが)までが長いのなんの...)(ノイエにはジム改やパワード(こっちは命中もコスパも悪いネスよね...))(キュベレイはトリアーエズで囲んで疲労&エネルギー切れにしてタコ殴り)(侵入はいいぞ) <li>GジェネレーションF + F.IF</li> もうね. これですよ. 後のGジェネは絵は物凄くきれいになったのですが, どうにもこれを超えられてないような気もします...これは多分僕がドット絵が好きだからという側面もあるのでしょうけど. ザンスパインを初めて見て, ティンクルビットの演出が確か記憶では他のオールレンジ系と異なって斜めからビームが入った気がしまして, いいなぁーと.(V2ABのマップ兵器だらけのあれはさすがにかわいそうだとはおもいました...) カットインがですね素晴らしいし, 戦艦が今のCGにはないもの?(思い出補正があるのとは別になんかいいのです...)があって素晴らしいのです...超強気のラフレシアには母艦を沈められないように気を付けましょう. 修理システムなんてないので落とされたらそのままロストですはい.(まぁそもそも部隊のキャラを落とされるのが論外なところもあるのですが, 10%命中で序盤は戦艦とかからの砲撃が直撃するとそのままお陀仏がたまによくある()のであれですね. トルネードガンダムが配備されるようになったのはなんでなのでしょうね. 初代の, セイバーフィッシュ+トリアーエズ部隊というのも大好きだったのですが...セイバーフィッシュの対艦ミサイルは射程5ですが5000あって素晴らしいですよ. 初代は100で割っているので50ですが(49だったかな...?) ところでアルトロンの腕伸びすぎでは) ガーダーがどんどん化け物になっていくのもいいですよね, 攻撃当たりませんが.(クルージングビットェ...ビットとはいったいうごご. スタークマシンガンとスプラッシュビームシャワーは以外と当たります. ファイナルギガンティックなんかは一般兵の戦艦にも50%とかで目も当てられませんが...(ビームシャワーは80%とか行く.)) マップでACEにするとその機体を作れるようになるシステムが大好き過ぎてずっとACEにしていたのにどうして後の作品ではなくなってしまったのですかね...後, F90の曲や鋼鉄の7人の曲, センチネルの曲(センチネルはエンディングのムービーも素晴らしいですが)とか当時(確か幼稚園)聞いてから幼いながらずっと頭にのこてましたね...いやーしかしスペシャルボックスで親がかってましたがもう20年前のゲームですか...なんともはやいものです... 特定のキャラを乗せた時に演出が変わるシステムももうないんですよね...あぁなんと悲しい...ガンダムにアムロを乗せた時にビームサーベルで画面いっぱいに突撃してくるの好きだったのですが...サイコロガンダムとかハロは雰囲気ブレイカーすぎますねはい.(ところでサイコロの1と6以外からは何が出るのでしょう...ガチャポンウォーズやってないので分からないのですが...)ちなみに紫色のHi-νガンダムが見れます. いいですね... <li>連ザの1と2</li> 1はさておき, 2はみんなと仲良くなれる!(3馬鹿とも仲良くなれる!クルーゼとも. )そして仲良くなっていないと, 最後の方で, 敵の方にばっかり援軍が来てくたばっちゃう. <li>機動戦士ガンダム MS戦線0079(wii)</li> 高速移動するケンプファーに周りからバズーカを打たれながら静止射撃のスナイパーライフルでヘッドショット決められるようになるまでがチュートリアル.頑張りましょうね.(フルアーマーは動き遅いし, ジオンはその前の, MS一機でビックトレーやら護衛機相手に無双するミッションがあるのでまぁ...)陸戦型ガンダムのありがたみがわかるガンダムもの.ジムスナイパーでアプサラスⅡと対峙させられたり, ザクでアレックス撃墜させられたりして楽しいですね! アプサラスの主砲はまともに食らうと一撃でHPの半分をごっそりもっていかれたりしますねはい. アレックスの方はビームライフルに一度当たっちゃって連射されるとすぐにHPが吹き飛ぶのでまぁはい.ザクだもんね. 後は, BD1でイフ改とタイマンするシナリオがあるのですが, EXAM発動しても硬い硬いのでつらかったですね...防御してカウンター狙わないと相手の攻撃が痛すぎて...(おまけに相手もカウンター狙ってきますし) </ul> ### 単発シリーズ なんで流行らなかったんでしょうねっていうの. いいものを作っても売れるとは限らないとはまさに. <ul> <li>くりきん ナノアイランドストーリー</li> ワルスタリアがLv81になると攻撃をほとんどしなくなる現象がなければなぁ...大型の菌がめっちゃつよいですはい. 当時はクリスターリアかっこいい!!ってなってメグミから奪うのに必死でしたねはい.(メタルドットもかっこいいぞ. 性能はさておき.) クリスターリア+メタルドットかっこいいーーーって使っていると, キングゾーリーが本当に天敵なので泣く泣くバラサイトいれるかなどしましょう. Gの菌はこわい. 後, 菌可愛い!デザインした人天才(もちろんこのゲームシステムを考案して実装した方も本当に天才ですが) キンオブゴット戦, エンディングに流れる曲も神なので, ぜひ. (メグミは良い性格ですよ...) <li>オトダマスター</li> 最近になって現実世界との融合だとか騒いでる連中がいるみたいですが個人的にはここらへんとガウストダイバーズとかあたりからではないかと思うのです...(それよりももっと前からあったかもしれませんが...) 昔は任意の菌を獲得できる音を発してくれるサイトがあったのですが, 今はもうないのですよね...100回あの言葉を叫ばないといけないのは本当に本当に...あいつらに勝てないって方はイルカのオトダマを入れましょう. 抹殺してくれます. ミニゲームのロボットが全然言った通りに動かなかったのはおそらくハードとしてのDSのマイクの限界だったのでしょうね...あるいは, 中の仕組みが特定の周波数成分の検出でオトダマの出現を判断していたのであれば, これと同じものをミニゲームにも使っているはずで,声の低かった僕の声では反応しなかったのかもしれませんが...三重奏とかよかったですね...音楽の多少の知識はこれで叩き込んだ記憶があります...余談ですが, ラスダン前に流れているあの曲作った方は天才では...? <li>超操縦メカMG</li> メカ!変形!武器の打ち方が多彩!核!トンファー怖い!結局ライオン(途中ゴリラ)!素晴らしい!入力するのは今日の日付ですからね, ダブルシールドつけてレッツ町破壊. ちゃんと100%/全機種コンプリートまでもっていきましたよはい. 当時の僕としては画期的すぎて, もう発想して実装してくれた方には感謝しかないですよ...(この頃の僕は, 武器をそれこそバレル長さ, 火薬, 仕組みとか色々とすべてのカスタマイズをプレイヤー側に投げて, セレンディピティーを楽しむような可能な限りのすべてをプレイヤーの自由にするゲーム(ローグライクを全範囲に広げたような感じ)がどこかにないものかと,カスタムロボとかに出しながら探していまして, 結局そんなゲームはなかったのですけど, それでもいろんなメカが出てきて, 色んな操縦法のあるこのゲームはやっぱりそのころ(小3か4だったかな...)の僕にはカリティカルヒットしましたねはい.)一時漫画家するみたいな流れがありましたのにそちらもなんか気が付いたら消えてて, 一体どうしてしまったのでしょうねという感じです.一応プレイの感想みたいなのとしましては, 敵がこちらの攻撃に反応してガードするまでにラグがありまして, しかも, 敵は連続ガードする際に微妙に隙ができまして, そのタイミングとこちらの攻撃のタイミングを合わせれば(かなり小刻みに武器を振らなければいけませんが)VHだろうと, 敵のガードを抜いて, オレンジの光のでる攻撃を通せますね. 一度相手を浮かせればこちらのもので, 一方的に殴ったり斬ったりできます. <s>一方的に殴られる痛さと怖さを教えてやろうか!!</s>このコツを覚えてしまえばVHでも割とすぐにクリアできますのではい.(射撃系のメカはガードなんか知るかっていってスペクトル光線でも銃弾でも打ちまくればいいです. 振動機もりもりのライオンプレッシャーなんかは防御してもありえん超火力がでるので人形神だろうとごり押せば勝てます. 後, トンファー君はリーチこそ短いですが一度射撃モードで画面端に追いつめてさえしまえば無限にトンファーぶんぶんでなんとでもなります.)(近接系でVH攻略するときに面倒なのは飛行機系の敵だったり.) ところで超兵器ヴォルテクスって響き, 中二心にはもうあぁぁぁぁあぁってなったのですけどプレイした皆さんはどうでしょうか...(頑張ればガウスでも人形王程度なら意外となんとでもなります. さすがに人形神のVHは前座が長くて, 耐久が持ちそうになかったのできつそうでしたが...多分ガウロスなら全方向ロングジャンプ機能がついているので, ふわふわ浮いてるあいつにも追いつけるのでいけるかと)プレイした方ならわかると思いますが,ダイゼスターのロケットパンチを二本同時発射してどこまで浮けるのかを試しまくったのではないでしょうか...? ほかにも, 衝突してくる車にうまく攻撃を合わせてほれほれーって言いながらくるくる回してぶっこわしたりなんかやっていたのではないでしょうか...(流石にVHだと銀輪車装備してガウロスとかで真面目にやらないとつらい気もしますが, NとかHなら, 会場の観客席をなんとかコース上にやって, 核ミサイルでほかの車をぶっ壊したりしていちばーんとかやってた方もいらっしゃるのではないでしょうか) <li>メテオス</li> こちらはなんか知らないうちにオンラインで後続作品がでていて, あらまそうでしたかって感じでしたが一応ここに. 小2の時にドはまりしてたゲームで, なんといってもOPがいいですね. (※パズルゲームです)とにかくDSの最初期のゲームのくせして素晴らしい画質です.(ジオライト星人含めてキャラがいちいち可愛いのですよね...メテオ打ち上げた時にも喜んでますし.(死亡したときは一部恐ろしい死に方をするの)) メタモアークの出撃シーンの重厚さが素晴らしいです...本来の加速の仕方というのを理解されている描き方ですよ..いきなりそんな高速にはなったりしませんよ...だんだんと連続的に高速になっていくんです...個人的にはスタートリップモードのマルチエンディングが好きで, 中でも王道のメシアが好きでしたね...エンディングの時に流れる曲も素晴らしいものです...(エンディングしながら打ち上げ続けますが...)以下, 目標打ち上げ数ごとにおすすめの星紹介です. <br>1000個まで: どこでもいいけどここまでなら, メガドーム, ヘブンズドア, グラビトールとかがずば抜けて楽かと. 1000個から先を目指す: メックス ギガントガッシュなど, メテオがどれだけあろうと一定のラインまでは打ちあがる星やビュウブームの, 加速中は落下速度が落ちる星で上にメテオが積み重なるスピードが速いほど, 逆に有利になるもの(全打ち上げできていれば) ブビット, ウドーなどういてから一定時間は猶予のあるもの 9999個(カンスト): 全ライン連結してのフォルテの縦打ち上げ 後は反応速度の限界で, ここと後どっか(メックスかギガントガッシュかブビットだったきがする)で10000以上打ち上げましたけどそれ以外はできませんでした...今時間をかけて極めればもっといけるのでしょうけど, 当時は二つの星でやるのが限界でしたね...(ジオライトとかで9999までいけたりってするんですか...?) 星の見た目で好きなところは, 自分はとにかく雲が大好きでしたのでヒュージィの見た目が好きでしたね...ここの連中はいつも大きいことばかり考えているらしいですが...(ヒュージィのテーマも好きでしたし...滅亡直前になるとなんか怖くなりますが...)ア-ニマでしたっけ...あそこの異星人めっちゃ怖かったのですよね...設定も, 星に来たやつを捕食するとか何とかで...やられた時とかメテオの打ち上げ時とかがとにかく怖かった記憶があります. </ul> ### ポケモン <ul> <li>緑</li> DSのをいくつかやった後になぜかはまってしまった...ミュウツーのいる洞窟のラッキーのHPやばくないですか... <li>RS/E</li> 何も言うことはない...神... ひみつきちで遊びまくりましたねはい. <li>DP/P</li> 探検セット!探検セット!小学生のころは友人と無限に地下に潜ってあそんでましたね... <li>BW</li> ほらシード値検索かけて, メタモンメタモンしにいくんだよ. ここから橋渡るときとか街の演出がものすごいこりだして橋を一日中渡っては降りたり町で住人をひっかけてあそんだりしてましたねはい. <li>ORAS</li> 時代が一気にとんで3DSになりますが(HGSS, BW2とかやってないのですよね...悲しみ...), もうね, 神. ガリョウテンセイかっこいい-----(これ英語ですとDragon Ascentてますますかっこいいというね.)(中二病発症期)命の玉のっけてうつのーーーー. ゼクロムの色違いがなぜか1000回ほどででてラッキーって言ってマスターボール投げたのはいい思い出. 最大で1/512くらいまでいけるんでしたっけ...光るお守りまでやりこんでないですねさすがに...そういえばガブリアスのメガシンカのためのひみつきちまわりしてないですね...ハピナス道場なつかしい... ところでリゾートには一周ぐるぐる無限に回っていられるルート(一部泥地帯があってちょっとやらしいですが)と育てやがあってポケセンには潜在能力はかってくれる人がいて, ってもう本当に育成してくれって言ってる感が全開であははって感じでしたね(ここで受験が来た) <li>ポケモンレンジャー</li> ぐるぐるぐるぐる. 最後のアジトでパネルの点灯パターンを覚えられなくて詰んでたのはいい思い出(小3?) <li>時の探検隊</li> よきよきです. 本当に大泣きしました.あぁジュプトルゥゥ...色違いのセレビィが仲間になるのも珍しかったですね...(前作のきよらかな森の98階でプテラだがなんだがに高速移動中のヤンヤンマぬっころされたのは今でも忘れねぇからなこのやろふっかつのたねがなかったんだよもう) まぼろしの大地からの曲すべてとけっせんディアルガは神.特にけっせんディアルガはまじもんの名曲なので聞いてない方は今すぐ5000兆回聞きましょう..バシュバシュゴォォォォォ(バトルへ) おうごんのたねがゲットできるクエストのコードはネットにたくさんおちてますねはい. </ul> ### 他 <ul> <li>SO3</li> ムービーが神. 戦艦アクアエリーの勇姿よ...設定がやたらと作りこまれててて, クリエイション砲がロマンすぎます...後, 戦闘が楽しい!!!!!プルートホーンプルートホーンプルryとか僕がやってたのはバグの多少少ないといわれるDC版の方でしてメテオが弱体して, 詠唱が長くなってましたのと, 基本的に近距離が苦手なものでマリアばかり使ってましたね...おしっぱなしでビームでるやつが楽しかったですはい. それ以外でもヴァーチカルエアレイド?がみてて楽しかったです.フェイト君は横によけてバババって連撃する技が楽しかった気がします.(名前忘れた. リフレクトストライクでしたっけ)何気に彼はキラなのですよね...(フェーズガンとかもらったらただではすまないみたいなことが解説かなんかに書いてあった気がしますけど主人公たちはそれを受けても割と兵器であらまって感じでしたね...) <li>GAシリーズ</li> OPと曲が全部神なので是非見ましょう. Angelic Symphonyは初めて聞いた時には鳥肌ものでしたねはい. 皇国軍の意地をみせてやる...(実際ザーフ級やハーメル級の長距離ミサイルは威力が頭おかしい...このミサイル, エルシオールにも二門ほどつまれてた気がしますがもっと頑張って!(<s>儀礼艦に無茶言うな</s>)) しかしこのゲーム, 本当にエルシオールのHP80000もあるのかってくらい紙耐久なのですよね...レグズジオ級でしたっけ, あいつに張り付かれるとあっという間に40000とかになってあれもう落ちそうなのですがってなることが多かったので...ほかにもギアゲルンの大型ビームとか喰らうと一撃で1万ふきとぶのでシールドとは...って感じですね(まぁ張り付かせた時点で負けみたいなところがありますけどね...スパード級の速度ならエルシオールに追いつけるので適当に護衛命令を出しておきましょう.)パイロットを取り込んだ後のダークエンジェルの機体性能には驚きましたけど戦ってみると意外とそんなものでもないのですよね...(ラッキースターの機体性能が優秀すぎるんですよね...かたいはやいつよいと) シャープシューターかっこいいだけに, 狙撃中にぼかーんするのつらいのですよね...あの長距離砲, 回転して後ろにも打てたりしなかったのでしょうか...紋章機のレーザーファランクスは普通に後ろにも打てて追尾(余談ですけど, ファランクスが乱れてる戦場を止めて, 遠くから見るとものすごくきれいですよね...レーザーのくせになぜ曲がるってそりゃロストテクノロジーだからでしょう...やぼなことを突っ込んじゃいけませんで...)本当に紋章機のデザイナーさんは神だと思います...一見ごちゃごちゃしてそうに見えてもちゃんと全体のフォルムは綺麗にまとまって,しかも機体ごとの特性をその機体の外観にきっちり反映するのですから...なんだかんだいってもホーリーブラッドが一番すきですはい.(7番目の紋章機に酷似しているような気がしますけど基礎フレームのデータはこれをもとに組んだのでしょうか...)フォトンダイバーの溜めの時に何かが高速で回転してるような音が素晴らしいです...やっぱり突撃しないと.(これも余談ですがこういう思想のために, SRW α3のハイペリオンのフィニッシュ演出の方が好きですはい.) <li>TOA</li> ジェイドとシンクが好きです.(直球)(アニスはロと言えばロの人なのですがちょっと性格が...ね...) キャラとして. 大佐の方は大佐の方でおぼっちゃまの時のルークとの絡みの受け答えが笑えるのが多くてやってて楽しかったですね...(フォニムを放置しない!! )生かされたから…スコアなんて物がなければボクは愚かしい生を受けずにすんだってあぁ...まさに現代よって感じがして大変すばらしいですね.アカシック...トーメント!!!この叫びいいですね...なんといってもこのシリーズはバトルが素晴らしくってFOFシステムがよかったですね...あと, フリーランシステムも.僕はコンボを考えるのがそんなに得意ではなかったので, 仲間の援護を受けても30連くらいが限界でしたね...ニコ動とかで一人で50コンボ以上だしてる人を見ると本当に頭があがらないです...やってた頃はこれも中二病を発症していた時期なので, 外した時の隙がとても大きい飛燕瞬連斬とそのFOF変化である斬魔飛影斬が大好きでした...教官の攻撃力たかすぎませんか...アッシュが死んじゃったようわーんでしたね(これはアニメの方で先にみてしまってえぇ...ってなりました) 三番目の戦闘の曲とアッシュとの戦闘の時の曲が大好きですはい. <li>グランツーリスモ</li> いうことなし. 神. Moon over the castleは神. 1が一番ドリフト走行しやすかったです...僕はチューニングがあまり得意ではなかったので...ところで, 魔改造しすぎて1000馬力とかにしてスタート時にタイヤが空回りしてしまってスピードが全然上がらなかったりとかはよくあったのではないでしょうか...? <li>チョロQ3</li> ビッグタイヤのでかさにビックリ. コースで飛んだり跳ねたり面白い.スピンするときはあっという間なので注意. おばけがついてくる... <li>カービィのエアライド</li> レジェンド. メタナイトの翼の持久力ってすごくないですか... <li>SRW系列</li> これ語るとFF以上に長くなりそうなので止めます. いわずとも察してくれ...プレイ経験は第二,三次(コンプリート版), 第四次S, EX(SFC,PS), F, F完, OG(GBA), OG2(GBA), J, W(ちゃんと10周以上しましたよ...), α1,2,3, Z,Z3後半、THE LORD OF ELEMENTAL, リンクバトラーですね...バニシングする前の4SのガンダムXのカラーの銀色のヒュッケバインが大好きですはい.ただ, バランス云々だったり, 戦闘スキップできなかったりで, あれではありますが, ドット絵がお気に入りなのと, 曲がいいのでFが結構好きだったりします. </ul> ### フリーゲーム関連 いやー懐かしいですねーってものから今も続いてるものまで <ul> <li>Almagest overture</li> イリアシオンかっこいい!!(高いけど)機動スコルが優秀すぎますね...ドット絵秀逸すぎでは...ところでメフィストフェレスってなんなんでしょうね...完璧超人本当に完璧...ところで続編いつ出るのでしょう... <li>Ultimate Stage</li> かする快感を教えてくれたゲーム. チチチチチチチチt.ボスが豆腐すぎて逆に面白い...敵のデザインがかっこいいのです...(win10では動きません. 2000か98かXPあたりで動かしましょう.) <li>Another Zero</li> シールド制っていうのがというのが当時の僕には目新しかったのでよかったですね...とにかくデザインかっこよかったです...一面の曲いいですよ!!(win10では動きません. 2000か98かXPあたりで動かしましょう.) <li>R.O.Z.</li> シェンレット可愛い!!!というのと, 時間の流れをゆっくり(処理が早くなっているのだろうけど...)にして, 必殺技うったり, 速すぎる敵を遅くして仕留めたり, とするゲーム. 弾数があるのが特徴的で打ちっぱなしにしているとレールガンの弾数がすぐに切れてしまう...追尾エネルギー弾おもしれーっていってずっと使ってました.(レーザーの方が殲滅力が高い気がしますが.) こまったらスプレッドミサイル. <li>Elona</li> 本当にはまるので時間のない方は手を出さない方が賢明かと... <li>ヴァーレントゥーガと拡張シナリオ</li> 時間が消えていくぅ...スキル開発時にもプレイ時にも...強化して殴るもしくは物量で囲んでタコ殴りにすれば大体勝てる...きのこたけのこ戦争if, 祖国と銃, 光の目, むなしい努力, ナチガリア戦記, 最近拡張シナリオ増えまくってますけれど, あぁ凄いなぁって感じですね...(他にも戦艦のドットが素晴らしくて, 一部の続きが気になる神々の黄昏や, 百合最高!!の光と闇の狭間でとか, あぁ...良いって感じですね...)ところで, ヴァーレンの詰めの中にせっかくギャラクシーエンジェルmoonlit loversの最終面を模したものが入っているので紋章機全部作ってやろうと思っていきこんでいた(これも受験が来てそれどころではなくなってしまってのですが...)時期がありまして, その時にスキル関連を見ていた時に思ったのですが, yorozuって何をするものなのでしょうね...どこにも書いてなくてこれ不明なのですけど... 後, これは小学生とか幼稚園の方にいうことなのでしょうけど, プログラミングやり亭ってときに, 割とヴァーレンから始めるのはありなような気がするのです...少なくとも変数とか(<s>面倒になるからなるべくつかわないでとかのお気持ちはどうせ中学とか, もしくは開発中にわかると思うので最初から全否定して入るのもあれなきが しますが, </s>)継承(あくまで機能としてだけ)とか引数(next_prとかに指定するやつ)とかに触れられるので...小学生とかならscriptで強さをいじれるんだよっていえば多分好きな子は即座にいじりだすのではないでしょうか...ツクールは初めに入っているゲームが少しお粗末...?な気がしましたのと, 割と色々と決めることが多くて少し難易度が高めなのかな...と(こちらもオリシナ作ろうとして独自のシステムを作ろうとしますとかなり大変そうですが, スキル足したり, キャラを足したりするくらいならwikiの講座を見れば割とすぐにできるようになりますので...) というわけで興味のある小学生がこれを見る機会があれば試しにどうぞ...ただし相応の時間が(楽しいながらも)持っていかれることにはご注意ください. <li>Seraphic Blue</li> これ実はまだ最後までやってないんですよね...ただ, 本当にフリーか?ってほどに世界観, 戦闘システム(FOF, マテリア, FF10的なの), ストーリーが作りこまれてて, ツクール2000のスクリプト機能をフルに使っているゲームですね...作者が強強すぎます...敵の連中のデザインがすごいですね...なんかもう本当にこの世のものならざるものって感じで凄いです... <details> <summary>なんかいろいろ</summary> 2020/2/27 追記 DC版一週目終 ジークベルトェ...元凶すぎる...まぁ必然. 自分はまだ20年しか生きていませんがその中で感じてきた人の光の部分と闇の部分が如実に書かれているなぁと思いました.ツクール2000の機能の面影はほとんどなく, スクリプト機能をフルに使って作られていて一枚絵や疑似アニメーションなども独特の世界観を構成していて凄い作りこみだなぁと圧倒されました.量産型ソシャゲに飽き飽きしてきたり, ハッピーエンドで終わるRPGに飽き飽きしましたら是非ともやって見てくださいというところですが, 何分かなり人を選ぶゲーム(中々にやばい表現があったり, 抽象的な話が続いたりなど, それなりに年齢を重ねないと理解しづらい部分がありますので10代前半では楽しめないものかと思います.しかし, 商用の利益を生まないといけないが故に大衆受けするものを作らないといけなくて, 一様化するゲームシステムや物語に比して, かなり特異なものとなっており, 大量の初見殺しや, つかみのはずの序盤は伏線バリバリのプレイしている側を置いてけぼりにする上の鬱ストーリー, 特徴的なバトルシステム(TOAのFOF, FF10のバトル, FF7のマテリア (つなげるとよい効果が出るとかはありませんが)とかに慣れている方は特に困らないとは思いますが.サプリメントシステムは知らないと詰んでしまいますね.))な上に時間をかなり持っていかれるので(50時間は必要)まさにフリーゲームならではのゲームだなぁと思いました. リアルとは言えど, 割と話がダークで重いので合わない人は本当に合わないと思います.(話の根幹が人の割と直視できない部分でどろっどろしてる上に, ハッピーエンドなどないので. 救い...ねぇ) まぁなんというか, FF13-1のタイプのゲームが好きなら, ストーリーがいけるなら, はまりやすいのではないでしょうか. やーしかし, almagestの敗北時や ミストルティン破壊エンドの時に使われた曲やVTのムクガイヤ, アルティマイト戦に使われていた曲, elonaの拠点に使われていた曲があったりと, この時期フリーゲームの黄金期で重なっていたのか, 使われている曲がかぶっているのですね... 他にも良き良きに思うのが, 2004年とまぁ問題になってきているとはいえど今ほどには広域的に(多分)認知されて問題視されていなかった, いじめ, 孤独死, 安楽死, 自殺周りを取り巻く感情あたりにも焦点を当てていたり話の根幹にもってきたりしているところで, ええなぁ...しかし表現の仕方が闇すぎてフリーゲームでないとできないだろうなぁという感じですがそれでもよくぞ表現してくれましたというお気持ちです. いずれにせよ, 50時間を消費してでも最後のエンディングをそのストーリーをかみしめて共に見る時の感動となんだかなぁという気持ちは, 私はこのゲームでしか得られなかったので是非とも人生に一度はやってみてほしいゲームですね... </details> <li>Type ore</li> 改造して戦うシューティング. シューティングと言っても毛色が他のシューティングとは違っていてよきよきです <li>らんだむダンジョン</li> 宝箱を開けるのが気持ちよくてそれでがんがん時間が消えていく...中毒性高し. <li>シルフェイド幻想譚</li> このゲームの作者のゲーム全般に言えるのですがエンディングが泣ける...そして意外性をもってくるのが大変うまい方で後述の片道勇者をプレイしたときもネムリのエンディングで泣いてしまいましたね...曲と文章と, 世界観だけで人を泣かせられるってすごいです...これもツクール2000なのですが, 中身見たところ, 殆どスクリプトの機能で書かれていて, 作者の熱がものすごい感じられましたね... 余談ですが, この方の作っていらっしゃるウディタ, ものすごく良いので, ゲーム作ってみ亭って小学生や中学生(中学生になってその道に行くことを決めているのであれば今の時代ならもうunityやueに手をだした方がいい気もしますが...)がいれば是非ともはじめてみてはどうでしょうか...? ところで, ウリユに, ばかには見えない服を着せようとするのはお約束. <li>片道勇者</li> 悲しい...とにかく悲しい...ヴァルキウスつよつよし.ところでどうあがいても武器の破壊は食い止められないのですよね...いい武器はエンチャントいいの付けてここぞというとき以外は使わないようにして普段使いはそこらの剣ってかんじですかね...これ割と殴ったもん勝ち, 殴られたら負け, みたいなバランスになっていくので, まだ戦士職以外でクリアしてないのですよね...視界が悪い時の恐怖は相当. セーブクリスタルをちゃんともっていきませう... <li>撃破伝</li> 漢字ゲーム. 小学校低学年の時にはまっていました. 正月には山の方の祖父の家でいらないカレンダーの裏にこれに出てくる漢字を書きまくっていたの懐かしい...大体これで漢字を覚えましたね...海の面のでかいあいつって仲間にできるんですよ... <li>シフトアップネットの面々</li> 神. ゲットーロボ, サモン関連は無限にやってましたね... <li>MECHA Ritz</li> 神. 機体01(だったかな)のスピード感が素晴らしいのです... <li>G-type</li> 画面切り替えてバイドみたいなやつが映ったときのモード全然クリアできないですはい. <li>D-stars</li> 撃ち返し有りの場合の後半面がつらいのです... <li>超連射68k</li> 先生!二週目の4面に行くのが限界です! <li>パール小隊</li> 自分にとってはこれがすべての始まりでした. 曲が素晴らしくって, また, 宇宙の背景がとてもきれいでこれがきっかけで宇宙好きになったまでありますね. <li>ありふれたホシの終末期</li> よきよき. おまけの画像だったかな...素晴らしい... シューティングゲームで他人と割と本気で競える環境が整っていて一時, どうすればそんなに点数出せるのかと躍起になってましたね. ガチャガチャ. <li>REVOLGEAR II Ver.D Revision+EX</li> よきよき. 貫通レーザー(範囲広くない方)の威力は素晴らしい...どうしてもクリアできないって場合は紫のやつ使ってボム連打してればなんとでもなります... <li>金のなる木</li> 発想がすごいなぁっておもってそのままどはまりしたゲーム. 中毒性が高いのでこれおもやるときは注意. 宝箱こいこい... <li>Blue wish Resurrection</li> 可愛い女の子とふわふわの可愛いの使えるよ. 最後のやつにボム連打が効かない... <li>Galaxy Frontier</li> ニュークリアがものすごく爽快. スコアのためにもがんがん使っていく感じ <li>XX:e</li> おかしい...弾幕でもないのになんだろうこの高難易度...R-type(R-typeと言えばTacticsシリーズの新作はまだですか?)と同じような性格の作者が作ったかのようなゲーム? でもインビンシブルを用意してくれるあたり, 優しいかもしれない. 主人公機のバリエーション機のボスのパターン分析の進捗ががが...敵は近くでソード突き刺すなり, レーザー連打するなりでスコアがっぽり. やっぱりこういう近くでぬっころすとスコア増えるの楽しいです.(未クリア並感) <li>Dust514</li> 人生での初FPSにして, これ以外のFPSができない病にかかってしまった...続編の方, いつになったらPS4ででるんですかね...装甲ガン積みのヘビーマシンガンからのアサルトレールライフルからの, 最終的に速度とスロットを取って, ミンマターの三点バーストのコンバットライフル/マスドライバー, サイドにブリーチスクランブラーピストル/サブマシンガンに落ち着きましたが, 三点バーストを連発して頭に入れた時の面白いように削れる快感が全く忘れられないですね...或いはリモート爆弾で吹っ飛ばすのが楽しすぎますね...やっぱり戦いは義体で行うべきですよ. 多少弾が当たったくらいですぐに死んでしまうのはあまりにもつまらないです(個人の感想です) </ul> 他にも紹介したいのが山ほどあるのですけど時間的な都合でカットせざるおえない悲しみ... </details> ## だめでした 期日までに、書き終えることが、できませんでした!!!ごめんなさいm( _ _ )m 明日はTsuzu君です!どんな記事が投下されるのか楽しみですね 2021/4/10 mikanOS本の方が5000兆倍詳しく書かれているはずなのでそっちを見よう!