ページへ戻る
印刷
guide/ASKA
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:guide/ASKA をテンプレートにして作成
開始行:
TITLE:x
* ASKAでOSASKアプリを作ってみよう、のページ
-(by [[K]], 2004.12.12)
-前半はnask編とほとんど同じです。
--nask編はこちら → [[guide/nask]]
*** まずは開発環境の入手
-この記述は数ヶ月以内に更新されそうですが、とりあえず現状...
-[[downloads/dev]]のページへ行って、''最新版''のところの...
--2MB強ありますが、これはCコンパイラとかテストラン用のOSA...
-これをどこでもいいですので、適当なところに解凍します。
*** プロジェクト作成
-次に、新規にアプリを作りますので、z_new_oというディレク...
--もちろん他の好きな名前でもいいですよ。
-改名が済んだら、askaheloの中に入って、Makefileを探し、こ...
-そして一番上の行のTARGETの記述を以下のように直します。
TARGET = askahelo
-最後にnaskheloの中で 右クリック→新規作成→テキストドキュ...
*** ソース作成
-さて、それではaskahelo.askを開いて、以下のソースをがしが...
--asmout文の中以外では、大文字小文字の区別があるので注意...
segment CODE(USE32, PARA); /* おまじない */
default(code == CODE); /* おまじない */
asmout("[FILE 'askahelo.ask']"); /* nask編参照 */
asmout("GLOBAL _OsaskMain");
/* 最初の[SECTION .text]は省略可能なので省略 */
void _OsaskMain()
{
asmout("MOV EBX,data.func_init"); /* ASKAはラベルへ...
CALL(0xc7, 0);
asmout("MOV EBX,data.func_openwin"); CALL(0xc7, 0);
asmout("MOV EBX,data.func_titlebox"); CALL(0xc7, 0);
asmout("MOV EBX,data.func_settitle"); CALL(0xc7, 0);
asmout("MOV EBX,data.func_sleep"); CALL(0xc7, 0);
/* 永久スリープなので帰ってこない */
}
asmout("[SECTION .data]");
void data()
{
ALIGNB(4);
func_init:
asmout("DD 0x0004, data.work, 0x0000");
/* ファンクション番号0x04(API初期化), ワークエリア...
func_openwin:
asmout("DD 0x0020, data.window, 0x0200, 18 * 8, 3 * ...
/* ファンクション番号0x20(ウィンドウオープン), win...
xサイズ(ドット単位), yサイズ(ドット単位), 終...
func_titlebox:
asmout("DD 0x0028, 0x1000, data.wintitle, 0, 8, 1, 0...
/* ファンクション番号0x28(テキストボックスオープン...
textbox構造体のポインタ, 背景色0, xサイズ(キャ...
表示x位置0, 表示y位置0, window構造体のポインタ, ...
空白キャラクタ0, 終了ファンクション番号0x00 */
func_settitle:
asmout("DD 0x0040, 0x1000, 0, 0, data.wintitle, 0, 0...
/* ファクション番号0x40(テキスト表示), オプション0...
表示x位置0, 表示y位置0, textbox構造体のポインタ,...
文字数8, 文字列"naskhelo", 終了ファンクション番...
func_sleep:
DD(0x0018, 0x0001, 0, 0, 0x0000);
/* ファンクション番号0x0018(シグナル関係の処理), ...
パラメータ0, 終了ファンクション番号0x00 */
ALIGNB(16); /* align8で十分だった気がするけど、なん...
work:
RESB(256); /* func_initに必要な256バイトのワークエリ...
window:
RESB(128); /* ウィンドウ構造体 */
wintitle:
RESB(64); /* テキストボックス構造体 */
RESB(64); /* 8文字分 (8 * 1 * 8) */
}
*** どうやってアセンブルするの?
-まず、コンソールを開きます。開き方は使っているOSによって...
--Win2000, WinXPなどのNT系: !cons_nt.batをダブルクリック
--Win95, Win98などの9X系: !cons_9x.batをダブルクリック
-コンソールが出てきたら、makeとだけうってEnterを押してく...
-これだけでリンクまで全自動でやってくれます。
-できたアプリは、askahelo.binです。
//--osa_dir2で作った場合は多分160バイトです。
--tolset08で作った場合は多分126バイトです。
--nask版よりも1バイト小さいのは、ウィンドウタイトルの違い...
*** どうやってテスト実行するの?
-同じくコンソールから、make runとだけうってEnterを押して...
-しばらく待っていると、勝手にOSASKがエミュレータ環境で起...
-で、pokonの一番上の、 !BUILT.BIN を実行してください。
-うまくいけばウィンドウが表示されます。
*** ほかのアセンブラになれている人へ
-ASKAはあまりおすすめできない''アセンブラ''です。読むのは...
-asmout文の中はnaskの文法で書きます。不明なところは[[guid...
//-asmout("[section .bss]");を使えばBSSも使えるはずなので...
//--.bssが使えるバージョンをパッケージしたらここの記述は...
-tolset08のnaskは新しいやつなので、asmout("[section .bss]...
-RESB文は何かと言うと、DB dupみたいなものです。 RESB 256 ...
--ASKAもnaskでも、DBなどでdup構文を使うことはできません。
-ASKAでは、 #define とか #include が使えます。 #if も #el...
*** ほかのOSのAPIになれている人へ
-OSASKではAPI呼び出しはメモリを経由したポインタ渡しです。...
-毎回.dataセクションにパラメータをだらだら書かないといけ...
PUSH(0);
asmout("PUSH data.work");
PUSH(4);
EBX = ESP;
CALL(0xc7, 0);
ESP += 12;
-OSASKアプリのメモリモデルは、DS == ES == SS != CS です。...
--ということが面倒極まりないので、普通は全部のデータを.da...
*** 雑な説明
-結局のところ、これはAPI呼び出しCALLを5回やって、5つのAPI...
-OSASKのAPIでは、必ず最後に終了ファンクション0x0000があり...
-ファンクション0x0004は、[[gg00man/others]]の''lib_init''...
--ASKAでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0020は、[[gg00man/window]]の''lib_openwi...
--ASKAでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0028は、[[gg00man/text]]の''lib_opentext...
--ASKAでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0040は、[[gg00man/text]]の''lib_putstrin...
--optのbit14が0になっているところが違いますが。
-ファンクション0x0018は、[[gg00man/signal]]の''lib_waitsi...
-それぞれについてパラメータの意味などは上記の説明を参考に...
*** もっと詳しく説明してくれー
-そのうちやるかもしれません。このページは長くなったので別...
-ほかのAPIとかも。
~
~
-待てない人のための参考資料:
--I.Tak.さんのAPI資料: http://user.ecc.u-tokyo.ac.jp/~t4...
--[[GUIGUI00_man]]
* こめんと欄
-ASKAによるプログラミングはおすすめしがたいところがあるの...
-定数計算まわりのじゃじゃ馬なところが改善されて、naskレベ...
-tolset08にあわせて説明を修正。 -- [[K]] SIZE(10){2005-01...
//- eHRLAf <a href="http://vkeemeshseko.com/">vkeemeshse...
//#comment
終了行:
TITLE:x
* ASKAでOSASKアプリを作ってみよう、のページ
-(by [[K]], 2004.12.12)
-前半はnask編とほとんど同じです。
--nask編はこちら → [[guide/nask]]
*** まずは開発環境の入手
-この記述は数ヶ月以内に更新されそうですが、とりあえず現状...
-[[downloads/dev]]のページへ行って、''最新版''のところの...
--2MB強ありますが、これはCコンパイラとかテストラン用のOSA...
-これをどこでもいいですので、適当なところに解凍します。
*** プロジェクト作成
-次に、新規にアプリを作りますので、z_new_oというディレク...
--もちろん他の好きな名前でもいいですよ。
-改名が済んだら、askaheloの中に入って、Makefileを探し、こ...
-そして一番上の行のTARGETの記述を以下のように直します。
TARGET = askahelo
-最後にnaskheloの中で 右クリック→新規作成→テキストドキュ...
*** ソース作成
-さて、それではaskahelo.askを開いて、以下のソースをがしが...
--asmout文の中以外では、大文字小文字の区別があるので注意...
segment CODE(USE32, PARA); /* おまじない */
default(code == CODE); /* おまじない */
asmout("[FILE 'askahelo.ask']"); /* nask編参照 */
asmout("GLOBAL _OsaskMain");
/* 最初の[SECTION .text]は省略可能なので省略 */
void _OsaskMain()
{
asmout("MOV EBX,data.func_init"); /* ASKAはラベルへ...
CALL(0xc7, 0);
asmout("MOV EBX,data.func_openwin"); CALL(0xc7, 0);
asmout("MOV EBX,data.func_titlebox"); CALL(0xc7, 0);
asmout("MOV EBX,data.func_settitle"); CALL(0xc7, 0);
asmout("MOV EBX,data.func_sleep"); CALL(0xc7, 0);
/* 永久スリープなので帰ってこない */
}
asmout("[SECTION .data]");
void data()
{
ALIGNB(4);
func_init:
asmout("DD 0x0004, data.work, 0x0000");
/* ファンクション番号0x04(API初期化), ワークエリア...
func_openwin:
asmout("DD 0x0020, data.window, 0x0200, 18 * 8, 3 * ...
/* ファンクション番号0x20(ウィンドウオープン), win...
xサイズ(ドット単位), yサイズ(ドット単位), 終...
func_titlebox:
asmout("DD 0x0028, 0x1000, data.wintitle, 0, 8, 1, 0...
/* ファンクション番号0x28(テキストボックスオープン...
textbox構造体のポインタ, 背景色0, xサイズ(キャ...
表示x位置0, 表示y位置0, window構造体のポインタ, ...
空白キャラクタ0, 終了ファンクション番号0x00 */
func_settitle:
asmout("DD 0x0040, 0x1000, 0, 0, data.wintitle, 0, 0...
/* ファクション番号0x40(テキスト表示), オプション0...
表示x位置0, 表示y位置0, textbox構造体のポインタ,...
文字数8, 文字列"naskhelo", 終了ファンクション番...
func_sleep:
DD(0x0018, 0x0001, 0, 0, 0x0000);
/* ファンクション番号0x0018(シグナル関係の処理), ...
パラメータ0, 終了ファンクション番号0x00 */
ALIGNB(16); /* align8で十分だった気がするけど、なん...
work:
RESB(256); /* func_initに必要な256バイトのワークエリ...
window:
RESB(128); /* ウィンドウ構造体 */
wintitle:
RESB(64); /* テキストボックス構造体 */
RESB(64); /* 8文字分 (8 * 1 * 8) */
}
*** どうやってアセンブルするの?
-まず、コンソールを開きます。開き方は使っているOSによって...
--Win2000, WinXPなどのNT系: !cons_nt.batをダブルクリック
--Win95, Win98などの9X系: !cons_9x.batをダブルクリック
-コンソールが出てきたら、makeとだけうってEnterを押してく...
-これだけでリンクまで全自動でやってくれます。
-できたアプリは、askahelo.binです。
//--osa_dir2で作った場合は多分160バイトです。
--tolset08で作った場合は多分126バイトです。
--nask版よりも1バイト小さいのは、ウィンドウタイトルの違い...
*** どうやってテスト実行するの?
-同じくコンソールから、make runとだけうってEnterを押して...
-しばらく待っていると、勝手にOSASKがエミュレータ環境で起...
-で、pokonの一番上の、 !BUILT.BIN を実行してください。
-うまくいけばウィンドウが表示されます。
*** ほかのアセンブラになれている人へ
-ASKAはあまりおすすめできない''アセンブラ''です。読むのは...
-asmout文の中はnaskの文法で書きます。不明なところは[[guid...
//-asmout("[section .bss]");を使えばBSSも使えるはずなので...
//--.bssが使えるバージョンをパッケージしたらここの記述は...
-tolset08のnaskは新しいやつなので、asmout("[section .bss]...
-RESB文は何かと言うと、DB dupみたいなものです。 RESB 256 ...
--ASKAもnaskでも、DBなどでdup構文を使うことはできません。
-ASKAでは、 #define とか #include が使えます。 #if も #el...
*** ほかのOSのAPIになれている人へ
-OSASKではAPI呼び出しはメモリを経由したポインタ渡しです。...
-毎回.dataセクションにパラメータをだらだら書かないといけ...
PUSH(0);
asmout("PUSH data.work");
PUSH(4);
EBX = ESP;
CALL(0xc7, 0);
ESP += 12;
-OSASKアプリのメモリモデルは、DS == ES == SS != CS です。...
--ということが面倒極まりないので、普通は全部のデータを.da...
*** 雑な説明
-結局のところ、これはAPI呼び出しCALLを5回やって、5つのAPI...
-OSASKのAPIでは、必ず最後に終了ファンクション0x0000があり...
-ファンクション0x0004は、[[gg00man/others]]の''lib_init''...
--ASKAでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0020は、[[gg00man/window]]の''lib_openwi...
--ASKAでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0028は、[[gg00man/text]]の''lib_opentext...
--ASKAでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0040は、[[gg00man/text]]の''lib_putstrin...
--optのbit14が0になっているところが違いますが。
-ファンクション0x0018は、[[gg00man/signal]]の''lib_waitsi...
-それぞれについてパラメータの意味などは上記の説明を参考に...
*** もっと詳しく説明してくれー
-そのうちやるかもしれません。このページは長くなったので別...
-ほかのAPIとかも。
~
~
-待てない人のための参考資料:
--I.Tak.さんのAPI資料: http://user.ecc.u-tokyo.ac.jp/~t4...
--[[GUIGUI00_man]]
* こめんと欄
-ASKAによるプログラミングはおすすめしがたいところがあるの...
-定数計算まわりのじゃじゃ馬なところが改善されて、naskレベ...
-tolset08にあわせて説明を修正。 -- [[K]] SIZE(10){2005-01...
//- eHRLAf <a href="http://vkeemeshseko.com/">vkeemeshse...
//#comment
ページ名: