福野泰介の一日一創 - create every day

APIに対応し、オールマシン語でかいた「かわくだり」、APIをC言語環境から呼び出せる環境を整えたC言語用ヘッダファイル std15.h を作って、C言語版も作ってみました。 PCとUSBシリアルケーブルを手に入れれば、BASICではできないスゴイモノが簡単に作れます!(マシン語をハンドアセンブルすれば、PCがなくても同等以上のものは作れます)

#include <std15.h> __attribute__ ((section(".main"))) int main(int param, int ram, int rom, int (*divfunc)()) { cls(); int x = 15; for (;;) { locate(x, 5); putc('O'); locate(rnd(32), 23); putc('*'); putc(10); wait(3); int c = inkey(); if (c == LEFT) x--; if (c == RIGHT) x++; if (scr(x, 5)) break; } return x; }

IchigoJam BASIC に慣れた人なら読めますね!(IchigoJam BASIC版、Ruby版
#include というのは、コンパイラ向けの命令で、その後ろに書かれた std15.h というファイル名のファイルの中身をまるっと取り込んでくれます。 このファイルの中に main cls locate などが何なのかが書いてあります。(通常のC言語では stdio.h というファイル名をincludeしますね)

std15.h の中身はこのような感じ。IDを覚えていなくても、分かりやすい名前で呼び出せて、コンパイルする際、間違った使い方は警告してくれるなど、いたれりつくせり。

typedef unsigned int uint32_t; typedef unsigned short uint16_t; typedef uint32_t (*IJFUNC_P1R)(uint32_t n); #define rnd(n) ((IJFUNC_P1R)(void*)(uint32_t)*(uint16_t*)0xC0)((n))

生成されたコードサイズは、108byte、オールマシン語で作ったものが 90byte だったので20%ほどコード量が増えてしまってますが、十分に小さいのでOKですね。 使える容量は、#700-#7FFまでで256byte、変数を使わないことにすれば512byteまで。プログラム領域#C00以降にPOKEコマンドで書き込むように変更すると、1KB近くまで使えます。

ダウンロードはこちら(IchigoJam 1.3.2b12 以降用)
IchigoJam/c4ij: C language for IchigoJam」 - src on GitHub

マシン語を読みたいときは、 make dasm とすると、マシン語コードを表示します。コンパイラがどのようなマシン語にするか辿って、どこに無駄があるか読んでみるもまたおもしろいですよ。

某現役高専生による高専生のためのC言語連載が始まりました!
C言語 - Part.0:C言語とは - 某高専生の某高専生による高専生のための...
ただ、C言語、初めてプログラミングとしていきなり学ぶのはオススメしません。

まずは、IchigoJam BASIC、JavaScript、Python、Ruby、Unity、何でもいいので、サクッと簡単に楽しいゲームが作れることを体験しましょう。 便利なツールを使って、実現したいことを最短で実現し、もっとやってみたい!と興味を持つことが何より大事です。

コンピューターの気持ちが気になったら、コンピューターの構造(アーキテクチャ)、マシン語、C言語、現代言語の順に学ぶのがオススメです。

マシン語を触ってコンピューターの真の力を体感し、ちょっとしたプログラムを作るのに苦労してもらった上で、C言語のコンパイラに触れると、もう一度コンピューターってすごい!となれます。 もっと楽しく、もっと速く作りたい!という思いが、Python、Ruby、JavaScript、Go、Javaなどの言語を産みました。

なぜC言語を学ぶのか、それは、それらのモダン言語と言われている言語自体を作った言語がC言語だからです。

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像