サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
3: 2008-12-23 (火) 23:01:36 ソース 4: 2008-12-23 (火) 23:01:36 ソース
Line 41: Line 41:
 EDI = 0; CALL([ESI]); DB(0x50, 0x53, 0xb2, 0xb4, 0xb6, 0x30);  EDI = 0; CALL([ESI]); DB(0x50, 0x53, 0xb2, 0xb4, 0xb6, 0x30);
-このパケットは普通に見れば[5 0 5 3 0x32 0x34 0x36 3]となります。しかし0x32は'2'のキャラクターコードなので、ここではあえて[5 0 5 3 "246" 3]と書くことにします。またこの3番目の5はこの文脈では!5という意味で、結果として何の意味も持たないので、これを消すことにします(詳細は後で説明します)。そうすると、結局[5 0 3 "246"][3]となります。パケットはコマンドの切れ目で切ると見やすいのでこう書いています。 -このパケットは普通に見れば[5 0 5 3 0x32 0x34 0x36 3]となります。しかし0x32は'2'のキャラクターコードなので、ここではあえて[5 0 5 3 "246" 3]と書くことにします。またこの3番目の5はこの文脈では!5という意味で、結果として何の意味も持たないので、これを消すことにします(詳細は後で説明します)。そうすると、結局[5 0 3 "246"][3]となります。パケットはコマンドの切れ目で切ると見やすいのでこう書いています。
--これは旧OSASKのパケットととてもよく似ていて(数値はいろいろ違いますが)、slot0で文字数3で文字コードが並んでいるだけなのです。[3]はパケット終端です。これを実行するとアプリに戻ります。+-これは旧OSASKのパケットととてもよく似ていて(数値はいろいろ違いますが)、slot=0で文字数=3で文字コードが並んでいるだけなのです。[3]はパケット終端です。これを実行するとアプリに戻ります。
-これを応用すれば、まずEAX一文字を表示するputcが簡単に作れます。 -これを応用すれば、まずEAX一文字を表示するputcが簡単に作れます。
 EDI = 0; CALL([ESI]); DB(0x50, 0x51, 0x60, 0x03);  EDI = 0; CALL([ESI]); DB(0x50, 0x51, 0x60, 0x03);
Line 47: Line 47:
-しかしこのままでは終了ファンクションと同じで大して面白くありません。面白いのはここからです。!5の後に、!6_504_0_!5_1_3_0...と続けることができます。つまりこういうことです。 -しかしこのままでは終了ファンクションと同じで大して面白くありません。面白いのはここからです。!5の後に、!6_504_0_!5_1_3_0...と続けることができます。つまりこういうことです。
 EDI = 0; CALL([ESI]); DB(0x50, 0x56, 0xdf, 0x80, 0x51, 0x30, 0x32, 0x34, 0x36, 0x30);  EDI = 0; CALL([ESI]); DB(0x50, 0x56, 0xdf, 0x80, 0x51, 0x30, 0x32, 0x34, 0x36, 0x30);
--これは[5 0 !6 504 0 1 3 0 "246"][3]という意味になります(余計な!5は消しました)。!6_504_0_1_3というのが特別なもので、!6_504_0は「モード変更直接」次の1が8bit配列モード、次の3が「文字数兼モード長」です。8bit配列モードになれば、数値をいちいちgh4でエンコードしなくていいのです。普通にcharで書けます。ちなみに文字数3の後の0は、ただのパディングですが、これは必ず0でなければいけません。適当な数値を入れると誤動作します。+-これは[5 0 !6 504 0 1 3 0 "246"][3]という意味になります(余計な!5は消しました)。!6_504_0_1_3というのが特別なもので、!6_504_0は「モード変更直接」、次の1が8bit配列モード、次の3が「文字数兼モード長」です。8bit配列モードになれば、数値をいちいちgh4でエンコードしなくていいのです。普通にcharで書けます。ちなみに文字数3の後の0は、ただのパディングですが、これは必ず0でなければいけません。適当な数値を入れると誤動作します。
-しかし実は、機能番号5のフォーマットは、[5 slot (!6 504) mod (1) len str]となっています(mod=0の場合)。この()で囲まれた部分は、!5で打ち消さなければ自動で挿入される部分です。つまり自動挿入をあてにするなら、 -しかし実は、機能番号5のフォーマットは、[5 slot (!6 504) mod (1) len str]となっています(mod=0の場合)。この()で囲まれた部分は、!5で打ち消さなければ自動で挿入される部分です。つまり自動挿入をあてにするなら、
 EDI = 0; CALL([ESI]); DB(0x50, 0x03, 0x32, 0x34, 0x36, 0x30);  EDI = 0; CALL([ESI]); DB(0x50, 0x03, 0x32, 0x34, 0x36, 0x30);

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

目次
メンバー一覧


最新の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コミュニティによって管理・運営されています。