サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
5: 2011-07-01 (金) 09:18:22 k-tan ソース 現: 2024-01-08 (月) 12:59:02 lina ソース
Line 20: Line 20:
- で、作った。ファイル名: input.c - で、作った。ファイル名: input.c
 #include <guigui01.h>  #include <guigui01.h>
 + 
 void G01Main(void) {  void G01Main(void) {
  static const unsigned char cmdusage[] = {   static const unsigned char cmdusage[] = {
Line 29: Line 29:
  char * const p0 = g01_bss1a1, *p = p0;   char * const p0 = g01_bss1a1, *p = p0;
  int flag = 0;   int flag = 0;
 + 
  g01_setcmdlin(cmdusage);   g01_setcmdlin(cmdusage);
 + 
  for (;;) {   for (;;) {
  int c = jg01_inkey3();   int c = jg01_inkey3();
Line 37: Line 37:
  c = '\n';   c = '\n';
  g01_putc(c);   g01_putc(c);
 + 
  if (!flag) {   if (!flag) {
  if (c == 'q')   if (c == 'q')
Line 52: Line 52:
  }   }
  *p = '\0';   *p = '\0';
 + 
  g01_getcmdlin_fopen_s_3_5(0);   g01_getcmdlin_fopen_s_3_5(0);
  jg01_fwrite1f_5(p - p0, p0);   jg01_fwrite1f_5(p - p0, p0);
 }  }
- 出力ファイル名を受け取り、入力された文字をそこに書き込む。入力の終了は'q'+Enterで表す。 - 出力ファイル名を受け取り、入力された文字をそこに書き込む。入力の終了は'q'+Enterで表す。
 +- 必要最低限のツールセットができた。
 +
 +- まとめ:hidetol_8 + ソースの入力ツールinput.g01 を使ってnaskで開発ができる。
 +
 +** g01-computer? [#ebba0f54]
 +- (概念的な話なのでこの節は読み飛ばし可)
 +- 想像してみよう。あなたのPC(Windows/Linux)から通信のケーブルが伸びている。その先には5インチHDDくらいの大きさの黒い箱がつながっていて、上面には"g01-computer"と刻印がある。
 +- この箱はコンピュータでありx86のCPUを積んでいることはほぼ確実だが、その他のハードウェア構成は不明である。あるプロトコルに基づいてPCと接続されていることも分かっている。
 +- PCでefg(あるいはhijk)を起動すると、指定されたプログラムがg01-computerで実行される。
 +-- (何らかの方法でPCとg01-computerはストレージを共有している、すなわちファイルは自由に読み書きできると仮定する)
 +- つまり、「efgはg01プログラムの実行環境(仮想マシン)である」という通常の解釈のほかに「efgは接続された架空のコンピュータの端末エミュレータである」という解釈もできるわけだ。
 +- この企画が実現しようとしているのは、後者の解釈における架空のコンピュータ"g01-computer"上での''セルフ開発''である。
 +- このコンピュータ用のアセンブラとリンカがすでに作成されているのだから、あとは端末からの入力をそのままファイルに書き出すプログラムがそのコンピュータ上で動けば(理論上)セルフ開発が実現できる。
 +
 +** Getting started [#c8332d6f]
 +- まずはおなじみのHello, worldから始める。
 +- 先ほど作ったinput.g01を起動して、
 + ../z_tools/hijk input hello.nas
 +- [[GUIGUI01/memo30]]のソースを一文字ずつ入力する。終了は'q'+Enter。
 +-- input.g01は入力ミスをしても取り消す方法がないので、Ctrl+Cで強制終了して初めからやり直すことになる。(ミスタイプで2回やり直した)
 +- そしてアセンブル&リンク
 + ../z_tools/hijk ../z_tools/Nasuka hello.nas hello.obj
 + ../z_tools/hijk ../z_tools/obj2bim rul:../z_tools/guigui01/guigui01.rul out:hello.bim stack:0 rlm:hello.rlm ../z_tools/guigui01/g01libc0.lib hello.obj ../z_tools/guigui01/g01libc1.lib
 + ../z_tools/hijk ../z_tools/bim2g01 hello.bim hello.g01 hello.rlm
 +-- (このステップも面倒だから自動化したいけど、今のg01は外部プログラムの起動がサポートされてないので手入力)
 +- 実行
 + ../z_tools/hijk hello
 +
 +** ラインエディタ → 中止 [#j2a9ff6f]
 +- 最小限のツールセット(上記)でもプログラムが作れることは実証できた。
 +- しかし、ミスタイプがあるたびに入力を最初からやり直すことは、ある程度以上の規模のプログラムにおいて、現実的でない。そしてこの規模の限界は相当小さい。
 +-- hello, worldくらいならともかくも、入力のやり直し中にさらにミスタイプすることは十分に起こりえる、というか起きないほうがおかしい。
 +- (ミスタイプのたびに入力をやり直すなんてパンチカード・紙テープの時代みたいだ)
 +- だから、実際の開発ではテキストの編集操作が行えるテキストエディタが必要となる。
 +- ところで、この企画はセルフ開発がテーマだった。だからこのテキストエディタもg01プログラムとして作成する必要があるし、その上、''作成に使える道具は最小限のツールセットだけ''だ。
 +- 上で述べたことから、テキストエディタの作成自体もそれなりに困難な作業になってしまうので、できるだけ簡単に作れるエディタが望ましい。
 +
 +- じゃあ仕様から。テキストの編集は行を追加・削除することで行う。つまり作成するエディタはラインエディタとなる。
 +- これ以外の機能は持たせない。つまり、起動すると新規ファイルを作成する→行を追加していく→間違えた行を削除し正しい行を追加する→終了時にファイルに書き込む、という入力作業になる。
 +
 +- と、2010-07-01の昼頃からこの仕様を考えた。これから、紙の上でnaskプログラムを作成する。
 +
 +- プログラム作成の手順は次のようにすることを考えた。
 +++ まず、"_G01Main: ret"という何もしないプログラムを作成する。
 +++ これに、機能をひとつ付け加えたプログラムを紙の上で作る。
 +++ 元のプログラムをcpy.g01でバックアップし、input.g01で新しいプログラムを入力する。
 +++ 動作を確認し、次の機能の作成に移る。
 +++ 以上を、プログラムが完成するまで繰り返す。
 +- この手順だと、書くべきプログラムの量は増えるが、全体を一気に入力する方法に比べてデバッグがやりやすいと考えた。
 +
 +- 2011-07-13現在、上の手順を2回繰り返し、コマンドラインパラメータの定義と、入力ファイルを開き(デバッグ用に)そのまま出力する機能が実装された。
 +-- &ref(lineedit.nas);
 +- この時点でプログラムは607バイトあり、この入力に約5回タイプミスをしてやり直した。
 +- 手元にラインエディタ全体で約2.5KBを下回ることはないという見積もりがあるので、プログラムの長さはこの約4倍以上になる。
 +- 簡単な計算によりこのプログラム全体をタイプミス無しに入力できるまでのやり直し回数の期待値は600回余りとなる。
 +- これは(不可能でないまでも)現実的な値でないので、もっと短いプログラムでソースコードの入力支援を行う必要があると結論し、ラインエディタの作成を中止した。
- まだ未完成。進展があったら更新。 - まだ未完成。進展があったら更新。
 +
 +** 展望 [#za6ea769]
 +- この企画でやってみたいことの列挙
 +:: Hello, world | GUIGUI01によるセルフ開発が可能であることの実証 (完了)
 +:: ラインエディタ | テキストデータの入力支援
 +:: (詳細未定) | プログラムの入力支援
 +
 +** コメント欄 [#yd6c8bdd]
- おもしろそう! -- ''k-tan'' &new{2011-07-01 (金) 09:18:22}; - おもしろそう! -- ''k-tan'' &new{2011-07-01 (金) 09:18:22};
 +- なるほど、確かに外部プログラム起動の機能はほしいですね。 -- ''k-tan'' &new{2011-07-04 (月) 07:29:45};
#comment #comment

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の20件
2016-10-01 2016-09-08
  • @MenuBar.
2016-09-07 2016-09-04 2016-08-15 2015-09-23 2014-07-30 2014-07-04 2014-02-04 2013-10-26 2013-06-21 2013-06-17 2013-06-15 2013-04-02 2013-02-09 2013-02-04 2012-12-25 2012-12-01 2012-05-28 2012-03-31

トピック一覧
一般用コメント最新
新掲示板lina
2016/9/5 20:58
SandBoxゲスト
2016/9/4 12:01
RecentDeletedlina
2015/6/2 19:29
Old-OSASK-MLlina
2014/6/29 9:14
hideyosi/メールhideyosi
2014/1/6 20:17
hideyosi/募集中lina
2013/11/8 19:56

このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。