サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
7: 2009-11-17 (火) 12:08:17 ソース 現: 2024-01-08 (月) 12:58:56 lina ソース
Line 1: Line 1:
-* wiki版のintroシリーズ no.0003+TITLE:x 
 +* wiki版のintroシリーズ no.0003 [#sbcac025]
-(by [[K]], 2005.01.28) -(by [[K]], 2005.01.28)
-これはC言語でもASKAでもnaskでもとにかくごちゃまぜでintroしてしまおうというこころみ。 -これはC言語でもASKAでもnaskでもとにかくごちゃまぜでintroしてしまおうというこころみ。
Line 7: Line 8:
-質問とか感想とかはこめんと欄にレッツゴー。 -質問とか感想とかはこめんと欄にレッツゴー。
-*** move+*** move [#q811a16f]
-C版:"movec2.c" [tolset08では 681バイト] -C版:"movec2.c" [tolset08では 681バイト]
 /* "movec2.c" */  /* "movec2.c" */
 /*  stack:4k malloc:2k */  /*  stack:4k malloc:2k */
 + 
 #include <guigui00.h>  #include <guigui00.h>
 + 
 #define AUTO_MALLOC  0  #define AUTO_MALLOC  0
 #define REWIND_CODE  1  #define REWIND_CODE  1
 + 
 static int *signalbox0, *sig_ptr;  static int *signalbox0, *sig_ptr;
 void initsignalbox();  void initsignalbox();
 int getsignal();  int getsignal();
 + 
 void OsaskMain()  void OsaskMain()
 {  {
Line 26: Line 27:
     struct LIB_TEXTBOX *wintitle, *textbox;      struct LIB_TEXTBOX *wintitle, *textbox;
     int x, y, c;      int x, y, c;
 + 
     /* ライブラリ初期化 */      /* ライブラリ初期化 */
     lib_init(AUTO_MALLOC);      lib_init(AUTO_MALLOC);
 + 
     /* シグナルボックス初期化 */      /* シグナルボックス初期化 */
     initsignalbox();      initsignalbox();
 + 
     /* ウィンドウオープン */      /* ウィンドウオープン */
     window = lib_openwindow(AUTO_MALLOC, 0x0200, 20 * 8, 8 * 16);      window = lib_openwindow(AUTO_MALLOC, 0x0200, 20 * 8, 8 * 16);
Line 38: Line 39:
     textbox  = lib_opentextbox(0x0001, AUTO_MALLOC, 0, 20, 8, 0, 0, window, 0x00c0, 0);      textbox  = lib_opentextbox(0x0001, AUTO_MALLOC, 0, 20, 8, 0, 0, window, 0x00c0, 0);
     lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "movec2");      lib_putstring_ASCII(0x0000, 0, 0, wintitle, 0, 0, "movec2");
 + 
     /* シグナル定義 */      /* シグナル定義 */
     lib_definesignal1p0(3, 0x0100, 0x00ac, window, 4); /* カーソルキー(計4つ) */      lib_definesignal1p0(3, 0x0100, 0x00ac, window, 4); /* カーソルキー(計4つ) */
     lib_definesignal1p0(0, 0x0100, ' ',    window, 8); /* スペースバー */      lib_definesignal1p0(0, 0x0100, ' ',    window, 8); /* スペースバー */
     lib_definesignal0p0(0, 0, 0, 0);      lib_definesignal0p0(0, 0, 0, 0);
 + 
     /* まず表示 */      /* まず表示 */
     x = 9; y = 3; c = 11;      x = 9; y = 3; c = 11;
     lib_putstring_ASCII(0x0000, x, y, textbox, c, 0, "O");      lib_putstring_ASCII(0x0000, x, y, textbox, c, 0, "O");
 + 
     /* メインループ */      /* メインループ */
     for (;;) {      for (;;) {
         int ox = x, oy = y, oc = c;          int ox = x, oy = y, oc = c;
 + 
         switch (getsignal()) {          switch (getsignal()) {
         case 0:          case 0:
Line 57: Line 58:
             lib_waitsignal(0x0001, 0, 0);              lib_waitsignal(0x0001, 0, 0);
             continue;              continue;
 + 
         case 4 /* left */:          case 4 /* left */:
             if (x >  0)              if (x >  0)
                 x--;                  x--;
             break;              break;
 + 
         case 5 /* right */:          case 5 /* right */:
             if (x < 19)              if (x < 19)
                 x++;                  x++;
             break;              break;
 + 
         case 6 /* up */:          case 6 /* up */:
             if (y >  0)              if (y >  0)
                 y--;                  y--;
             break;              break;
 + 
         case 7 /* down */:          case 7 /* down */:
             if (y <  7)              if (y <  7)
                 y++;                  y++;
             break;              break;
 + 
         case 8 /* change */:          case 8 /* change */:
             c = (c + 1) & 0x0f;              c = (c + 1) & 0x0f;
             break;              break;
         }          }
 + 
         /* 何らかの変化があれば表示し直す */          /* 何らかの変化があれば表示し直す */
         if (x != ox || y != oy || c != oc) {          if (x != ox || y != oy || c != oc) {
Line 90: Line 91:
     }      }
 }  }
 + 
 void initsignalbox()  void initsignalbox()
 /* シグナルボックス初期化 */  /* シグナルボックス初期化 */
Line 97: Line 98:
     return;      return;
 }  }
 + 
 int getsignal()  int getsignal()
 /* 0が返されたら、シグナルなし */  /* 0が返されたら、シグナルなし */
Line 116: Line 117:
     return signal;      return signal;
 }  }
 + 
-''(以下未編集)'' -''(以下未編集)''
-ASKA版:"cntdwna1.ask" [osa_dir2では 249バイト] -ASKA版:"cntdwna1.ask" [osa_dir2では 249バイト]
Line 123: Line 124:
 segment CODE(USE32, PARA); default(code == CODE); asmout("[FILE 'cntdwna1.ask']");  segment CODE(USE32, PARA); default(code == CODE); asmout("[FILE 'cntdwna1.ask']");
 asmout("GLOBAL _OsaskMain");  asmout("GLOBAL _OsaskMain");
 + 
 void setdec3(); /* EAXをDS:ESIに書き込む */  void setdec3(); /* EAXをDS:ESIに書き込む */
 + 
 void _OsaskMain()  void _OsaskMain()
 {  {
     asmout("MOV EBX,data.init"); CALL(0xc7, 0);      asmout("MOV EBX,data.init"); CALL(0xc7, 0);
 + 
     for (;;) {      for (;;) {
         unsigned int count == EAX;          unsigned int count == EAX;
Line 144: Line 145:
     }      }
 }  }
 + 
 void setdec3()  void setdec3()
 {  {
Line 170: Line 171:
     return;      return;
 }  }
 + 
 asmout("[SECTION .data]");  asmout("[SECTION .data]");
 + 
 void data()  void data()
 {  {
Line 191: Line 192:
     DD(0x0018, 0x0007, 0, 0, 0, 10, 0); /* lib_waitsignaltime */      DD(0x0018, 0x0007, 0, 0, 0, 10, 0); /* lib_waitsignaltime */
     DD(0x0000); /* end of functions */      DD(0x0000); /* end of functions */
 + 
     ALIGNB(8);      ALIGNB(8);
 work:  work:
Line 204: Line 205:
     RESB(24);  /* 3x1文字分 (3 * 1 * 8) */      RESB(24);  /* 3x1文字分 (3 * 1 * 8) */
 }  }
 + 
-nask版:"cntdwnn1.nas" [osa_dir2では 251バイト] -nask版:"cntdwnn1.nas" [osa_dir2では 251バイト]
 ; "cntdwnn1.nas":countdwnをnaskで記述した例  ; "cntdwnn1.nas":countdwnをnaskで記述した例
 ;  stack:4k malloc:0k  ;  stack:4k malloc:0k
 + 
 [FORMAT "WCOFF"]  [FORMAT "WCOFF"]
 [INSTRSET "i486p"]  [INSTRSET "i486p"]
Line 216: Line 217:
 [BITS 32]  [BITS 32]
 [FILE "cntdwnn1.nas"]  [FILE "cntdwnn1.nas"]
 + 
 [SECTION .text]  [SECTION .text]
     GLOBAL _OsaskMain      GLOBAL _OsaskMain
 + 
 _OsaskMain:  _OsaskMain:
     MOV  EBX,init      MOV  EBX,init
Line 236: Line 237:
     CALL 0xc7:0      CALL 0xc7:0
     JMP  .mainloop      JMP  .mainloop
 + 
 setdec3:  setdec3:
     PUSH EDX      PUSH EDX
Line 261: Line 262:
     POP  EDX      POP  EDX
     RET      RET
 + 
 [SECTION .data]  [SECTION .data]
     ALIGNB 4      ALIGNB 4
Line 279: Line 280:
     DD 0x0018, 0x0007, 0, 0, 0, 10, 0 ; lib_waitsignaltime      DD 0x0018, 0x0007, 0, 0, 0, 10, 0 ; lib_waitsignaltime
     DD 0x0000 ; end of functions      DD 0x0000 ; end of functions
 + 
     ALIGNB 8      ALIGNB 8
 work:  work:
Line 289: Line 290:
 textbox:  textbox:
     RESB  64 + 3 * 1 * 8; テキストボックス構造体(3x1文字分)      RESB  64 + 3 * 1 * 8; テキストボックス構造体(3x1文字分)
 + 
- +*** 説明 [#m286c5df]
-*** 説明+
-概要: -概要:
--このプログラムは、ウィンドウを一つ開き、そのウィンドウに1秒おきに数字を表示していくだけのプログラムです。 --このプログラムは、ウィンドウを一つ開き、そのウィンドウに1秒おきに数字を表示していくだけのプログラムです。
Line 305: Line 306:
---この時間間隔指定ですが、少なくとも10ミリ秒以上はあってほしいです。これは何も10ミリ秒単位であることを要請しているわけでありません。11.52ミリ秒などでもかまいません。また頻繁に繰り替えすことがないのなら、10ミリ秒を下回ってもかまいません。将来のOSASKでは、連続して何度も10ミリ秒以下の指定をした場合、OS側で強制的に10ミリ秒間間隔に補正される可能性があります。現在のOSASKでは、OSの動作が不安定になります。ですからやってはいけません。 ---この時間間隔指定ですが、少なくとも10ミリ秒以上はあってほしいです。これは何も10ミリ秒単位であることを要請しているわけでありません。11.52ミリ秒などでもかまいません。また頻繁に繰り替えすことがないのなら、10ミリ秒を下回ってもかまいません。将来のOSASKでは、連続して何度も10ミリ秒以下の指定をした場合、OS側で強制的に10ミリ秒間間隔に補正される可能性があります。現在のOSASKでは、OSの動作が不安定になります。ですからやってはいけません。
-*** まとめ+*** まとめ [#q37b9541]
-これで時間を細かく制御できるようになるはずです。時間とともに表示を操作すれば動きのある表示(アニメーション)ができるでしょう。ここまでのところではテキストしか扱えないので、テキストアニメーションしかできませんが。それでも、少しは遊べるはずです。もねさんがすぐに「msg00」や「msg01」を作ったのもうなずけます。 -これで時間を細かく制御できるようになるはずです。時間とともに表示を操作すれば動きのある表示(アニメーション)ができるでしょう。ここまでのところではテキストしか扱えないので、テキストアニメーションしかできませんが。それでも、少しは遊べるはずです。もねさんがすぐに「msg00」や「msg01」を作ったのもうなずけます。
-精密な時間制御が比較的簡単にできることはOSASKアプリの特徴の一つです。他のOSよりも簡単にマスターできることでしょう。 -精密な時間制御が比較的簡単にできることはOSASKアプリの特徴の一つです。他のOSよりも簡単にマスターできることでしょう。
-*** おまけ+*** おまけ [#he570757]
-次回(no.0003)はキー入力を少しやります。これで、キー入力を反映できるようになるでしょう。 -次回(no.0003)はキー入力を少しやります。これで、キー入力を反映できるようになるでしょう。
-読んでいる人が追いつけないほど先に進んでもしょうがないので、こめんと欄でリクエストがきたら次回を書き始めます。 -読んでいる人が追いつけないほど先に進んでもしょうがないので、こめんと欄でリクエストがきたら次回を書き始めます。
-* こめんと欄+* こめんと欄 [#t55d4c88]
-シグナルとは何でしょう?APIリファレンスも見ていましたが、シグナルの概念がよく分かりません(汗。 -- ''nika'' SIZE(10){2005-02-02 (水) 04:11:58} -シグナルとは何でしょう?APIリファレンスも見ていましたが、シグナルの概念がよく分かりません(汗。 -- ''nika'' SIZE(10){2005-02-02 (水) 04:11:58}
-それはこれから書くことですので、このページが出来上がるまで(=''以下未編集''の表示が消えるまで)のんびりとお待ちください。 -- [[K]] SIZE(10){2005-02-02 (水) 13:16:38} -それはこれから書くことですので、このページが出来上がるまで(=''以下未編集''の表示が消えるまで)のんびりとお待ちください。 -- [[K]] SIZE(10){2005-02-02 (水) 13:16:38}
#comment #comment

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

目次
メンバー一覧


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