a25_buntan03
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* buntan-pc #3
-(by [[K]], 2025.04.24)
** (0)
-https://github.com/buntan-pc/
-これにかかわる開発の話
** 2025.04.24 Thu #0
-今日はWSLをインストール。
--https://learn.microsoft.com/ja-jp/windows/wsl/install#i...
ディストリビューションが正常にインストールされました。'w...
--っていわれたので、たぶんうまくいっています。
-makeとかgccとかが入っていないようなので https://qiita.co...
--うまくできったっぽい。
-さらに iverilog が必要なので「$ sudo apt install iverilo...
-これで、 ucc の中にある e2etest.sh が全部通るようになり...
-次は kuas でも同じことができるかどうか、ってことですね。
** 2025.04.24 Thu #1
-とりあえず現状を確認するとこんな感じ。
[ OK ]: int main() {return 31;} -> '1f'
[ OK ]: int main() {return 5 - 3 + 2;} -> '04'
[ OK ]: int main() {return 1+2*3;} -> '07'
[ OK ]: int main() {int a=3; return 5-a;} -> '02'
[ OK ]: int main() {int a=3; int b=5; return b*(a-1);}...
[ OK ]: int main() {int a; a = 7; return a+1;} -> '08'
[ OK ]: int main() {int a = 1; return 5*((a=3)-1);} ->...
[ OK ]: int main() {return 3 < 5;} -> '01'
[ OK ]: int main() {return 1 > 2;} -> '00'
[ OK ]: int main() {int a=0; a=2<3; return a;} -> '01'
[ OK ]: int main() {if(0){return 2;} return 3;} -> '03'
[ OK ]: int main() {if(4){return 2;} return 3;} -> '02'
[ OK ]: int main() {if(0) return 2; else return 4; ret...
[ OK ]: int main() {int a=1; a += 2; a++; return ++a;}...
[FAILED]: int main() {int a=3; a += 2; a++; return a++;}...
[ OK ]: int main() {int a=8; a -= 2; return --a;} -> '...
[ OK ]: int main() {int s=0; for(int i=2; i<=4; ++i) s...
[ OK ]: int main() {int i = 258; return i >= 250;} -> ...
[ OK ]: int main() {int i = 258; return i * 3 > 750;} ...
[ OK ]: int main() {return (10-3) == 7;} -> '01'
[ OK ]: int main() {char c = 255; c++; return c == 0;}...
[FAILED]: int main() {int a=2; int *p=&a; int b=*p; *p+=...
[ OK ]: int main() {return (1 < 3 && 3 < 2) || (2 == 3...
[ OK ]: int main() {return 3 && 5;} -> '01'
[FAILED]: int main() {char c = 255; char *p = &c; (*p)++...
[ OK ]: int main() {return 'a' + 2;} -> '63'
[ OK ]: int main() {return '\'';} -> '27'
[ OK ]: int main() {return '\n' + '\0' - '\a';} -> '03'
[ OK ]: int main() {int a = 255; int b = 1025; int c =...
[ OK ]: int main() {return *("012" + 1) == 49;} -> '01'
[ OK ]: int main() {return "01234"[2] == 50;} -> '01'
[ OK ]: int main() {int i = 1; return "0123"[++i + 1];...
[ OK ]: int main() {int i = 0; while(1){if(i == 5)brea...
[ OK ]: int main() {int s=0; for(int i=0;i<3;i++) for(...
[ OK ]: int main() {if(0){if(1){return 2;}else{return ...
[ OK ]: int main() {int *p = 0x06; while((p[1]&1) == 0...
[ OK ]: int main() {return -2;} -> 'fe'
[ OK ]: int main() {if (-1 < 0) { return 3; } else { r...
[ OK ]: int main() {return 0xaf & 0xc1 | 0xfb ^ 255;} ...
[ OK ]: int main() {char c = ~043; return c;} -> 'dc'
[ OK ]: int main() {int i; int s=0; for(i=0;i<20;i++){...
[ OK ]: int main() {int a[2] = {1, 3,}; return a[1];} ...
[ OK ]: int main() {int a[2]; a[0] = 1; *(a+1) = 4; re...
[FAILED]: int main() {int a[3]; int *p = a+1; p[0] = 5; ...
[ OK ]: int main() {int *p=0x06; int s=0; int c=0; whi...
[ OK ]: int main() {return (010 >> 1) | (002 << 3);} -...
[ OK ]: int main() {return 0xefff >> 12;} -> 'fe'
[ OK ]: int main() {return 0x8000 >> 15;} -> 'ff'
[FAILED]: int main() {int i=0; char *s="a"; while(*s){i+...
[FAILED]: int main() {int *p=0x06; char *s="hello"; whil...
[ OK ]: int f() { return 2; } int main() { return f() ...
[ OK ]: int f(int a, int b) { return a+b; } int main()...
[ OK ]: int fib(int n) { if(n<3){return 1;}else{return...
[FAILED]: int main() {int *p = 2; *p = 2; while (*p > 0)...
[ OK ]: int f(int ms){int *p=2; *p=ms; while(*p>0); re...
[FAILED]: int main() {char *p=0x80; *p=2; return *p+1; }...
[FAILED]: int main() {char *p=0x81; *p=1; return *p+3; }...
[FAILED]: int f(){return 0;} int main() {char *p=0x81; *...
[FAILED]: void f(int *p){*p=2;} int main(){int i; f(&i);...
[ OK ]: int f(){int a=2; int b=5; return a+b;} int mai...
[ OK ]: int main(){int i=3; {int i=4;} return i*2;} ->...
[ OK ]: int main(){int i=3; {int i=4; return i*2;}} ->...
[FAILED]: void isr(){*(int*)0x2f0=4;} int main(){int *p=...
[ OK ]: int main(){ char *p="foo" "ba"; int i=0; while...
[FAILED]: int main(){int *t=2; int *c=4; if(*c){return 4...
[FAILED]: void _ISR(){*(int*)0x2f0+=1;*(int*)2=0;} int m...
[FAILED]: int *t=2; int main(){ *t=3; while (*t>0); retu...
[ OK ]: int tim_cnt __attribute__((at(2))); int main()...
[ OK ]: char large[300]; char c __attribute__((at(546)...
[FAILED]: int buf[4096]; int main(){int i; for(i=0; i<40...
[ OK ]: int main() { int i = -1; if (i < 0) { return 2...
[ OK ]: int main() { int i = 0x8000; i = i >> 12; retu...
[ OK ]: int main() { unsigned int u = 0x8000; u = u >>...
[ OK ]: int main() { int i = 0xffff; return i < 0; } -...
[ OK ]: int main() { unsigned u = 0xffff; return u < 0...
[ OK ]: int main() { int i = 1; { int v = 3; return i ...
[ OK ]: int gx=0; void f(int x){gx=x+1;} int main() {i...
[ OK ]: int gx; int main() {__builtin_set_gp(0x300); g...
[FAILED]: int g() {return 7;} int main() {int(*f)()=g; r...
[FAILED]: int main() {__builtin_write_pmem(512,3,0x12); ...
[ OK ]: int main() {return !0 + !3;} -> '01'
[ OK ]: void f(){int i;for(i=0;i<1;++i){int a=7;}} int...
[ OK ]: int main() {return "A\x03B"[1] + '\x01';} -> '...
[ OK ]: #include "head_add.h" int main() { return add(...
[ OK ]: int main() {return ((f() >> 15) & 4) | ((g() >...
[ OK ]: int main() {return gx[2] - gx[0];} int gx[3] =...
[ OK ]: int main() {int d=0; switch(1){case 0:return 5...
[ OK ]: int main() {int d=0; switch(1){case 1:++d;} re...
[ OK ]: int main() {int d=0; switch(2){case 1:++d;} re...
[ OK ]: int f(){int i; for (i=0; i<2; ++i); return i;}...
[FAILED]: int main() {int a[2]; int *p=a; for (int i=0; ...
-今のところ失敗するのは19個。
** 2025.04.24 Thu #2
-[FAILED]: int main() {int a=3; a += 2; a++; return a++;}...
--なるほど、「 dup 0 」がアセンブルできない、と。そうだね...
--直したら失敗は17個になった。
-[FAILED]: int main() {int a=2; int *p=&a; int b=*p; *p+=...
--なるほど、「 pop 」がアセンブルできない、と。そうだね、...
--直したら失敗は2個になった。あとちょっとだ!
-[FAILED]: int g() {return 7;} int main() {int(*f)()=g; r...
--なるほど、オペランドなしのcallか・・・。確かに作ってな...
--直したら失敗は0個になった!
** 2025.04.24 Thu #3
-ここまでの内容をまとめました。
-https://essen.osask.jp/files/kuas03a.zip (5.35KB)
--ソースファイルのみです。書いてないけどライセンスはKL-01...
--コンパイルの際は、 kuas.c のみコンパイルすればいいです...
** 2025.04.25 Fri #0
-なんかkuasがすっきりしてないので、見直し中。
** 2025.04.25 Fri #1
-できた。kuas.cの行数は318→285で33行も減って、構造もすっ...
-なんかくやしいけど、まあいいかー。
-あと改善点としては、エラーがあったときにちゃんと1を返す...
-https://essen.osask.jp/files/kuas04a.zip (5.50KB)
--ソースファイルのみです。書いてないけどライセンスはKL-01...
--コンパイルの際は、 kuas.c のみコンパイルすればいいです...
** 2025.04.25 Fri #2
-今日は忙しくてできないけど、そのうち、「自動移植システム...
-[Q]前から好きだったエミュレータではなく、移植にしたのは...
-[A]まず、エミュレータ方式は手段としては最強です。どんな...
** 2025.04.25 Fri #3
-例えば以下のようなMS-DOS用のアセンブラプログラムがあった...
ORG 0x100
MOV AH,0x02
MOV DL,0x20
l: INT 0x21
INC DX
CMP DL,0x7f
JNE l
MOV AX,0x4c00
INT 0x21
-これを以下の形に機械的に変換したい。
jmpVpc:
switch (vpc) {
case 0:
mov8ri(ah, 0x02);
mov8ri(dl, 0x20);
lb_l:
int(0x21, 1);
case 1:
inc16(dx);
cmp8ri(dl, 0x7f);
jne(lb_l);
mov16ri(ax, 0x4c00);
int(0x21, 2);
case 2:
}
-ここまで変換できれば、あとはmov8riなどを関数もしくはマク...
-ちなみにint()は、第二引数をip値の代わりにスタックに積む...
-incやcmpは変数ZF/CF/SF/OF/PF/AFをセットする。pushfなどの...
** 2025.04.27 Sun #0
-データ部をどうしたらいいかが結構むずかしい。C言語で許さ...
--やはりコンパイラ的なものを一枚入れるかな・・・。
-こういうのって第一印象が大事だろうと思うので、見栄えの悪...
--ということは、最初は仕様の決まらないデータセグメントを...
// seg(seg,vsg)やofs(lb, vpc)という構文は作れる.
// データのオフセットは共通になる。16bitアクセスがメイン...
終了行:
* buntan-pc #3
-(by [[K]], 2025.04.24)
** (0)
-https://github.com/buntan-pc/
-これにかかわる開発の話
** 2025.04.24 Thu #0
-今日はWSLをインストール。
--https://learn.microsoft.com/ja-jp/windows/wsl/install#i...
ディストリビューションが正常にインストールされました。'w...
--っていわれたので、たぶんうまくいっています。
-makeとかgccとかが入っていないようなので https://qiita.co...
--うまくできったっぽい。
-さらに iverilog が必要なので「$ sudo apt install iverilo...
-これで、 ucc の中にある e2etest.sh が全部通るようになり...
-次は kuas でも同じことができるかどうか、ってことですね。
** 2025.04.24 Thu #1
-とりあえず現状を確認するとこんな感じ。
[ OK ]: int main() {return 31;} -> '1f'
[ OK ]: int main() {return 5 - 3 + 2;} -> '04'
[ OK ]: int main() {return 1+2*3;} -> '07'
[ OK ]: int main() {int a=3; return 5-a;} -> '02'
[ OK ]: int main() {int a=3; int b=5; return b*(a-1);}...
[ OK ]: int main() {int a; a = 7; return a+1;} -> '08'
[ OK ]: int main() {int a = 1; return 5*((a=3)-1);} ->...
[ OK ]: int main() {return 3 < 5;} -> '01'
[ OK ]: int main() {return 1 > 2;} -> '00'
[ OK ]: int main() {int a=0; a=2<3; return a;} -> '01'
[ OK ]: int main() {if(0){return 2;} return 3;} -> '03'
[ OK ]: int main() {if(4){return 2;} return 3;} -> '02'
[ OK ]: int main() {if(0) return 2; else return 4; ret...
[ OK ]: int main() {int a=1; a += 2; a++; return ++a;}...
[FAILED]: int main() {int a=3; a += 2; a++; return a++;}...
[ OK ]: int main() {int a=8; a -= 2; return --a;} -> '...
[ OK ]: int main() {int s=0; for(int i=2; i<=4; ++i) s...
[ OK ]: int main() {int i = 258; return i >= 250;} -> ...
[ OK ]: int main() {int i = 258; return i * 3 > 750;} ...
[ OK ]: int main() {return (10-3) == 7;} -> '01'
[ OK ]: int main() {char c = 255; c++; return c == 0;}...
[FAILED]: int main() {int a=2; int *p=&a; int b=*p; *p+=...
[ OK ]: int main() {return (1 < 3 && 3 < 2) || (2 == 3...
[ OK ]: int main() {return 3 && 5;} -> '01'
[FAILED]: int main() {char c = 255; char *p = &c; (*p)++...
[ OK ]: int main() {return 'a' + 2;} -> '63'
[ OK ]: int main() {return '\'';} -> '27'
[ OK ]: int main() {return '\n' + '\0' - '\a';} -> '03'
[ OK ]: int main() {int a = 255; int b = 1025; int c =...
[ OK ]: int main() {return *("012" + 1) == 49;} -> '01'
[ OK ]: int main() {return "01234"[2] == 50;} -> '01'
[ OK ]: int main() {int i = 1; return "0123"[++i + 1];...
[ OK ]: int main() {int i = 0; while(1){if(i == 5)brea...
[ OK ]: int main() {int s=0; for(int i=0;i<3;i++) for(...
[ OK ]: int main() {if(0){if(1){return 2;}else{return ...
[ OK ]: int main() {int *p = 0x06; while((p[1]&1) == 0...
[ OK ]: int main() {return -2;} -> 'fe'
[ OK ]: int main() {if (-1 < 0) { return 3; } else { r...
[ OK ]: int main() {return 0xaf & 0xc1 | 0xfb ^ 255;} ...
[ OK ]: int main() {char c = ~043; return c;} -> 'dc'
[ OK ]: int main() {int i; int s=0; for(i=0;i<20;i++){...
[ OK ]: int main() {int a[2] = {1, 3,}; return a[1];} ...
[ OK ]: int main() {int a[2]; a[0] = 1; *(a+1) = 4; re...
[FAILED]: int main() {int a[3]; int *p = a+1; p[0] = 5; ...
[ OK ]: int main() {int *p=0x06; int s=0; int c=0; whi...
[ OK ]: int main() {return (010 >> 1) | (002 << 3);} -...
[ OK ]: int main() {return 0xefff >> 12;} -> 'fe'
[ OK ]: int main() {return 0x8000 >> 15;} -> 'ff'
[FAILED]: int main() {int i=0; char *s="a"; while(*s){i+...
[FAILED]: int main() {int *p=0x06; char *s="hello"; whil...
[ OK ]: int f() { return 2; } int main() { return f() ...
[ OK ]: int f(int a, int b) { return a+b; } int main()...
[ OK ]: int fib(int n) { if(n<3){return 1;}else{return...
[FAILED]: int main() {int *p = 2; *p = 2; while (*p > 0)...
[ OK ]: int f(int ms){int *p=2; *p=ms; while(*p>0); re...
[FAILED]: int main() {char *p=0x80; *p=2; return *p+1; }...
[FAILED]: int main() {char *p=0x81; *p=1; return *p+3; }...
[FAILED]: int f(){return 0;} int main() {char *p=0x81; *...
[FAILED]: void f(int *p){*p=2;} int main(){int i; f(&i);...
[ OK ]: int f(){int a=2; int b=5; return a+b;} int mai...
[ OK ]: int main(){int i=3; {int i=4;} return i*2;} ->...
[ OK ]: int main(){int i=3; {int i=4; return i*2;}} ->...
[FAILED]: void isr(){*(int*)0x2f0=4;} int main(){int *p=...
[ OK ]: int main(){ char *p="foo" "ba"; int i=0; while...
[FAILED]: int main(){int *t=2; int *c=4; if(*c){return 4...
[FAILED]: void _ISR(){*(int*)0x2f0+=1;*(int*)2=0;} int m...
[FAILED]: int *t=2; int main(){ *t=3; while (*t>0); retu...
[ OK ]: int tim_cnt __attribute__((at(2))); int main()...
[ OK ]: char large[300]; char c __attribute__((at(546)...
[FAILED]: int buf[4096]; int main(){int i; for(i=0; i<40...
[ OK ]: int main() { int i = -1; if (i < 0) { return 2...
[ OK ]: int main() { int i = 0x8000; i = i >> 12; retu...
[ OK ]: int main() { unsigned int u = 0x8000; u = u >>...
[ OK ]: int main() { int i = 0xffff; return i < 0; } -...
[ OK ]: int main() { unsigned u = 0xffff; return u < 0...
[ OK ]: int main() { int i = 1; { int v = 3; return i ...
[ OK ]: int gx=0; void f(int x){gx=x+1;} int main() {i...
[ OK ]: int gx; int main() {__builtin_set_gp(0x300); g...
[FAILED]: int g() {return 7;} int main() {int(*f)()=g; r...
[FAILED]: int main() {__builtin_write_pmem(512,3,0x12); ...
[ OK ]: int main() {return !0 + !3;} -> '01'
[ OK ]: void f(){int i;for(i=0;i<1;++i){int a=7;}} int...
[ OK ]: int main() {return "A\x03B"[1] + '\x01';} -> '...
[ OK ]: #include "head_add.h" int main() { return add(...
[ OK ]: int main() {return ((f() >> 15) & 4) | ((g() >...
[ OK ]: int main() {return gx[2] - gx[0];} int gx[3] =...
[ OK ]: int main() {int d=0; switch(1){case 0:return 5...
[ OK ]: int main() {int d=0; switch(1){case 1:++d;} re...
[ OK ]: int main() {int d=0; switch(2){case 1:++d;} re...
[ OK ]: int f(){int i; for (i=0; i<2; ++i); return i;}...
[FAILED]: int main() {int a[2]; int *p=a; for (int i=0; ...
-今のところ失敗するのは19個。
** 2025.04.24 Thu #2
-[FAILED]: int main() {int a=3; a += 2; a++; return a++;}...
--なるほど、「 dup 0 」がアセンブルできない、と。そうだね...
--直したら失敗は17個になった。
-[FAILED]: int main() {int a=2; int *p=&a; int b=*p; *p+=...
--なるほど、「 pop 」がアセンブルできない、と。そうだね、...
--直したら失敗は2個になった。あとちょっとだ!
-[FAILED]: int g() {return 7;} int main() {int(*f)()=g; r...
--なるほど、オペランドなしのcallか・・・。確かに作ってな...
--直したら失敗は0個になった!
** 2025.04.24 Thu #3
-ここまでの内容をまとめました。
-https://essen.osask.jp/files/kuas03a.zip (5.35KB)
--ソースファイルのみです。書いてないけどライセンスはKL-01...
--コンパイルの際は、 kuas.c のみコンパイルすればいいです...
** 2025.04.25 Fri #0
-なんかkuasがすっきりしてないので、見直し中。
** 2025.04.25 Fri #1
-できた。kuas.cの行数は318→285で33行も減って、構造もすっ...
-なんかくやしいけど、まあいいかー。
-あと改善点としては、エラーがあったときにちゃんと1を返す...
-https://essen.osask.jp/files/kuas04a.zip (5.50KB)
--ソースファイルのみです。書いてないけどライセンスはKL-01...
--コンパイルの際は、 kuas.c のみコンパイルすればいいです...
** 2025.04.25 Fri #2
-今日は忙しくてできないけど、そのうち、「自動移植システム...
-[Q]前から好きだったエミュレータではなく、移植にしたのは...
-[A]まず、エミュレータ方式は手段としては最強です。どんな...
** 2025.04.25 Fri #3
-例えば以下のようなMS-DOS用のアセンブラプログラムがあった...
ORG 0x100
MOV AH,0x02
MOV DL,0x20
l: INT 0x21
INC DX
CMP DL,0x7f
JNE l
MOV AX,0x4c00
INT 0x21
-これを以下の形に機械的に変換したい。
jmpVpc:
switch (vpc) {
case 0:
mov8ri(ah, 0x02);
mov8ri(dl, 0x20);
lb_l:
int(0x21, 1);
case 1:
inc16(dx);
cmp8ri(dl, 0x7f);
jne(lb_l);
mov16ri(ax, 0x4c00);
int(0x21, 2);
case 2:
}
-ここまで変換できれば、あとはmov8riなどを関数もしくはマク...
-ちなみにint()は、第二引数をip値の代わりにスタックに積む...
-incやcmpは変数ZF/CF/SF/OF/PF/AFをセットする。pushfなどの...
** 2025.04.27 Sun #0
-データ部をどうしたらいいかが結構むずかしい。C言語で許さ...
--やはりコンパイラ的なものを一枚入れるかな・・・。
-こういうのって第一印象が大事だろうと思うので、見栄えの悪...
--ということは、最初は仕様の決まらないデータセグメントを...
// seg(seg,vsg)やofs(lb, vpc)という構文は作れる.
// データのオフセットは共通になる。16bitアクセスがメイン...
ページ名: