2: 2004-05-04 (火) 17:40:14 [6] | 現: 2024-01-08 (月) 12:58:55 k-tan[7] [8] | ||
---|---|---|---|
Line 5: | Line 5: | ||
-512バイトに収めるということになると、どうしてもアセンブラが有利になってしまうので(いやもちろん1KBでもアセンブラが有利ですが)、C言語ファンの人がもっと有利に戦えるように、ここにテクニックをまとめたいと思います。 | -512バイトに収めるということになると、どうしてもアセンブラが有利になってしまうので(いやもちろん1KBでもアセンブラが有利ですが)、C言語ファンの人がもっと有利に戦えるように、ここにテクニックをまとめたいと思います。 | ||
-まずは最新版<guigui00.h>を入手しましょう。これはosa_dir3にバンドル予定されているものですが、たぶん5/12にosa_dir3が間に合わないので、とりあえず以下のURLからダウンロードしてください。osa_dir2のz_tools/guigui00/guigui00.hを上書きすればOKです。 | -まずは最新版<guigui00.h>を入手しましょう。これはosa_dir3にバンドル予定されているものですが、たぶん5/12にosa_dir3が間に合わないので、とりあえず以下のURLからダウンロードしてください。osa_dir2のz_tools/guigui00/guigui00.hを上書きすればOKです。 | ||
- | --http://k.hideyosi.com/test060.lzh (4.24KB) | + | --http://k.hideyosi.com/test062.lzh (26.3KB) |
-さて結局のところ、アセンブラがC言語に対してやたらと有利なのは、lib_execcmdをじゃんじゃん使うからです(と僕は思う)。まあそりゃあもちろん出力されるコードの質も違いますが。しかしとにかくCでもlib_execcmdを活用すれば、その差は縮むのです。ということでここではlib_execcmdの活用を中心に説明します。 | -さて結局のところ、アセンブラがC言語に対してやたらと有利なのは、lib_execcmdをじゃんじゃん使うからです(と僕は思う)。まあそりゃあもちろん出力されるコードの質も違いますが。しかしとにかくCでもlib_execcmdを活用すれば、その差は縮むのです。ということでここではlib_execcmdの活用を中心に説明します。 | ||
Line 43: | Line 43: | ||
#define _ (void *) | #define _ (void *) | ||
#define __(a, b, c, d) (void *) (a | b << 8 | c << 16 | d << 24) | #define __(a, b, c, d) (void *) (a | b << 8 | c << 16 | d << 24) | ||
+ | |||
static void *cmd0[] = { | static void *cmd0[] = { | ||
_ LIB_FN_INIT, _ &lib_work, | _ LIB_FN_INIT, _ &lib_work, | ||
Line 109: | Line 109: | ||
|lib_opensoundtrack|LIB_FN_OPENSOUNDTRAK|| | |lib_opensoundtrack|LIB_FN_OPENSOUNDTRAK|| | ||
|lib_controlfreq|LIB_FN_CONTROLFREQ|| | |lib_controlfreq|LIB_FN_CONTROLFREQ|| | ||
- | |lib_loadfontset|LIB_FN_LOADFONTSET|| | ||
|lib_loadfontset0|LIB_FN_LOADFONTSET0|| | |lib_loadfontset0|LIB_FN_LOADFONTSET0|| | ||
|lib_makecharset|LIB_FN_MAKECHARSET|| | |lib_makecharset|LIB_FN_MAKECHARSET|| | ||
Line 151: | Line 150: | ||
-lib_unmapmodule (LIB_FN_UNMAPMODULE) | -lib_unmapmodule (LIB_FN_UNMAPMODULE) | ||
--addrの後ろに0x000cを追加。 | --addrの後ろに0x000cを追加。 | ||
+ | -lib_loadfontset (LIB_FN_LOADFONTSET) | ||
+ | --最後に0x000cを追加。 | ||
-lib_wsjis2gg00jpn0 (LIB_FN_WSJIS2GG00JPN0) | -lib_wsjis2gg00jpn0 (LIB_FN_WSJIS2GG00JPN0) | ||
- | --先頭にoptとして1を追加、sjisとgg00jpnのうしろにそれぞれ0x000cを追加。 | + | --先頭にoptとして1を追加、sjisとgg00jpnの後ろにそれぞれ0x000cを追加。 |
-lib_seuc2gg00 (LIB_FN_SEUC2GG00) | -lib_seuc2gg00 (LIB_FN_SEUC2GG00) | ||
--先頭にoptとして2を追加、seucとgg00のうしろにそれぞれ0x000cを追加。 | --先頭にoptとして2を追加、seucとgg00のうしろにそれぞれ0x000cを追加。 | ||
Line 165: | Line 166: | ||
* こめんと欄 | * こめんと欄 | ||
+ | -guigui00.hをインラインアセンブラ化するってのはどうかな……ってこりゃ最後の数バイトか -- [[I.Tak.]] SIZE(10){2004-05-06 (木) 08:24:17} | ||
+ | |||
#comment | #comment |
(This host) = http://osask.net