ページへ戻る
印刷
guide/nask
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:guide/nask をテンプレートにして作成
開始行:
TITLE:x
* naskでOSASKアプリを作ってみよう、のページ
-(by [[K]], 2004.12.11)
-そもそもnaskってなによ、っていうのがあると思いますが、na...
--より詳しくはこちら → [[Z:GO/nask]]
*** まずは開発環境の入手
-この記述は数ヶ月以内に更新されそうですが、とりあえず現状...
//-[[downloads/dev]]のページへ行って、''最新版''のところ...
-[[downloads/dev]]のページへ行って、''最新版''のところの...
--2MB強ありますが、これはCコンパイラとかテストラン用のOSA...
-これをどこでもいいですので、適当なところに解凍します。
*** プロジェクト作成
-次に、新規にアプリを作りますので、z_new_oというディレク...
--もちろん他の好きな名前でもいいですよ。
-改名が済んだら、naskheloの中に入って、Makefileを探し、こ...
-そして一番上の行のTARGETの記述を以下のように直します。
TARGET = naskhelo
-最後にnaskheloの中で 右クリック→新規作成→テキストドキュ...
*** ソース作成
-さて、それではnaskhelo.nasを開いて、以下のソースをがしが...
--ニーモニックやレジスタ名が大文字になっていますが、もち...
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[OPTIMIZE 1]
[BITS 32]
[FILE "naskhelo.nas"]
; 以上6行はおまじない。COFFモード、486命令利用可能、最適...
[SECTION .text]
GLOBAL _OsaskMain
_OsaskMain:
MOV EBX,func_init
CALL 0xc7:0
MOV EBX,func_openwin
CALL 0xc7:0
MOV EBX,func_titlebox
CALL 0xc7:0
MOV EBX,func_settitle
CALL 0xc7:0
MOV EBX,func_sleep
CALL 0xc7:0
; 永久スリープなので帰ってこない
[SECTION .data]
ALIGNB 4
func_init:
DD 0x0004, work, 0x0000
; ファンクション番号0x04(API初期化), ワークエリアの...
func_openwin:
DD 0x0020, window, 0x0200, 18 * 8, 3 * 16, 0x0000
; ファンクション番号0x20(ウィンドウオープン), window...
; 終了ファンクション番号0x00
func_titlebox:
DD 0x0028, 0x1000, wintitle, 0, 8, 1, 0, 0, window, ...
; ファンクション番号0x28(テキストボックスオープン), ...
; xサイズ(キャラクタ単位), yサイズ(キャラクタ単...
; 標準キャラクタセット使用(0x00c0), リザーブ0, ...
func_settitle:
DD 0x0040, 0x1000, 0, 0, wintitle, 0, 0, 0, 8, "nask...
; ファクション番号0x40(テキスト表示), オプション0x10...
; 文字色0, 背景色0, キャラクタコードオフセット0, 文...
func_sleep:
DD 0x0018, 0x0001, 0, 0, 0x0000
; ファンクション番号0x0018(シグナル関係の処理), オプ...
ALIGNB 16 ; 本当はalign8で十分(ただの気分で16にして...
work:
RESB 256 ; func_initに必要な256バイトのワークエリア
window:
RESB 128 ; ウィンドウ構造体
wintitle:
RESB 64 ; テキストボックス構造体
RESB 8 * 1 * 8 ; 8文字分
*** どうやってアセンブルするの?
-まず、コンソールを開きます。開き方は使っているOSによって...
--Win2000, WinXPなどのNT系: !cons_nt.batをダブルクリック
--Win95, Win98などの9X系: !cons_9x.batをダブルクリック
-コンソールが出てきたら、makeとだけうってEnterを押してく...
-これだけでリンクまで全自動でやってくれます。
-できたアプリは、naskhelo.binです。
//--osa_dir2で作った場合は多分161バイトです。
--tolset08で作った場合は多分127バイトです。
*** どうやってテスト実行するの?
-同じくコンソールから、make runとだけうってEnterを押して...
-しばらく待っていると、勝手にOSASKがエミュレータ環境で起...
-で、pokonの一番上の、 !BUILT.BIN を実行してください。
-うまくいけばウィンドウが表示されます。
*** ほかのアセンブラになれている人へ
-naskはMASMとかとは少し文法が違います。NASMの文法とほとん...
-GLOBAL文はいわゆるPUBLIC文です。
-ラベルの扱いですが、何も書かないとみんなOFFSET指定とみな...
MOV EBX,func_init
-は、EBXに4が入るわけではなく、アドレスが入ります。メモリ...
MOV EBX,[func_init]
-こうすればEBXには4が入ります。
-tolset08のnaskは新しいやつなので、[section .bss]も使えま...
//-[section .bss]を使えばBSSも使えるはずなのですが、osa_d...
//--.bssが使えるバージョンをパッケージしたらここの記述は...
-RESB文は何かと言うと、DB dupみたいなものです。 RESB 256 ...
--NASMもnaskでも、DBなどでdup構文を使うことはできません。
*** ほかのOSのAPIになれている人へ
-OSASKではAPI呼び出しはメモリを経由したポインタ渡しです。...
-毎回.dataセクションにパラメータをだらだら書かないといけ...
PUSH 0
PUSH work
PUSH 4
MOV EBX,ESP
CALL 0xc7:0
ADD ESP,12
-OSASKアプリのメモリモデルは、DS == ES == SS != CS です。...
--ということが面倒極まりないので、普通は全部のデータを.da...
*** 雑な説明
-結局のところ、これはAPI呼び出しCALLを5回やって、5つのAPI...
-OSASKのAPIでは、必ず最後に終了ファンクション0x0000があり...
-ファンクション0x0004は、[[gg00man/others]]の''lib_init''...
--naskでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0020は、[[gg00man/window]]の''lib_openwi...
--naskでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0028は、[[gg00man/text]]の''lib_opentext...
--naskでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0040は、[[gg00man/text]]の''lib_putstrin...
--optのbit14が0になっているところが違いますが。
-ファンクション0x0018は、[[gg00man/signal]]の''lib_waitsi...
-それぞれについてパラメータの意味などは上記の説明を参考に...
*** もっと詳しく説明してくれー
-そのうちやるかもしれません。このページは長くなったので別...
-ほかのAPIとかも。
--続編:[[guide/wintro0000]]
~
~
-待てない人のための参考資料:
--I.Tak.さんのAPI資料: http://user.ecc.u-tokyo.ac.jp/~t4...
--[[GUIGUI00_man]]
* こめんと欄
-直ってしまったので、勝手に修正してしまいました。コメント...
-どうもありがとう。助かりました。 -- [[K]] SIZE(10){2004-...
-とりあえずこんなものでどうでしょうか?>nikaさん リク...
-ありがとうございます。とりあえずいい感じです。 -- ''nika...
-ほとんどDOSでしかやった事無いので、できれば具体的なこの...
-続編作りました。> [[guide/wintro0000]] この先も、たまに...
-naskでAPI引数が分かりにくいと思う人は, nasmでマクロを使...
-tolset08を前提に改訂。 -- [[K]] SIZE(10){2005-01-28 (金)...
//#comment
終了行:
TITLE:x
* naskでOSASKアプリを作ってみよう、のページ
-(by [[K]], 2004.12.11)
-そもそもnaskってなによ、っていうのがあると思いますが、na...
--より詳しくはこちら → [[Z:GO/nask]]
*** まずは開発環境の入手
-この記述は数ヶ月以内に更新されそうですが、とりあえず現状...
//-[[downloads/dev]]のページへ行って、''最新版''のところ...
-[[downloads/dev]]のページへ行って、''最新版''のところの...
--2MB強ありますが、これはCコンパイラとかテストラン用のOSA...
-これをどこでもいいですので、適当なところに解凍します。
*** プロジェクト作成
-次に、新規にアプリを作りますので、z_new_oというディレク...
--もちろん他の好きな名前でもいいですよ。
-改名が済んだら、naskheloの中に入って、Makefileを探し、こ...
-そして一番上の行のTARGETの記述を以下のように直します。
TARGET = naskhelo
-最後にnaskheloの中で 右クリック→新規作成→テキストドキュ...
*** ソース作成
-さて、それではnaskhelo.nasを開いて、以下のソースをがしが...
--ニーモニックやレジスタ名が大文字になっていますが、もち...
[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[OPTIMIZE 1]
[BITS 32]
[FILE "naskhelo.nas"]
; 以上6行はおまじない。COFFモード、486命令利用可能、最適...
[SECTION .text]
GLOBAL _OsaskMain
_OsaskMain:
MOV EBX,func_init
CALL 0xc7:0
MOV EBX,func_openwin
CALL 0xc7:0
MOV EBX,func_titlebox
CALL 0xc7:0
MOV EBX,func_settitle
CALL 0xc7:0
MOV EBX,func_sleep
CALL 0xc7:0
; 永久スリープなので帰ってこない
[SECTION .data]
ALIGNB 4
func_init:
DD 0x0004, work, 0x0000
; ファンクション番号0x04(API初期化), ワークエリアの...
func_openwin:
DD 0x0020, window, 0x0200, 18 * 8, 3 * 16, 0x0000
; ファンクション番号0x20(ウィンドウオープン), window...
; 終了ファンクション番号0x00
func_titlebox:
DD 0x0028, 0x1000, wintitle, 0, 8, 1, 0, 0, window, ...
; ファンクション番号0x28(テキストボックスオープン), ...
; xサイズ(キャラクタ単位), yサイズ(キャラクタ単...
; 標準キャラクタセット使用(0x00c0), リザーブ0, ...
func_settitle:
DD 0x0040, 0x1000, 0, 0, wintitle, 0, 0, 0, 8, "nask...
; ファクション番号0x40(テキスト表示), オプション0x10...
; 文字色0, 背景色0, キャラクタコードオフセット0, 文...
func_sleep:
DD 0x0018, 0x0001, 0, 0, 0x0000
; ファンクション番号0x0018(シグナル関係の処理), オプ...
ALIGNB 16 ; 本当はalign8で十分(ただの気分で16にして...
work:
RESB 256 ; func_initに必要な256バイトのワークエリア
window:
RESB 128 ; ウィンドウ構造体
wintitle:
RESB 64 ; テキストボックス構造体
RESB 8 * 1 * 8 ; 8文字分
*** どうやってアセンブルするの?
-まず、コンソールを開きます。開き方は使っているOSによって...
--Win2000, WinXPなどのNT系: !cons_nt.batをダブルクリック
--Win95, Win98などの9X系: !cons_9x.batをダブルクリック
-コンソールが出てきたら、makeとだけうってEnterを押してく...
-これだけでリンクまで全自動でやってくれます。
-できたアプリは、naskhelo.binです。
//--osa_dir2で作った場合は多分161バイトです。
--tolset08で作った場合は多分127バイトです。
*** どうやってテスト実行するの?
-同じくコンソールから、make runとだけうってEnterを押して...
-しばらく待っていると、勝手にOSASKがエミュレータ環境で起...
-で、pokonの一番上の、 !BUILT.BIN を実行してください。
-うまくいけばウィンドウが表示されます。
*** ほかのアセンブラになれている人へ
-naskはMASMとかとは少し文法が違います。NASMの文法とほとん...
-GLOBAL文はいわゆるPUBLIC文です。
-ラベルの扱いですが、何も書かないとみんなOFFSET指定とみな...
MOV EBX,func_init
-は、EBXに4が入るわけではなく、アドレスが入ります。メモリ...
MOV EBX,[func_init]
-こうすればEBXには4が入ります。
-tolset08のnaskは新しいやつなので、[section .bss]も使えま...
//-[section .bss]を使えばBSSも使えるはずなのですが、osa_d...
//--.bssが使えるバージョンをパッケージしたらここの記述は...
-RESB文は何かと言うと、DB dupみたいなものです。 RESB 256 ...
--NASMもnaskでも、DBなどでdup構文を使うことはできません。
*** ほかのOSのAPIになれている人へ
-OSASKではAPI呼び出しはメモリを経由したポインタ渡しです。...
-毎回.dataセクションにパラメータをだらだら書かないといけ...
PUSH 0
PUSH work
PUSH 4
MOV EBX,ESP
CALL 0xc7:0
ADD ESP,12
-OSASKアプリのメモリモデルは、DS == ES == SS != CS です。...
--ということが面倒極まりないので、普通は全部のデータを.da...
*** 雑な説明
-結局のところ、これはAPI呼び出しCALLを5回やって、5つのAPI...
-OSASKのAPIでは、必ず最後に終了ファンクション0x0000があり...
-ファンクション0x0004は、[[gg00man/others]]の''lib_init''...
--naskでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0020は、[[gg00man/window]]の''lib_openwi...
--naskでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0028は、[[gg00man/text]]の''lib_opentext...
--naskでの呼び出しでは、0を指定したら自動malloc、というサ...
-ファンクション0x0040は、[[gg00man/text]]の''lib_putstrin...
--optのbit14が0になっているところが違いますが。
-ファンクション0x0018は、[[gg00man/signal]]の''lib_waitsi...
-それぞれについてパラメータの意味などは上記の説明を参考に...
*** もっと詳しく説明してくれー
-そのうちやるかもしれません。このページは長くなったので別...
-ほかのAPIとかも。
--続編:[[guide/wintro0000]]
~
~
-待てない人のための参考資料:
--I.Tak.さんのAPI資料: http://user.ecc.u-tokyo.ac.jp/~t4...
--[[GUIGUI00_man]]
* こめんと欄
-直ってしまったので、勝手に修正してしまいました。コメント...
-どうもありがとう。助かりました。 -- [[K]] SIZE(10){2004-...
-とりあえずこんなものでどうでしょうか?>nikaさん リク...
-ありがとうございます。とりあえずいい感じです。 -- ''nika...
-ほとんどDOSでしかやった事無いので、できれば具体的なこの...
-続編作りました。> [[guide/wintro0000]] この先も、たまに...
-naskでAPI引数が分かりにくいと思う人は, nasmでマクロを使...
-tolset08を前提に改訂。 -- [[K]] SIZE(10){2005-01-28 (金)...
//#comment
ページ名: