a23_usm004
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* a23_useSelfMade #4
-(by [[K]], 2023.01.31)
--親ページ: [[a23_useSelfMade]]
** 2023.01.31 Tue #1
-自分で作ったものを今後も使っていけそうか?
--というのがこの一連の記事の趣旨なので、定期的に確認しよ...
-''[1ec, ecrun, ecc0]'' → 〇
-easy-Cを成り立たせているツール群。
-これはかなり便利なので(ほぼ常に立ち上げっぱなしになって...
-ただ下請けになっているecrunやecc0を別々の実行ファイルに...
-''[HL-9b]'' → 〇
-たった740行で書かれたインタプリタ。だけどeasy-Cのプログ...
-プログラムの実行に際してgccとかを使うわけじゃないので、...
-最近は再起動後にRAMディスクを設定するのが面倒になってき...
-このHL-9bと上記の1ecを統合する(コンパイル実行かインタプ...
(案)
>pr 1+2*3 → こんなふうに普通に書いたら、インタプリタ実行
7
>!pr 1+2*3 → こんなふうに!を頭に付けたらgccでコンパイル...
7
-後述のacl1ライブラリに、AEc_exec()っていう関数を作って、...
-あとHL-9bはCtrl-Cに対応してなくて、これやるとインタプリ...
-''[acl1]'' → 〇
-自分用のグラフィックライブラリ。最近はMML演奏もサポート。
-今のところこれを使わなくなる未来はちょっと考えられない・...
-''[自作スタートアップ、自作リンカスクリプト]'' → 〇
-まだ落ち着いていなくて開発途上だけど、これがあれば簡単に...
-''[雑多なミニアプリ]'' → △
-この中には使わなくなるものが結構ありそうだけど、デモとか...
-でもこういうのを作っていかないと、言語やツールの価値も限...
~
** 2023.02.01 Wed #1
-すごく小さな実行ファイルを作るための手順(Windows用):
-[1]まず適当なC言語のソースコードを用意します。これを hel...
#include <stdio.h>
int main()
{
puts("hello, wolrd");
return 0;
}
-[2]次に MinGW 5.1.6 を c:\mingw516 にインストールします...
--https://essen.osask.jp/files/MinGW516.exe
-[3]次にmstartup.cとして以下を用意します。
#include <stdlib.h>
int __getmainargs(int *argc, char ***argv, char ***env, ...
int mmain(int argc, char **argv);
void mainCRTStartup()
{
int argc, startupinfo[100/4 /* でもたぶん68バイトし...
char **argv, **env;
__getmainargs(&argc, &argv, &env, 0, startupinfo);
exit(mmain(argc, argv));
}
-[4]リンカスクリプトとして、以下をldscript.txtとして保存...
OUTPUT_FORMAT(pei-i386)
SECTIONS
{
. = SIZEOF_HEADERS;
. = ALIGN(__section_alignment__);
.text __image_base__ + ( __section_alignment__ < 0x10...
{
*(.text)
*(SORT(.text$*))
*(.rdata)
*(SORT(.rdata$*))
}
.idata BLOCK(__section_alignment__) :
{
SORT(*)(.idata$2)
SORT(*)(.idata$3)
/* These zeroes mark the end of the import list. */
LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
SORT(*)(.idata$4)
SORT(*)(.idata$5)
SORT(*)(.idata$6)
SORT(*)(.idata$7)
__data_start__ = . ;
*(.data)
*(.data2)
*(SORT(.data$*))
}
.bss BLOCK(__section_alignment__) :
{
__bss_start__ = . ;
*(.bss)
*(COMMON)
__bss_end__ = . ;
}
}
-[5]最後に以下のバッチファイルを作ります。 mcc.bat という...
c:\mingw516\bin\gcc -m32 -Os mstartup.c -c -o mstartup.obj
c:\mingw516\bin\gcc -m32 -Os %1.c -c -o %1.obj -Dmain=mm...
c:\mingw516\bin\ld -T ldscript.txt -o %1.exe -Bdynamic -...
-Lc:/mingw516/bin/../lib/gcc -Lc:/mingw516/bin/../lib/gc...
-Lc:/mingw516/bin/../lib/gcc/mingw32/3.4.5/../../.. -lmi...
-lshell32 -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt
-[6]これで、以下のようにすると、 hello.c から hello.exe ...
prompt>mcc hello
-このhello.exeは1.5KBで、その内訳はヘッダ512バイト、.text...
~
-[Q]どうやってこの結論にたどり着いたのか?
-[A]なんか適当に調べてみたら mainCRTStartup が真のエント...
-[Q]mainをmmainに読み替えさせているようだけど、これは何の...
-[A]gccはmainという関数を見つけると特別扱いするようで、な...
-[Q]リンカスクリプトの書き方はどこで調べたの?
-[A]あーそれは調べていません。[[a23_usm003]]の「2023.01.2...
prompt>gcc --verbose hello.c -O3 -o hello.exe
でデフォルトを出力させて、そこから「たぶんここはC言語では...
-[Q]ldのたくさんあるライブラリ指定リストはどうやって入手...
-[A]これも[[a23_usm003]]の「2023.01.29 Sun #1」の回に書い...
prompt>gcc --verbose hello.c -O3 -o hello.exe
ってやって取得しました。collect2.exe(=ldの実体)への引...
-[Q]なぜ.textの中に.rdataを入れるの?.dataをidataの中に入...
-[A].exeファイルのヘッダサイズは512バイトでアラインされる...
-[Q]なぜMinGWの最新版を使わずに、MinGW 5.1.6なんか使うの?
-[A]これは[[a23_usm003]]の「2023.01.29 Sun #2」の回に書い...
-[Q]これ毎回やらないといけないの?
-[A]いえいえ。一度作ってしまえば、それ以降は、 prompt>mcc...
-[Q]これ本当に安全なの?削りすぎてうまく動かなくなる可能...
-[A]心配なら使わないのが一番です。普通にやりましょう。バ...
-[Q]ここまで攻めるのなら.textの中に.idataも入れたらいいん...
-[A]なんと夢のあることを!うーん、writalbeの属性があって...
--試しました。うーん、やはり.textはreadonlyじゃなきゃいけ...
~
** 2023.02.01 Wed #2
-osdev-jpでこんな話を教えてもらいました!
--デモシーンにようこそ!超低容量プログラミングで遊ぶカル...
--https://jp.ign.com/cedec-2016/6411/news/
-ここによると、「crinklerというPacker」がいいらしいです。...
-キーワードが分かれば検索していけます。この記事も勉強にな...
--crinklerとvisual studio 2017で400byteのexeを作る
--https://nanka.hateblo.jp/entry/2018/07/01/034341
-https://yosshin4004.github.io/ の中に「PC 4K Intro minif...
~
** 2023.02.02 Thu #1
-小学生がMMLによる音楽再生に興味を持ったので、もっと簡単...
[改造前]
APlay *p = aOpenPlay(100000); // 適当な大きさのバッファ.
APlay_mml(p, 0, "CDEFEDCR EFGAGFER");
APlay_mml(p, 1, "R1R1 CDEFEDCR");
APlay_run(p);
[改造後]
PLAY "CDEFEDCR EFGAGFER"; PLAY1 "R1R1 CDEFEDCR"
→もはやワンライナーで十分。openもrunも自動でやる。
~
** 2023.02.02 Thu #2
-crinklerとvisual studio 2017で400byteのexeを作る
-https://nanka.hateblo.jp/entry/2018/07/01/034341
-これを見ても、Visual Studio のバージョンが違うせいなのか...
-よしきめた。いったんこれはやめよう。ここから頑張ったとし...
~
** 2023.02.03 Fri #1
-以下は「ねこふんじゃった」を演奏するアプリです。
-nekofun.c[48行]
APlay *p = aOpenPlay16(100000);
// 1-
APlay_mml(p, 0, "T180 @1 r2.e-8d-8 r4g-4g-4e-8d-8 r4g-4g...
APlay_mml(p, 1, "@1 r2.e-8d-8 r4<b-4b-4>e-8d-8 r4<b-4b-4...
APlay_mml(p, 2, "@1 r2.r4 <g-4r4r2 g-4r4r2 g-4r4e-4r4");
// 5-
APlay_mml(p, 0, "r4f4f4e-8d-8 r4f4f4e-8d-8 r4f4f4e-8d-8 ...
APlay_mml(p, 1, "r4>c-4c-4e-8d-8 r4c-4c-4e-8d-8 r4c-4c-4...
APlay_mml(p, 2, "d-4r4r2 d-4r4r2 d-4r4r2 d-4r4e-4r4");
// 9-
APlay_mml(p, 0, "r4g-4g-4e-8d-8 r4g-4g-4e-8d-8 r4g-4g-4e...
APlay_mml(p, 1, "r4<b-4b-4>e-8d-8 r4<b-4b-4>e-8d-8 r4<b-...
APlay_mml(p, 2, "g-4r4r2 >b-4r4r2 b-4r4r2 b-4r4>d-4r4");
// 13-
APlay_mml(p, 0, "r4f4f4e-8d-8 r4f4f4e-8d-8 r4f4f4e-8d-8 ...
APlay_mml(p, 1, "r4>c-4c-4e-8d-8 r4c-4c-4e-8d-8 r4c-4c-4...
APlay_mml(p, 2, "e-4r4r2 e-4r4r2 e-4r4r2 e-4r4d-4r4");
// 17-
APlay_mml(p, 0, "r4g-4g-4e-8d-8 r4g-4r4g-4 r4g-4r4g-4 r1...
APlay_mml(p, 1, "r4<b-4b-4>e-8d-8 r4<b-4r4b-4 r4b-4r4b-4...
APlay_mml(p, 2, "<b-4r4r2 <g-4r4d-4r4 g-4r4d-4r4 g-4f4g-...
// 21-
APlay_mml(p, 0, "r4f4f4e-8d-8 r4f4r4f4 r4f4r4f4 r1");
APlay_mml(p, 1, "r4>c-4c-4e-8d-8 r4c-4r4c-4 r4c-4r4c-4 r...
APlay_mml(p, 2, "a-4r4r2 a-4r4d-4r4 a-4r4d-4r4 a-4g4a-4a...
// 25-
APlay_mml(p, 0, "r4g-4g-4e-8d-8 r4g-4g-4e-8d-8 r4g-4g-4e...
APlay_mml(p, 1, "r4<b-4b-4>e-8d-8 r4<b-4b-4>e-8d-8 r4<b-...
APlay_mml(p, 2, "b-4r4r2 g-4r4r2 g-4r4r2 g-4r4e-4r4");
// 29-
APlay_mml(p, 0, "r4f4f4e-8d-8 r4f4f4e-8d-8 r4f4f4e-8d-8 ...
APlay_mml(p, 1, "r4>c-4c-4e-8d-8 r4c-4c-4e-8d-8 r4c-4c-4...
APlay_mml(p, 2, "d-4r4r2 d-4r4r2 d-4r4r2 d-4r4e-4r4");
// 33-
APlay_mml(p, 0, "r4g-4g-4r4 g-4d-8d-8d4d-4 r4f4g-4r4");
APlay_mml(p, 1, "r4<b-4b-4r4 b-4>d-8d-8d4d-4 r4c-4<b-4r4...
APlay_mml(p, 2, "g-4r4r2 d-4r4r2 r4d-4<g-4r4");
APlay_run(p);
~
** 2023.02.03 Fri #2
-C言語入門としてprintf("hello, world\n");が定番ですが、こ...
-それならばと、aOpwnWin()して円や四角を書いて、グラフィッ...
-変数を使わないくらい簡単で、だけど「わー、プログラミング...
-私は、それはPLAY文だと思います。MMLによる簡単な演奏なら...
-まあでも、やっぱり変数とかループとかを使うようにならない...
~
** 2023.02.03 Fri #3
-小学生に教える案。CapsLockをONにしておく。
-PRとPRSPと変数演算とGOとIFが使えるようになればいい。それ...
[1] 「1」を表示してみよう。
PR 1
[2] Iに1を入れてIを表示してみよう。
I = 1; PR I
[3] [2]の続きとして、Iを1ずつ増やして、3まで表示してみよ...
I = 1; PR I;
I = I + 1; PR I;
I = I + 1; PR I;
[4] GOを使って読み飛ばしてみるよ。どうなると思う?・・・...
NO1: PR 1; GO NO3;
NO2: PR 2;
NO3: PR 3;
NO4: PR 4;
[5] GOで前に戻ることもできるよ。どうなると思う?
NO1: PR 1; GO NO1;
[6] じゃあこれはどうなるかな?
I = 1;
NO1:
PR I;
I = I + 1;
GO NO1;
数字がつながって見にくかったら、 PR I; の後に PRSP; を追...
[7] ずっと止まらないのは困るかな。じゃあ、100になったら...
I = 1;
NO1:
PR I; PRSP;
I = I + 1;
IF (I <= 100) GO NO1; // 101になったらgoしなくなるよ!
[8] 2から100までの偶数を表示するプログラムを書いてみよう!
[9] 1から99までの奇数を表示するプログラムを書いてみよう!
[10] 1, 2, 4, 8, 16, 32, ... で65536までを表示るプログラ...
[11] 1から10までの和は55だけど、それを計算させてみよう。
PR 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
でも1から100までだったら、この調子では書けないね。どうし...
J = 0; I = 1;
NO1:
J = J + I;
I = I + 1;
IF (I <= 100) GO NO1;
PR J;
どうしてこれでうまくいくのか説明ができるかな?
~
** 2023.02.05 Sun #1
-もうずっとeasy-Cのプロンプト(といううかHL-9bのプロンプ...
-なぜ「$」にしたのかというと、shellのsに形が似ていること...
-ということで整理すると、
--「$」で始まる命令はシェルコマンド
--「!」で始まる命令はgcc経由で実行(コンパイルは遅いけど...
--それ以外はHL-9bの中で普通に実行(実行はそれほど速くない...
-になります。
~
** 2023.02.06 Mon #1
-どんどん便利になってきたeasy-Cですが、そろそろ先が見えて...
-もうずっとeasy-Cのプロンプトは出しっぱなしで、もう何の違...
-シェルと言えば、私が20年前にOS自作をしていたころは、シェ...
-・・・という昔の夢を急に思い出しました。そうか私はC++の...
-C言語がシェルになったら、どうあるべきでしょうか。私が真...
-シェルにはリダイレクトがありますが、C言語にはそんなもの...
-シェルにはシェルスクリプトがあります。シェルスクリプトを...
-・・・と考え始めたらどんどんアイデアが出てきました。これ...
~
** 2023.02.06 Mon #2
-今日は、HL-9bと1ecとecrunとecc0をすべて統合して、HL-9cと...
--[1]「インタプリタ実行」と「gccでコンパイルして実行」を...
--[2]インタプリタ中でCtrl-Cしてもプロンプトに戻ってこられ...
--[3]gcc実行に限れば、適当にnewfunc()みたいな関数をテキス...
-この[3]について追加で説明しておきます。たとえば、
char *myfunc(int a, int b)
{
char *s = malloc(100);
sprintf(s, "hello: a+b=%d\n", a + b);
return s;
}
-という関数を書いたとします。これをmyfunc.cという名前で保...
>!prs myfunc(1, 2)
hello: a+b=3
>
-と実行できるのです。なかなかいいと思いませんか?・・・pr...
~
** 2023.02.06 Mon #3
-もしかしたら、私の中では main関数を書く時代は終わったか...
~
** 2023.02.07 Tue #1
-[自分への戒め]
-改造は小さくなければいけない。大きな改造は開発の停滞を招...
-なぜ大きな開発がダメかというと、大きな開発の場合、「作っ...
-作ってみないと分からないことがある。使ってみないと分から...
~
** 2023.02.07 Tue #2
-昨日は相当に頑張って頭が疲れているので、今日はeasy-Cはお...
~
** 2023.02.08 Wed #1
-自分用のメモ:PLAY命令の音量指定は1~127。最大値は255で...
~
** 2023.02.08 Wed #2
-PLAY文がHL-9cで未サポートだったので、動くように改造しま...
-prやprsもPRやPRSのように大文字で書いてもOKにしました。こ...
-小学1年生がeasy-Cを徐々に習得していて自分でプログラムを...
-またシェルコマンドを拡張して$$というのも作りました。これ...
-これらの拡張は大人の私にとってもかなり便利で、さらに快適...
-こんな感じのことができます。
HL9>NEW TULIP.C
HL9>$$TULIP.C ← $$は別のプロセスで立ち上げるシェルコマ...
HL9>RUN TULIP.C ← これで演奏されます。
-ちなみに TULIP.C の中身はこんな感じです。
PLAY "CDERCDERGEDCDEDR";
PLAY "CDERCDERGEDCDECR";
PLAY "GGEGAAGREEDDC2R";
~
// persistent-C
//startupのasm化
//nekofun. invader.pr.prs.prlf.prsp
//winのクローズ
* こめんと欄
#comment
終了行:
* a23_useSelfMade #4
-(by [[K]], 2023.01.31)
--親ページ: [[a23_useSelfMade]]
** 2023.01.31 Tue #1
-自分で作ったものを今後も使っていけそうか?
--というのがこの一連の記事の趣旨なので、定期的に確認しよ...
-''[1ec, ecrun, ecc0]'' → 〇
-easy-Cを成り立たせているツール群。
-これはかなり便利なので(ほぼ常に立ち上げっぱなしになって...
-ただ下請けになっているecrunやecc0を別々の実行ファイルに...
-''[HL-9b]'' → 〇
-たった740行で書かれたインタプリタ。だけどeasy-Cのプログ...
-プログラムの実行に際してgccとかを使うわけじゃないので、...
-最近は再起動後にRAMディスクを設定するのが面倒になってき...
-このHL-9bと上記の1ecを統合する(コンパイル実行かインタプ...
(案)
>pr 1+2*3 → こんなふうに普通に書いたら、インタプリタ実行
7
>!pr 1+2*3 → こんなふうに!を頭に付けたらgccでコンパイル...
7
-後述のacl1ライブラリに、AEc_exec()っていう関数を作って、...
-あとHL-9bはCtrl-Cに対応してなくて、これやるとインタプリ...
-''[acl1]'' → 〇
-自分用のグラフィックライブラリ。最近はMML演奏もサポート。
-今のところこれを使わなくなる未来はちょっと考えられない・...
-''[自作スタートアップ、自作リンカスクリプト]'' → 〇
-まだ落ち着いていなくて開発途上だけど、これがあれば簡単に...
-''[雑多なミニアプリ]'' → △
-この中には使わなくなるものが結構ありそうだけど、デモとか...
-でもこういうのを作っていかないと、言語やツールの価値も限...
~
** 2023.02.01 Wed #1
-すごく小さな実行ファイルを作るための手順(Windows用):
-[1]まず適当なC言語のソースコードを用意します。これを hel...
#include <stdio.h>
int main()
{
puts("hello, wolrd");
return 0;
}
-[2]次に MinGW 5.1.6 を c:\mingw516 にインストールします...
--https://essen.osask.jp/files/MinGW516.exe
-[3]次にmstartup.cとして以下を用意します。
#include <stdlib.h>
int __getmainargs(int *argc, char ***argv, char ***env, ...
int mmain(int argc, char **argv);
void mainCRTStartup()
{
int argc, startupinfo[100/4 /* でもたぶん68バイトし...
char **argv, **env;
__getmainargs(&argc, &argv, &env, 0, startupinfo);
exit(mmain(argc, argv));
}
-[4]リンカスクリプトとして、以下をldscript.txtとして保存...
OUTPUT_FORMAT(pei-i386)
SECTIONS
{
. = SIZEOF_HEADERS;
. = ALIGN(__section_alignment__);
.text __image_base__ + ( __section_alignment__ < 0x10...
{
*(.text)
*(SORT(.text$*))
*(.rdata)
*(SORT(.rdata$*))
}
.idata BLOCK(__section_alignment__) :
{
SORT(*)(.idata$2)
SORT(*)(.idata$3)
/* These zeroes mark the end of the import list. */
LONG (0); LONG (0); LONG (0); LONG (0); LONG (0);
SORT(*)(.idata$4)
SORT(*)(.idata$5)
SORT(*)(.idata$6)
SORT(*)(.idata$7)
__data_start__ = . ;
*(.data)
*(.data2)
*(SORT(.data$*))
}
.bss BLOCK(__section_alignment__) :
{
__bss_start__ = . ;
*(.bss)
*(COMMON)
__bss_end__ = . ;
}
}
-[5]最後に以下のバッチファイルを作ります。 mcc.bat という...
c:\mingw516\bin\gcc -m32 -Os mstartup.c -c -o mstartup.obj
c:\mingw516\bin\gcc -m32 -Os %1.c -c -o %1.obj -Dmain=mm...
c:\mingw516\bin\ld -T ldscript.txt -o %1.exe -Bdynamic -...
-Lc:/mingw516/bin/../lib/gcc -Lc:/mingw516/bin/../lib/gc...
-Lc:/mingw516/bin/../lib/gcc/mingw32/3.4.5/../../.. -lmi...
-lshell32 -lmingw32 -lgcc -lmoldname -lmingwex -lmsvcrt
-[6]これで、以下のようにすると、 hello.c から hello.exe ...
prompt>mcc hello
-このhello.exeは1.5KBで、その内訳はヘッダ512バイト、.text...
~
-[Q]どうやってこの結論にたどり着いたのか?
-[A]なんか適当に調べてみたら mainCRTStartup が真のエント...
-[Q]mainをmmainに読み替えさせているようだけど、これは何の...
-[A]gccはmainという関数を見つけると特別扱いするようで、な...
-[Q]リンカスクリプトの書き方はどこで調べたの?
-[A]あーそれは調べていません。[[a23_usm003]]の「2023.01.2...
prompt>gcc --verbose hello.c -O3 -o hello.exe
でデフォルトを出力させて、そこから「たぶんここはC言語では...
-[Q]ldのたくさんあるライブラリ指定リストはどうやって入手...
-[A]これも[[a23_usm003]]の「2023.01.29 Sun #1」の回に書い...
prompt>gcc --verbose hello.c -O3 -o hello.exe
ってやって取得しました。collect2.exe(=ldの実体)への引...
-[Q]なぜ.textの中に.rdataを入れるの?.dataをidataの中に入...
-[A].exeファイルのヘッダサイズは512バイトでアラインされる...
-[Q]なぜMinGWの最新版を使わずに、MinGW 5.1.6なんか使うの?
-[A]これは[[a23_usm003]]の「2023.01.29 Sun #2」の回に書い...
-[Q]これ毎回やらないといけないの?
-[A]いえいえ。一度作ってしまえば、それ以降は、 prompt>mcc...
-[Q]これ本当に安全なの?削りすぎてうまく動かなくなる可能...
-[A]心配なら使わないのが一番です。普通にやりましょう。バ...
-[Q]ここまで攻めるのなら.textの中に.idataも入れたらいいん...
-[A]なんと夢のあることを!うーん、writalbeの属性があって...
--試しました。うーん、やはり.textはreadonlyじゃなきゃいけ...
~
** 2023.02.01 Wed #2
-osdev-jpでこんな話を教えてもらいました!
--デモシーンにようこそ!超低容量プログラミングで遊ぶカル...
--https://jp.ign.com/cedec-2016/6411/news/
-ここによると、「crinklerというPacker」がいいらしいです。...
-キーワードが分かれば検索していけます。この記事も勉強にな...
--crinklerとvisual studio 2017で400byteのexeを作る
--https://nanka.hateblo.jp/entry/2018/07/01/034341
-https://yosshin4004.github.io/ の中に「PC 4K Intro minif...
~
** 2023.02.02 Thu #1
-小学生がMMLによる音楽再生に興味を持ったので、もっと簡単...
[改造前]
APlay *p = aOpenPlay(100000); // 適当な大きさのバッファ.
APlay_mml(p, 0, "CDEFEDCR EFGAGFER");
APlay_mml(p, 1, "R1R1 CDEFEDCR");
APlay_run(p);
[改造後]
PLAY "CDEFEDCR EFGAGFER"; PLAY1 "R1R1 CDEFEDCR"
→もはやワンライナーで十分。openもrunも自動でやる。
~
** 2023.02.02 Thu #2
-crinklerとvisual studio 2017で400byteのexeを作る
-https://nanka.hateblo.jp/entry/2018/07/01/034341
-これを見ても、Visual Studio のバージョンが違うせいなのか...
-よしきめた。いったんこれはやめよう。ここから頑張ったとし...
~
** 2023.02.03 Fri #1
-以下は「ねこふんじゃった」を演奏するアプリです。
-nekofun.c[48行]
APlay *p = aOpenPlay16(100000);
// 1-
APlay_mml(p, 0, "T180 @1 r2.e-8d-8 r4g-4g-4e-8d-8 r4g-4g...
APlay_mml(p, 1, "@1 r2.e-8d-8 r4<b-4b-4>e-8d-8 r4<b-4b-4...
APlay_mml(p, 2, "@1 r2.r4 <g-4r4r2 g-4r4r2 g-4r4e-4r4");
// 5-
APlay_mml(p, 0, "r4f4f4e-8d-8 r4f4f4e-8d-8 r4f4f4e-8d-8 ...
APlay_mml(p, 1, "r4>c-4c-4e-8d-8 r4c-4c-4e-8d-8 r4c-4c-4...
APlay_mml(p, 2, "d-4r4r2 d-4r4r2 d-4r4r2 d-4r4e-4r4");
// 9-
APlay_mml(p, 0, "r4g-4g-4e-8d-8 r4g-4g-4e-8d-8 r4g-4g-4e...
APlay_mml(p, 1, "r4<b-4b-4>e-8d-8 r4<b-4b-4>e-8d-8 r4<b-...
APlay_mml(p, 2, "g-4r4r2 >b-4r4r2 b-4r4r2 b-4r4>d-4r4");
// 13-
APlay_mml(p, 0, "r4f4f4e-8d-8 r4f4f4e-8d-8 r4f4f4e-8d-8 ...
APlay_mml(p, 1, "r4>c-4c-4e-8d-8 r4c-4c-4e-8d-8 r4c-4c-4...
APlay_mml(p, 2, "e-4r4r2 e-4r4r2 e-4r4r2 e-4r4d-4r4");
// 17-
APlay_mml(p, 0, "r4g-4g-4e-8d-8 r4g-4r4g-4 r4g-4r4g-4 r1...
APlay_mml(p, 1, "r4<b-4b-4>e-8d-8 r4<b-4r4b-4 r4b-4r4b-4...
APlay_mml(p, 2, "<b-4r4r2 <g-4r4d-4r4 g-4r4d-4r4 g-4f4g-...
// 21-
APlay_mml(p, 0, "r4f4f4e-8d-8 r4f4r4f4 r4f4r4f4 r1");
APlay_mml(p, 1, "r4>c-4c-4e-8d-8 r4c-4r4c-4 r4c-4r4c-4 r...
APlay_mml(p, 2, "a-4r4r2 a-4r4d-4r4 a-4r4d-4r4 a-4g4a-4a...
// 25-
APlay_mml(p, 0, "r4g-4g-4e-8d-8 r4g-4g-4e-8d-8 r4g-4g-4e...
APlay_mml(p, 1, "r4<b-4b-4>e-8d-8 r4<b-4b-4>e-8d-8 r4<b-...
APlay_mml(p, 2, "b-4r4r2 g-4r4r2 g-4r4r2 g-4r4e-4r4");
// 29-
APlay_mml(p, 0, "r4f4f4e-8d-8 r4f4f4e-8d-8 r4f4f4e-8d-8 ...
APlay_mml(p, 1, "r4>c-4c-4e-8d-8 r4c-4c-4e-8d-8 r4c-4c-4...
APlay_mml(p, 2, "d-4r4r2 d-4r4r2 d-4r4r2 d-4r4e-4r4");
// 33-
APlay_mml(p, 0, "r4g-4g-4r4 g-4d-8d-8d4d-4 r4f4g-4r4");
APlay_mml(p, 1, "r4<b-4b-4r4 b-4>d-8d-8d4d-4 r4c-4<b-4r4...
APlay_mml(p, 2, "g-4r4r2 d-4r4r2 r4d-4<g-4r4");
APlay_run(p);
~
** 2023.02.03 Fri #2
-C言語入門としてprintf("hello, world\n");が定番ですが、こ...
-それならばと、aOpwnWin()して円や四角を書いて、グラフィッ...
-変数を使わないくらい簡単で、だけど「わー、プログラミング...
-私は、それはPLAY文だと思います。MMLによる簡単な演奏なら...
-まあでも、やっぱり変数とかループとかを使うようにならない...
~
** 2023.02.03 Fri #3
-小学生に教える案。CapsLockをONにしておく。
-PRとPRSPと変数演算とGOとIFが使えるようになればいい。それ...
[1] 「1」を表示してみよう。
PR 1
[2] Iに1を入れてIを表示してみよう。
I = 1; PR I
[3] [2]の続きとして、Iを1ずつ増やして、3まで表示してみよ...
I = 1; PR I;
I = I + 1; PR I;
I = I + 1; PR I;
[4] GOを使って読み飛ばしてみるよ。どうなると思う?・・・...
NO1: PR 1; GO NO3;
NO2: PR 2;
NO3: PR 3;
NO4: PR 4;
[5] GOで前に戻ることもできるよ。どうなると思う?
NO1: PR 1; GO NO1;
[6] じゃあこれはどうなるかな?
I = 1;
NO1:
PR I;
I = I + 1;
GO NO1;
数字がつながって見にくかったら、 PR I; の後に PRSP; を追...
[7] ずっと止まらないのは困るかな。じゃあ、100になったら...
I = 1;
NO1:
PR I; PRSP;
I = I + 1;
IF (I <= 100) GO NO1; // 101になったらgoしなくなるよ!
[8] 2から100までの偶数を表示するプログラムを書いてみよう!
[9] 1から99までの奇数を表示するプログラムを書いてみよう!
[10] 1, 2, 4, 8, 16, 32, ... で65536までを表示るプログラ...
[11] 1から10までの和は55だけど、それを計算させてみよう。
PR 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
でも1から100までだったら、この調子では書けないね。どうし...
J = 0; I = 1;
NO1:
J = J + I;
I = I + 1;
IF (I <= 100) GO NO1;
PR J;
どうしてこれでうまくいくのか説明ができるかな?
~
** 2023.02.05 Sun #1
-もうずっとeasy-Cのプロンプト(といううかHL-9bのプロンプ...
-なぜ「$」にしたのかというと、shellのsに形が似ていること...
-ということで整理すると、
--「$」で始まる命令はシェルコマンド
--「!」で始まる命令はgcc経由で実行(コンパイルは遅いけど...
--それ以外はHL-9bの中で普通に実行(実行はそれほど速くない...
-になります。
~
** 2023.02.06 Mon #1
-どんどん便利になってきたeasy-Cですが、そろそろ先が見えて...
-もうずっとeasy-Cのプロンプトは出しっぱなしで、もう何の違...
-シェルと言えば、私が20年前にOS自作をしていたころは、シェ...
-・・・という昔の夢を急に思い出しました。そうか私はC++の...
-C言語がシェルになったら、どうあるべきでしょうか。私が真...
-シェルにはリダイレクトがありますが、C言語にはそんなもの...
-シェルにはシェルスクリプトがあります。シェルスクリプトを...
-・・・と考え始めたらどんどんアイデアが出てきました。これ...
~
** 2023.02.06 Mon #2
-今日は、HL-9bと1ecとecrunとecc0をすべて統合して、HL-9cと...
--[1]「インタプリタ実行」と「gccでコンパイルして実行」を...
--[2]インタプリタ中でCtrl-Cしてもプロンプトに戻ってこられ...
--[3]gcc実行に限れば、適当にnewfunc()みたいな関数をテキス...
-この[3]について追加で説明しておきます。たとえば、
char *myfunc(int a, int b)
{
char *s = malloc(100);
sprintf(s, "hello: a+b=%d\n", a + b);
return s;
}
-という関数を書いたとします。これをmyfunc.cという名前で保...
>!prs myfunc(1, 2)
hello: a+b=3
>
-と実行できるのです。なかなかいいと思いませんか?・・・pr...
~
** 2023.02.06 Mon #3
-もしかしたら、私の中では main関数を書く時代は終わったか...
~
** 2023.02.07 Tue #1
-[自分への戒め]
-改造は小さくなければいけない。大きな改造は開発の停滞を招...
-なぜ大きな開発がダメかというと、大きな開発の場合、「作っ...
-作ってみないと分からないことがある。使ってみないと分から...
~
** 2023.02.07 Tue #2
-昨日は相当に頑張って頭が疲れているので、今日はeasy-Cはお...
~
** 2023.02.08 Wed #1
-自分用のメモ:PLAY命令の音量指定は1~127。最大値は255で...
~
** 2023.02.08 Wed #2
-PLAY文がHL-9cで未サポートだったので、動くように改造しま...
-prやprsもPRやPRSのように大文字で書いてもOKにしました。こ...
-小学1年生がeasy-Cを徐々に習得していて自分でプログラムを...
-またシェルコマンドを拡張して$$というのも作りました。これ...
-これらの拡張は大人の私にとってもかなり便利で、さらに快適...
-こんな感じのことができます。
HL9>NEW TULIP.C
HL9>$$TULIP.C ← $$は別のプロセスで立ち上げるシェルコマ...
HL9>RUN TULIP.C ← これで演奏されます。
-ちなみに TULIP.C の中身はこんな感じです。
PLAY "CDERCDERGEDCDEDR";
PLAY "CDERCDERGEDCDECR";
PLAY "GGEGAAGREEDDC2R";
~
// persistent-C
//startupのasm化
//nekofun. invader.pr.prs.prlf.prsp
//winのクローズ
* こめんと欄
#comment
ページ名: