3ー8日目 - naskをLinuxで使えるようにする 2016/03/07-2016/03/15

naskをLinuxで使えるようにする

naskは河合さん(OS自作入門の作者)が書いた独自のアセンブラです。ほとんどNASMと同じだけどもっと効率的にバイナリが吐けるとのこと。 それはそれとして、こいつにosask用のバイナリを吐いてもらわないと話が始まらないわけで…。

naskをがんばってLinuxでビルドしていく

naskを使えないとosaskに載っているアセンブラコードはビルドできない。しかしながらnaskはバイナリしか配布されておらず、ソースコード はほとんどメンテされていない。 osask: レポジトリ概要 とりあえず構造を 把握していこう

大まかには

20GOの内容

ツール名 機能 依存先
nask 独自アセンブラ: nasファイルからオブジェクトファイルへの変換を行う (.nas -> .o)
メイン関数は 20GO/toolstdc/nask.c 以下にある
依存先は 20GO/nasklib 20GO/golib
go_lib, nasklib
aska 独自アセンブラ(.ask -> .asm)
20GOの段階では開発されていない
なし(C++)
naskcnv0 アセンブラの下請け(.asm -> .nas) 調査中
gas2nask GNU Assemblerからnaskに変換 調査中
go_lib libc相当のライブラリ(システムやOSに依存しない) なし
golibc go_libと同じものと思われる(削除したい) 調査中
drv_osa 役割がよくわからない なし
drv_stdc 役割がよくわからない なし
drv_w32 役割がよくわからない なし
w32clibc Windowsのみに依存するライブラリ?初期はそのような必要性があったのだろうか? なし
akusA askaの逆アセンブラを行う、20GOの段階では開発されていない 調査中
bim2g01 .g01用リンカ、20GOの段階では開発されていない 調査中
bim2hrb .hrb用リンカ、20GOの段階では開発されていない 調査中
obj2bim OSASK/.hrb/.g01共用リンカ、drv_osaに格納されてる drv_osa
bin2obj ファイルの.obj化(char配列化)、20GOの段階では開発されていない 調査中
bin2ucc ファイルのCソース化(char配列化)、20GOの段階では開発されていない 調査中
cpy aska形式のcp相当コマンド、20GOの段階では開発されていない 調査中
cpyc C言語で書き直されたcp相当コマンド、20GOの段階では開発されていない 調査中
doscmd DOSからmakeなどのコマンド実行、20GOの段階では開発されていない 調査中
funcs 分割コンパイルのためのソースコードを格納している
しかし、実際はこのような方式を取るべきではなく、ライブラリを作るべきである。
なし
g01libc0 ブートストラップ的コード、なぜこのような形式なのかよくわからない。20GOの段階では開発されていない。 なし
g01libc1 guigui01.hにあるソースの実装、20GOの段階では開発されていない。 なし
gg00libc 「guigui00仕様」に依存するライブラリ、20GOの段階では開発されていない。 調査中
golib00 「golib00を.g01化したもの」とある、不明、20GOの段階では開発されていない。 調査中
hrblib0a はりぼてOSの将来機能用ソース・重要度低し、20GOの段階では開発されていない。 調査中
imgtol ディスクイメージ操作用ツール、20GOの段階では開発されていない。 調査中
include 主にgolibのヘッダファイル なし
makefont フォント構築用のツール、20GOの段階では開発されていない。 調査中
mtek2org tek圧縮の解除ツール、20GOの段階では開発されていない。 調査中
omake addcrは各々の LF (\012) の前、すなわち入力の各行末に CR (\015) を挿入します。 改行コードのない最終行の行末には CR を挿入しません。 delcr は入力の各行末に CR があれば、その CR を取り除きます。 改行コードのない最終行の行末にある CR は取り除きません。 unix2dos や dos2unix のようなプログラムの中には長い行や空行(nulls)に対して問題を起すものもあります。addcr と delcr は長い行や空行で問題を起しません。 調査中
osalink1 たぶんリンカー(ld相当)、20GOの段階では開発されていない。 調査中
rjcg01 .g01ファイルにrjcをかける、20GOの段階では開発されていない。 調査中
sjisconv ソースからSJISコードを取り除く 調査中
tekmin0 mini-tek5生成ツール(前処理) 調査中
tekmin1 mini-tek5生成ツール(後処理) 調査中
z_tools ツール置き場 なし

20GOを以下に格納した
https://github.com/Hiroyuki-Nagata/osask/tree/goset006/20GO

全体のREADMEは ここにある

現在は別ブランチでnaskのビルドとテストを進めている

とりあえず今日のところはここまで