[FORMAT "WCOFF"]
[INSTRSET "i486p"]
[OPTIMIZE 1]
[BITS 32]
[FILE "naskhelo.nas"]
; 以上6行はおまじない。COFFモード、486命令利用可能、最適化ON、32bitモード、ソースファイル名。
[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初期化), ワークエリアのポインタ, 終了ファンクション番号0x00
func_openwin:
DD 0x0020, window, 0x0200, 18 * 8, 3 * 16, 0x0000
; ファンクション番号0x20(ウィンドウオープン), window構造体のポインタ, スロット番号0x200, xサイズ(ドット単位), yサイズ(ドット単位),
; 終了ファンクション番号0x00
func_titlebox:
DD 0x0028, 0x1000, wintitle, 0, 8, 1, 0, 0, window, 0x00c0, 0, 0x0000
; ファンクション番号0x28(テキストボックスオープン), オプション0x1000(ウィンドウタイトルモード), textbox構造体のポインタ, 背景色0,
; xサイズ(キャラクタ単位), yサイズ(キャラクタ単位), 表示x位置0, 表示y位置0, window構造体のポインタ,
; 標準キャラクタセット使用(0x00c0), リザーブ0, 終了ファンクション番号0x00
func_settitle:
DD 0x0040, 0x1000, 0, 0, wintitle, 0, 0, 0, 8, "naskhelo", 0x0000
; ファクション番号0x40(テキスト表示), オプション0x1000(8bitキャラクタモード), 表示x位置0, 表示y位置0, textbox構造体のポインタ,
; 文字色0, 背景色0, キャラクタコードオフセット0, 文字数8, 文字列"naskhelo", 終了ファンクション番号0x00
func_sleep:
DD 0x0018, 0x0001, 0, 0, 0x0000
; ファンクション番号0x0018(シグナル関係の処理), オプション1(スリープ), パラメータ0, パラメータ0, 終了ファンクション番号0x00
ALIGNB 16 ; 本当はalign8で十分(ただの気分で16にしてしまった)
work:
RESB 256 ; func_initに必要な256バイトのワークエリア
window:
RESB 128 ; ウィンドウ構造体
wintitle:
RESB 64 ; テキストボックス構造体
RESB 8 * 1 * 8 ; 8文字分