ページへ戻る
印刷
sero/g01_os
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:sero/g01_os をテンプレートにして作成
開始行:
* g01ってOSと見なせるよね?
- g01では、実行ファイルのフォーマットが規定されていて、フ...
- これだけのものがあれば、もはやg01は新たなプラットフォー...
- [[K]]さんの[[メモ>GUIGUI01/memo02#o161c91a]]でもすでに...
- 2011年05月中旬に、(少なくとも自分にとっては)面白いこと...
- 開発ツール系のアプリがg01として作られているんだから、''...
- つまり、この新しいプラットフォームg01上で''セルフ開発''...
** 環境整備
- まずは使える道具を確認しよう。[[hidetol_8>hidetol/hidet...
- 使える(g01の)ツールは、akusA, bim2g01, bim2hrb, bin2obj...
- よく知らないものを調べる。
:: bin2ucc | ファイルをC言語のunsigned char配列形式にダン...
:: mtek2org, rjcg01, tekmin* | よく分からなかった(あとで...
- C言語でなくnaskがメインになる予定なので、z_tools/com*.t...
-- nask:nask→obj, obj2bim:obj→bim×rlm, bim2g01:bim×rlm→g0...
-- bim2binはg01でないので圧縮はいったんあきらめる。したが...
- あとは、キーボードからの入力をファイルに書き出す補助ツ...
- で、作った。ファイル名: input.c
#include <guigui01.h>
void G01Main(void) {
static const unsigned char cmdusage[] = {
0x86, 0x50,
0x8c,
0x40
};
char * const p0 = g01_bss1a1, *p = p0;
int flag = 0;
g01_setcmdlin(cmdusage);
for (;;) {
int c = jg01_inkey3();
if (c == '\r')
c = '\n';
g01_putc(c);
if (!flag) {
if (c == 'q')
flag = 1;
else
*p++ = c;
} else {
if (c == '\n')
break;
*p++ = 'q';
*p++ = c;
flag = 0;
}
}
*p = '\0';
g01_getcmdlin_fopen_s_3_5(0);
jg01_fwrite1f_5(p - p0, p0);
}
- 出力ファイル名を受け取り、入力された文字をそこに書き込...
- 必要最低限のツールセットができた。
- まとめ:hidetol_8 + ソースの入力ツールinput.g01 を使っ...
** g01-computer?
- (概念的な話なのでこの節は読み飛ばし可)
- 想像してみよう。あなたのPC(Windows/Linux)から通信のケー...
- この箱はコンピュータでありx86のCPUを積んでいることはほ...
- PCでefg(あるいはhijk)を起動すると、指定されたプログラム...
-- (何らかの方法でPCとg01-computerはストレージを共有して...
- つまり、「efgはg01プログラムの実行環境(仮想マシン)であ...
- この企画が実現しようとしているのは、後者の解釈における...
- このコンピュータ用のアセンブラとリンカがすでに作成され...
** Getting started
- まずはおなじみのHello, worldから始める。
- 先ほど作ったinput.g01を起動して、
../z_tools/hijk input hello.nas
- [[GUIGUI01/memo30]]のソースを一文字ずつ入力する。終了は...
-- input.g01は入力ミスをしても取り消す方法がないので、Ctr...
- そしてアセンブル&リンク
../z_tools/hijk ../z_tools/Nasuka hello.nas hello.obj
../z_tools/hijk ../z_tools/obj2bim rul:../z_tools/guigui...
../z_tools/hijk ../z_tools/bim2g01 hello.bim hello.g01 h...
-- (このステップも面倒だから自動化したいけど、今のg01は外...
- 実行
../z_tools/hijk hello
** ラインエディタ → 中止
- 最小限のツールセット(上記)でもプログラムが作れることは...
- しかし、ミスタイプがあるたびに入力を最初からやり直すこ...
-- hello, worldくらいならともかくも、入力のやり直し中にさ...
- (ミスタイプのたびに入力をやり直すなんてパンチカード・紙...
- だから、実際の開発ではテキストの編集操作が行えるテキス...
- ところで、この企画はセルフ開発がテーマだった。だからこ...
- 上で述べたことから、テキストエディタの作成自体もそれな...
- じゃあ仕様から。テキストの編集は行を追加・削除すること...
- これ以外の機能は持たせない。つまり、起動すると新規ファ...
- と、2010-07-01の昼頃からこの仕様を考えた。これから、紙...
- プログラム作成の手順は次のようにすることを考えた。
++ まず、"_G01Main: ret"という何もしないプログラムを作成...
++ これに、機能をひとつ付け加えたプログラムを紙の上で作る。
++ 元のプログラムをcpy.g01でバックアップし、input.g01で新...
++ 動作を確認し、次の機能の作成に移る。
++ 以上を、プログラムが完成するまで繰り返す。
- この手順だと、書くべきプログラムの量は増えるが、全体を...
- 2011-07-13現在、上の手順を2回繰り返し、コマンドラインパ...
-- &ref(lineedit.nas);
- この時点でプログラムは607バイトあり、この入力に約5回タ...
- 手元にラインエディタ全体で約2.5KBを下回ることはないとい...
- 簡単な計算によりこのプログラム全体をタイプミス無しに入...
- これは(不可能でないまでも)現実的な値でないので、もっと...
- まだ未完成。進展があったら更新。
** 展望
- この企画でやってみたいことの列挙
:: Hello, world | GUIGUI01によるセルフ開発が可能であるこ...
:: ラインエディタ | テキストデータの入力支援
:: (詳細未定) | プログラムの入力支援
** コメント欄
- おもしろそう! -- ''k-tan'' &new{2011-07-01 (金) 09:18:...
- なるほど、確かに外部プログラム起動の機能はほしいですね...
#comment
終了行:
* g01ってOSと見なせるよね?
- g01では、実行ファイルのフォーマットが規定されていて、フ...
- これだけのものがあれば、もはやg01は新たなプラットフォー...
- [[K]]さんの[[メモ>GUIGUI01/memo02#o161c91a]]でもすでに...
- 2011年05月中旬に、(少なくとも自分にとっては)面白いこと...
- 開発ツール系のアプリがg01として作られているんだから、''...
- つまり、この新しいプラットフォームg01上で''セルフ開発''...
** 環境整備
- まずは使える道具を確認しよう。[[hidetol_8>hidetol/hidet...
- 使える(g01の)ツールは、akusA, bim2g01, bim2hrb, bin2obj...
- よく知らないものを調べる。
:: bin2ucc | ファイルをC言語のunsigned char配列形式にダン...
:: mtek2org, rjcg01, tekmin* | よく分からなかった(あとで...
- C言語でなくnaskがメインになる予定なので、z_tools/com*.t...
-- nask:nask→obj, obj2bim:obj→bim×rlm, bim2g01:bim×rlm→g0...
-- bim2binはg01でないので圧縮はいったんあきらめる。したが...
- あとは、キーボードからの入力をファイルに書き出す補助ツ...
- で、作った。ファイル名: input.c
#include <guigui01.h>
void G01Main(void) {
static const unsigned char cmdusage[] = {
0x86, 0x50,
0x8c,
0x40
};
char * const p0 = g01_bss1a1, *p = p0;
int flag = 0;
g01_setcmdlin(cmdusage);
for (;;) {
int c = jg01_inkey3();
if (c == '\r')
c = '\n';
g01_putc(c);
if (!flag) {
if (c == 'q')
flag = 1;
else
*p++ = c;
} else {
if (c == '\n')
break;
*p++ = 'q';
*p++ = c;
flag = 0;
}
}
*p = '\0';
g01_getcmdlin_fopen_s_3_5(0);
jg01_fwrite1f_5(p - p0, p0);
}
- 出力ファイル名を受け取り、入力された文字をそこに書き込...
- 必要最低限のツールセットができた。
- まとめ:hidetol_8 + ソースの入力ツールinput.g01 を使っ...
** g01-computer?
- (概念的な話なのでこの節は読み飛ばし可)
- 想像してみよう。あなたのPC(Windows/Linux)から通信のケー...
- この箱はコンピュータでありx86のCPUを積んでいることはほ...
- PCでefg(あるいはhijk)を起動すると、指定されたプログラム...
-- (何らかの方法でPCとg01-computerはストレージを共有して...
- つまり、「efgはg01プログラムの実行環境(仮想マシン)であ...
- この企画が実現しようとしているのは、後者の解釈における...
- このコンピュータ用のアセンブラとリンカがすでに作成され...
** Getting started
- まずはおなじみのHello, worldから始める。
- 先ほど作ったinput.g01を起動して、
../z_tools/hijk input hello.nas
- [[GUIGUI01/memo30]]のソースを一文字ずつ入力する。終了は...
-- input.g01は入力ミスをしても取り消す方法がないので、Ctr...
- そしてアセンブル&リンク
../z_tools/hijk ../z_tools/Nasuka hello.nas hello.obj
../z_tools/hijk ../z_tools/obj2bim rul:../z_tools/guigui...
../z_tools/hijk ../z_tools/bim2g01 hello.bim hello.g01 h...
-- (このステップも面倒だから自動化したいけど、今のg01は外...
- 実行
../z_tools/hijk hello
** ラインエディタ → 中止
- 最小限のツールセット(上記)でもプログラムが作れることは...
- しかし、ミスタイプがあるたびに入力を最初からやり直すこ...
-- hello, worldくらいならともかくも、入力のやり直し中にさ...
- (ミスタイプのたびに入力をやり直すなんてパンチカード・紙...
- だから、実際の開発ではテキストの編集操作が行えるテキス...
- ところで、この企画はセルフ開発がテーマだった。だからこ...
- 上で述べたことから、テキストエディタの作成自体もそれな...
- じゃあ仕様から。テキストの編集は行を追加・削除すること...
- これ以外の機能は持たせない。つまり、起動すると新規ファ...
- と、2010-07-01の昼頃からこの仕様を考えた。これから、紙...
- プログラム作成の手順は次のようにすることを考えた。
++ まず、"_G01Main: ret"という何もしないプログラムを作成...
++ これに、機能をひとつ付け加えたプログラムを紙の上で作る。
++ 元のプログラムをcpy.g01でバックアップし、input.g01で新...
++ 動作を確認し、次の機能の作成に移る。
++ 以上を、プログラムが完成するまで繰り返す。
- この手順だと、書くべきプログラムの量は増えるが、全体を...
- 2011-07-13現在、上の手順を2回繰り返し、コマンドラインパ...
-- &ref(lineedit.nas);
- この時点でプログラムは607バイトあり、この入力に約5回タ...
- 手元にラインエディタ全体で約2.5KBを下回ることはないとい...
- 簡単な計算によりこのプログラム全体をタイプミス無しに入...
- これは(不可能でないまでも)現実的な値でないので、もっと...
- まだ未完成。進展があったら更新。
** 展望
- この企画でやってみたいことの列挙
:: Hello, world | GUIGUI01によるセルフ開発が可能であるこ...
:: ラインエディタ | テキストデータの入力支援
:: (詳細未定) | プログラムの入力支援
** コメント欄
- おもしろそう! -- ''k-tan'' &new{2011-07-01 (金) 09:18:...
- なるほど、確かに外部プログラム起動の機能はほしいですね...
#comment
ページ名: