page0045
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* OSECPU-ASKA入門 #0005
-(by [[K]], 2013.06.24)
** (0) はじめに
-以下の記事はver.0.49のWindows版を前提にしています。他の...
--たとえば osecpu049d.zip とかのことです
~
-もくじ
--[[page0036]]: #0000
--[[page0037]]: #0001
--[[page0038]]: #0002
--[[page0039]]: #0003
--[[page0044]]: #0004
--[[page0045]]: #0005
** (1) drawString
-junkApi_drawString(mode, xsiz, ysiz, x0, y0, color, stri...
--グラフィクス描画用のウィンドウの中に文字を書きます。mod...
--xsizやysizは1以上の整数を指定します。両方が1のとき、1文...
--x0とy0は1文字目の左上の座標を指定します。
--(例)
#include "osecpu_ask.h"
junkApi_drawString(4, 1, 1, 0, 0, 7, 'abcd');
junkApi_drawString(4, 8, 8, 0, 20, 7, 'abcd');
--現状で表示できるのはASCIIキャラクタだけです。'\n'や'\t'...
--拡大するとぎざぎざが非常に目立ちますが、それは仕様です...
---どうしてもきれいに描きたい場合は、アプリが自前で描画す...
** (2) リリースモード
-OSECPUアプリは小ささが自慢と言うか取り柄なのですが、ここ...
-最初の[[page0036]]の(1)で紹介したアプリのビルド方法は、...
-しかしもうデバッグも終了して、リリースするだけとなれば、...
--註:すべてのデバッグ情報を簡単に取り除く手段は用意して...
~
-まず、デバッグ情報の過剰な生成をやめさせる必要があります。
prompt>amake app0038 -DNODBGINFO0
--これはちょっと分かりにくいですが、NO DBG INFO 0 です。...
--もっとわかりやすいスイッチにすればよかったと、数週間前...
-これでたいていのプログラムは結構小さくなります。これで20...
~
-さらに小さくしたい場合は、OSECPU標準のパッカーを使います。
prompt>osectols tool:appack flags:8 in:app0038.ose out:a...
--ただしこれをやる場合は、ext_tolsにあるbim2binとt5lzmaを...
--[2013.07.30追記] OSECPU ver.0.64以降では、flags:8にして...
-そうすると例えばこういう表示が出ます。
org:34 tk5:48
-これはパッキングしたほうが大きくなってしまったことを意味...
-しかしアプリによっては、tk5のほうが小さくなることがあり...
~
-これで完成です。めでたしめでたし!
** (3) 複数の関数を作る例
-細かいことは書きませんが、複数の関数を宣言して使いたい場...
#define L_func1 LOCAL(0)
#define L_func2 LOCAL(1)
#define L_func3 LOCAL(2)
LOCALLABELS(3);
#define func1() CALL(L_func1)
#define func2() CALL(L_func2)
#define func3() CALL(L_func3)
-参考にしてください。
** (4) sleepのmodeについて
-[[page0039]]の(1)でsleepを紹介しましたが、その際にmodeの...
-modeはビットごとに意味を持っています。したがって以下を加...
--1: グラフィックス画面の自動全画面flushを抑制する。
---これを指定しなければ、sleepが呼ばれるたびに全画面flush...
---とはいえ、現状ではまだ説明してないのでflushって何?状...
---しいて言えば、前回のsleepから一切画面を書き換えていな...
--2: sleepし終わった時にinkeyバッファをチェックし、もし空...
---つまりこれを指定すれば、inkeyバッファが空の状態で戻っ...
** (5) inkeyのmodeについて
-[[page0039]]の(5)でinkeyを紹介しましたが、その際にmodeの...
-modeはビットごとに意味を持っています。したがって以下を加...
---とはいえ、現状では1しかないので組み合わせようがないで...
--1: 非peekモードにする。
---これを0にしてpeekモード指定すると、inkeyバッファの先頭...
** (6) グラフィックスで[[page0044]]の(4)をやってみよう!
#include "osecpu_ask.h"
#define L_drawDec LOCAL(0)
LOCALLABELS(1);
#define drawDec(mode, xsiz, ysiz, x1, y0, col, i) R30=...
#define XSIZ 16
#define YSIZ 16
// main
do {
SInt32 i:R00;
for (i = 111; i != -100; i--) {
junkApi_fillRect(0, 8*XSIZ*3, 16*YSIZ, 0, 0,...
drawDec(4, XSIZ, YSIZ, 8*XSIZ*3, 0, 7, i); /...
junkApi_sleep(0, 1000);
}
}
junkApi_sleep(0, -1);
beginFunc(L_drawDec);
do {
SInt32 mode:R08, xsiz:R02, ysiz:R09, x1:R01, y0:...
mode = R30; xsiz = R31; ysiz = R32; x1 = R33; y0...
flag = 0;
if (i < 0) {
flag = -1;
i *= -1;
}
do {
ii = (i % 10) + '0';
i /= 10;
x1 -= xsiz * 8;
junkApi_drawChar(mode, xsiz, ysiz, x1, y0, c...
if (i > 0) continue;
}
if (flag != 0) {
x1 -= xsiz * 8;
junkApi_drawChar(mode, xsiz, ysiz, x1, y0, c...
}
}
endFunc();
-特に説明しなくてもわかりますよね、きっと。
** (7) for構文 #1
-[[page0038]]の(1)でforの説明をしましたが、その続きです。
-まず、 for (;;) { ... } という構文があります。これは無限...
-次に for (;0;) { ... } という構文があります。これは1回し...
- do は1回しか実行しない、スコープ制限くらいにしか役に立...
--if - else if - else if ...などができないOSECPUにとって...
do {
if (i < 0) { ...; break; }
if (i < 10) { ...; break; }
if (i < 20) { ...; break; }
...
}
// 上記は以下の代用になっています.
if (i < 0) { ... }
else if (i < 10) { ... }
else if (i < 20) { ... }
else { ... }
-do の裏技その2。continueができるのです。上記の(6)でもや...
** つづく
-[[page0048]]につづく
* こめんと欄
#comment
終了行:
* OSECPU-ASKA入門 #0005
-(by [[K]], 2013.06.24)
** (0) はじめに
-以下の記事はver.0.49のWindows版を前提にしています。他の...
--たとえば osecpu049d.zip とかのことです
~
-もくじ
--[[page0036]]: #0000
--[[page0037]]: #0001
--[[page0038]]: #0002
--[[page0039]]: #0003
--[[page0044]]: #0004
--[[page0045]]: #0005
** (1) drawString
-junkApi_drawString(mode, xsiz, ysiz, x0, y0, color, stri...
--グラフィクス描画用のウィンドウの中に文字を書きます。mod...
--xsizやysizは1以上の整数を指定します。両方が1のとき、1文...
--x0とy0は1文字目の左上の座標を指定します。
--(例)
#include "osecpu_ask.h"
junkApi_drawString(4, 1, 1, 0, 0, 7, 'abcd');
junkApi_drawString(4, 8, 8, 0, 20, 7, 'abcd');
--現状で表示できるのはASCIIキャラクタだけです。'\n'や'\t'...
--拡大するとぎざぎざが非常に目立ちますが、それは仕様です...
---どうしてもきれいに描きたい場合は、アプリが自前で描画す...
** (2) リリースモード
-OSECPUアプリは小ささが自慢と言うか取り柄なのですが、ここ...
-最初の[[page0036]]の(1)で紹介したアプリのビルド方法は、...
-しかしもうデバッグも終了して、リリースするだけとなれば、...
--註:すべてのデバッグ情報を簡単に取り除く手段は用意して...
~
-まず、デバッグ情報の過剰な生成をやめさせる必要があります。
prompt>amake app0038 -DNODBGINFO0
--これはちょっと分かりにくいですが、NO DBG INFO 0 です。...
--もっとわかりやすいスイッチにすればよかったと、数週間前...
-これでたいていのプログラムは結構小さくなります。これで20...
~
-さらに小さくしたい場合は、OSECPU標準のパッカーを使います。
prompt>osectols tool:appack flags:8 in:app0038.ose out:a...
--ただしこれをやる場合は、ext_tolsにあるbim2binとt5lzmaを...
--[2013.07.30追記] OSECPU ver.0.64以降では、flags:8にして...
-そうすると例えばこういう表示が出ます。
org:34 tk5:48
-これはパッキングしたほうが大きくなってしまったことを意味...
-しかしアプリによっては、tk5のほうが小さくなることがあり...
~
-これで完成です。めでたしめでたし!
** (3) 複数の関数を作る例
-細かいことは書きませんが、複数の関数を宣言して使いたい場...
#define L_func1 LOCAL(0)
#define L_func2 LOCAL(1)
#define L_func3 LOCAL(2)
LOCALLABELS(3);
#define func1() CALL(L_func1)
#define func2() CALL(L_func2)
#define func3() CALL(L_func3)
-参考にしてください。
** (4) sleepのmodeについて
-[[page0039]]の(1)でsleepを紹介しましたが、その際にmodeの...
-modeはビットごとに意味を持っています。したがって以下を加...
--1: グラフィックス画面の自動全画面flushを抑制する。
---これを指定しなければ、sleepが呼ばれるたびに全画面flush...
---とはいえ、現状ではまだ説明してないのでflushって何?状...
---しいて言えば、前回のsleepから一切画面を書き換えていな...
--2: sleepし終わった時にinkeyバッファをチェックし、もし空...
---つまりこれを指定すれば、inkeyバッファが空の状態で戻っ...
** (5) inkeyのmodeについて
-[[page0039]]の(5)でinkeyを紹介しましたが、その際にmodeの...
-modeはビットごとに意味を持っています。したがって以下を加...
---とはいえ、現状では1しかないので組み合わせようがないで...
--1: 非peekモードにする。
---これを0にしてpeekモード指定すると、inkeyバッファの先頭...
** (6) グラフィックスで[[page0044]]の(4)をやってみよう!
#include "osecpu_ask.h"
#define L_drawDec LOCAL(0)
LOCALLABELS(1);
#define drawDec(mode, xsiz, ysiz, x1, y0, col, i) R30=...
#define XSIZ 16
#define YSIZ 16
// main
do {
SInt32 i:R00;
for (i = 111; i != -100; i--) {
junkApi_fillRect(0, 8*XSIZ*3, 16*YSIZ, 0, 0,...
drawDec(4, XSIZ, YSIZ, 8*XSIZ*3, 0, 7, i); /...
junkApi_sleep(0, 1000);
}
}
junkApi_sleep(0, -1);
beginFunc(L_drawDec);
do {
SInt32 mode:R08, xsiz:R02, ysiz:R09, x1:R01, y0:...
mode = R30; xsiz = R31; ysiz = R32; x1 = R33; y0...
flag = 0;
if (i < 0) {
flag = -1;
i *= -1;
}
do {
ii = (i % 10) + '0';
i /= 10;
x1 -= xsiz * 8;
junkApi_drawChar(mode, xsiz, ysiz, x1, y0, c...
if (i > 0) continue;
}
if (flag != 0) {
x1 -= xsiz * 8;
junkApi_drawChar(mode, xsiz, ysiz, x1, y0, c...
}
}
endFunc();
-特に説明しなくてもわかりますよね、きっと。
** (7) for構文 #1
-[[page0038]]の(1)でforの説明をしましたが、その続きです。
-まず、 for (;;) { ... } という構文があります。これは無限...
-次に for (;0;) { ... } という構文があります。これは1回し...
- do は1回しか実行しない、スコープ制限くらいにしか役に立...
--if - else if - else if ...などができないOSECPUにとって...
do {
if (i < 0) { ...; break; }
if (i < 10) { ...; break; }
if (i < 20) { ...; break; }
...
}
// 上記は以下の代用になっています.
if (i < 0) { ... }
else if (i < 10) { ... }
else if (i < 20) { ... }
else { ... }
-do の裏技その2。continueができるのです。上記の(6)でもや...
** つづく
-[[page0048]]につづく
* こめんと欄
#comment
ページ名: