OSECPUに関するメモ(番外版) #2
機能密度追及に関するメモ
- (0) このメモをOSECPUのサイトに書かない最大の理由は、OSECPU-wikiが機能密度の話題でいっぱいになるのが少々申し訳ないため。
- (1) ver.0.40をリリースしてから思いついたこと。
- まず、charsは現在9バイトだが、実はこれは8.5バイトで書く方法もある。つまりもう少しで8バイト化が可能だ。どうにかならないだろうかと考えること1時間弱。実はcharsの9バイト目は00なのだ。それなら実行ファイルを解釈する際には、00を数個付与してから解釈するようにしたらどうだろうか。実はそのようにしても他の実行ファイルには何の影響もない。というか内部では数バージョン前からそうしている(番兵にしている)。よし採用。
- 次にhelloだけど、実はこれも15.5バイトで書ける。そしてOSASK文字列という7bitエンコードと8bitエンコードの中間みたいなものはやめて、純粋な7bitエンコードに切り替えることができれば、これも15.0バイト化が可能なはずだ。よしこれもやってみるか。
- (2) なんか僕の場合、いきなり最高の設計には到達できなくて、まず自分の持っているアイデアを全部入れたものを作ってみて、それをしばらく使っているとやっと改良案が出てくる。・・・ということは、出し惜しみなく作るしかない。
- (3) charsをちょっと考えてみる。現在8バイトだけど、単純に考えれば、0x20という開始値と0x7fという終了値は必要で、まあこれがそれぞれ1バイトだとしよう。そして2バイトのシグネチャがある。そうするとそれだけで4バイトは必要で、制御のために使っているのは4バイトだということになる。なるほど。
- (4) アセンブラ短歌という遊びがある。31バイトでプログラムを書くのだが、さらに制約があってそれは57577のところで命令を区切らなければいけない。またがってはいけないのだ。非常に文化的で有意義な遊びである(笑)。ちなみにシグネチャやヘッダは31バイト内に含めなくてよい。
- (5) putConstStringのメモ:
- 510(len)(UINT8): lenは符号なしhh4
- (1...6 → +2), (7...63 → +2.5), (64...511 → +3)
- OSASK文字列を使えば、8文字を9.5バイトで出力できる。以降8文字ごとに-1バイト。
- 513(UINT8)(00):
- (1... → +2.5)
- 末尾: (1... → +1.5)
- OSASK文字列を使えば、8文字を9.5バイトで出力できる。以降8文字ごとに-1バイト。
- 515x(UINT7): xはlen-4で、0~F
- (4...7 → +1.5), (8...11 → +1), (12...15 → +0.5)
- 516(UINT7)(00)
- (1...2 → +2.5), (3...6 → +2), (7...10 → +1.5), (11...14 → +1)
- 末尾:
|