| (1)acl3ライブラリ | 607行 | 19.9KB | 開発期間:2025.04.11~2025.06.13 | 自分自身の開発力上げていくためのライブラリ |
| (2)acl3gライブラリ | 653行 | 16.6KB | 開発期間:2025.06.13~2025.06.13 | 過去に作って使ってきたacl1を手直しして作ったものなので、開発期間は参考程度に |
| (3)プリプロセッサ | 378行 | 12.6KB | 開発期間:2025.05.07~2025.05.23 | C言語のソースコードテキストデータから、プリプロセッサ済みのテキストデータを出力する |
| (4)コンパイラ本体 | 840行 | 27.7KB | 開発期間:2025.06.04~2025.06.13 | プリプロセッサ済みのテキストデータから、kharc用のアセンブラをテキストデータで出力する |
| (5)内蔵用アセンブラ | 87行 | 13.3KB | 開発期間:2025.06.12~2025.06.13 | kharc用のアセンブラで、テキストデータからバイナリデータを出力する |
| (6)kharcエミュレータ | 73行 | ↑ | 開発期間:2025.06.12~2025.06.13 | kharcのバイナリをエミュレータ実行する |
| (7)kharcバイナリ→x86機械語のJITコンパイラ | 66行 | ↑ | 開発期間:2025.06.12~2025.06.13 | kharcのバイナリをJITコンパイルして、x86の機械語にする |
| (8)(main) | 52行 | 2.1KB | 開発期間:2025.06.04~2025.06.13 | 上記のプログラム群を呼び出している部分 |
| (4~8の集計) | 1118行 | 43.1KB | 開発期間:2025.06.04~2025.06.13 | 8日間で1118行ということなので、1日に140行(5.4KB)くらいしか書いてない。 |
void startup() { main(); asm { End(); } }
// APIs (syscall)
#define openWin(xSiz, ySiz) Syc(0, xSiz, ySiz)
#define wait(msec) Syc(1, msec)
#define setMode(win, mod) Syc(2, win, mod)
#define setPix0(win, x, y, c) Syc(3, win, x, y, c)
#define fillRect0(win, sx, sy, x, y, c) Syc(4, win, sx, sy, x, y, c)
#define fillRect(win, sx, sy, x, y, c) Syc(5, win, sx, sy, x, y, c)
#define drawRect0(win, sx, sy, x, y, c) Syc(6, win, sx, sy, x, y, c)
#define drawRect(win, sx, sy, x, y, c) Syc(7, win, sx, sy, x, y, c)
#define drawLine(win, x0, y0, x1, y1, c) Syc(8, win, x0, y0, x1, y1, c)
#define fillOval0(win, sx, sy, x, y, c) Syc(9, win, sx, sy, x, y, c)
#define fillOval(win, sx, sy, x, y, c) Syc(10, win, sx, sy, x, y, c)
#define drawOval(win, sx, sy, x, y, c) Syc(11, win, sx, sy, x, y, c)
#define fillOvalCent(win, x, y, a, b, c) Syc(12, win, x, y, a, b, c)
#define drawOvalCent(win, x, y, a, b, c) Syc(13, win, x, y, a, b, c)
#define fill(win, x, y, c) Syc(14, win, x, y, c)
#define Amul64Shr(a, b, c) Syc(15, a, b, c)
#define AprintTime() Syc(16)
#define Argb8(r, g, b) ((r)*65536+(g)*256+(b))
#define AWin_ModeSet 0
#define AWin_ModeOr 1
#define AWin_ModeAnd 2
#define AWin_ModeXor 3
void putchar(int c) { asm { LodRMd(R0,SP,$c); printf("%c", R0); } }#include "kharc.h"
int main()
{
int win, x, y, c;
win = openWin(256, 256);
c = 0;
for (y = 0; y < 256; y++) {
for (x = 0; x < 256; x++) {
setPix0(win, x, y, c);
c = c + 0x100;
}
}
wait(-1);
}
prompt>kcc sample1.txt
#include "kharc.h"
int main()
{
int i;
for (i = 0x20; i <= 0x7e; i++) {
putchar(i);
}
putchar(0x0a);
return 0;
} !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~#include "kharc.h"
int main()
{
int win, x, y, c;
win = openWin(512, 512); setMode(win, AWin_ModeXor);
c = 0xffff00;
for (x = 0; x < 512; x++) {
drawLine(win, 0, 0, x, 511, c);
drawLine(win, x, 0, 511, 511, c);
}
wait(-1);
}
#include "kharc.h"
int main()
{
int win, x, y, c;
win = openWin(256, 256);
for (y = 0; y < 256; y++) {
for (x = 0; x < 256; x++) {
c = (x ^ y) * 0x010101;
setPix0(win, x, y, c);
}
}
wait(-1);
}
prompt>kcc sample5.txt 2
#include "kharc.h"
int main()
{
int w; w = openWin(512, 384);
int x, y;
for (y = 0; y < 384; y++) {
for (x = 0; x < 512; x++) {
int sn, sx, sy, n; sn = 0;
int c, cx, cy, zx, zy, xx, yy;
for (sx = 0; sx < 4; sx++) {
cx = (x * 4 + sx) * 56 + 4673536;
for (sy = 0; sy < 4; sy++) {
cy = (y * 4 + sy) * (-56) - 124928;
zx = cx; zy = cy;
for (n = 1; n < 447; n++) {
xx = Amul64Shr(zx, zx, 24);
yy = Amul64Shr(zy, zy, 24);
if (xx + yy > 0x4000000) break;
zy = Amul64Shr(zy, zx, 23);
zx = xx + cx - yy;
zy = zy + cy;
}
sn = sn + n;
}
}
n = sn / 16;
c = Argb8(n, 0, 0);
if (n >= 256) {
c = Argb8(0, 0, 0);
if (n < 447) {
c = Argb8(255, n - 255, 0);
}
}
setPix0(w, x, y, c);
}
}
AprintTime();
wait(-1);
}