8: 2010-01-28 (木) 16:57:47 lina[6] [7] | 現: 2024-01-08 (月) 12:58:58 lina[6] [8] | ||
---|---|---|---|
Line 391: | Line 391: | ||
2010/01/25 15:34 219,474 typeck.c | 2010/01/25 15:34 219,474 typeck.c | ||
2010/01/25 15:34 42,890 typeck2.c | 2010/01/25 15:34 42,890 typeck2.c | ||
+ | |||
gccディレクトリ内 | gccディレクトリ内 | ||
2010/01/25 15:36 12,446 cppmain.n | 2010/01/25 15:36 12,446 cppmain.n | ||
Line 427: | Line 427: | ||
0x40 0x40 | 0x40 0x40 | ||
}; | }; | ||
+ | |||
ばんざーい! 解析できたーーーーー!!!!! | ばんざーい! 解析できたーーーーー!!!!! | ||
Line 544: | Line 544: | ||
SIZE(22){''だれかそういうのの載ってるURL教えてけれ!!''}~ | SIZE(22){''だれかそういうのの載ってるURL教えてけれ!!''}~ | ||
ググっても全然みつからないよ・・・orz・・・ | ググっても全然みつからないよ・・・orz・・・ | ||
+ | |||
+ | **手がかりがあったぞ [#kb1378d6] | ||
+ | adclは、''拡張加減算''と呼ばれるものらしい。 | ||
+ | |||
+ | ・・・やっとこさ、NASMの解説サイトを見つけたんだが・・・・~ | ||
+ | http://ryujin.kuis.kyoto-u.ac.jp/~nobu/study/nasm/nasm.html | ||
+ | |||
+ | これからこれを読むのか・・・頭クラクラしてきた・・・ | ||
+ | |||
+ | **お得意のやっつけ変化球 [#he38ac39] | ||
+ | 実験的にadclの行を抜いてgas2naskしてみた。するってーと、Nasukaとしてはこんな文法になることがわかった。 | ||
+ | _rc_encode0: _rc_encode0: | ||
+ | pushl %ebp PUSH EBP | ||
+ | movl %esp, %ebp MOV EBP,ESP | ||
+ | movl 8(%ebp), %ecx MOV ECX,DWORD [8+EBP] | ||
+ | shrl 4(%ecx) SHR DWORD [4+ECX],1 | ||
+ | cmpl $0, 12(%ebp) CMP DWORD [12+EBP],0 | ||
+ | jne L4079 JNE L4079 | ||
+ | movl 4(%ecx), %eax MOV EAX,DWORD [4+ECX] | ||
+ | xorl %edx, %edx XOR EDX,EDX | ||
+ | addl %eax, 16(%ecx) ADD DWORD [16+ECX],EAX | ||
+ | ; adcl %edx, 20(%ecx) | ||
+ | L4079: L4079: | ||
+ | movl 4(%ecx), %eax MOV EAX,DWORD [4+ECX] | ||
+ | cmpl $16777215, %eax CMP EAX,16777215 | ||
+ | |||
+ | また、adcl、そしてそれに良く似たaddl命令の働きがわかって来た。COLOR(blue){上記の例で解る通り、addlはgas2naskで翻訳できていて、さらにそのパターンがわかる!} | ||
+ | | |>|>|GASソース| |>|>|Nasuka(NASM風)ソース| | ||
+ | |addl命令| addl | %eax | 16(%ecx) | | ADD | DWORD[16+ECX] | EAX| | ||
+ | |||
+ | これらの比較から、まだ未確認だがこういう予測が立ってきた・・・ | ||
+ | |||
+ | -COLOR(blue){多くの命令は、GASの場合、おケツにlが付いているだけ。} | ||
+ | -COLOR(blue){第一オペランドと第二オペランドが逆} | ||
+ | |||
+ | ・・・つーことはだよ? x86に、''ADC''という命令がダイレクトにあれば、addl(ADD)と同じ翻訳でいいんでないのか?これ???? | ||
+ | |||
+ | **出ました!乱暴者!!! [#m6641f49] | ||
+ | どうもx86には、''ADC''という命令はあるっぽい(まだ、調べきっていないのだが)。・・・だったらさぁ・・・・ | ||
+ | |||
+ | さっき出来た.nasに、手書きでADC命令を書きこんでNasukaにかけ、bim2binをでっち上げてみる!!!!~ | ||
+ | さぁ!動くか!? うごくのかあぁぁぁぁ!!!! | ||
+ | |||
+ | COLOR(blue){動いちゃうんだからやめられないよなホントwwww} | ||
+ | - -osacmp -tek0 正常動作。出力ファイルに違いがない! | ||
+ | - -osacmp -tek1 正常動作。出力ファイルに違いがない! | ||
+ | - -osacmp -tek5 正常動作。出力ファイルに違いがない! | ||
+ | |||
+ | 完璧だ・・・私は完璧だ! 今日から戦闘力10万の完璧超人を名乗らせてもらおう!! | ||
+ | |||
+ | |||
+ | **貴様風情に北斗1800年の歴史を極めることなどできない [#n520ae2b] | ||
+ | ・・・でさ・・・gas2naskどうすんのよ・・ | ||
+ | |||
+ | ・・・・・・・・・・・・・orz・・・・・・・・・・・・・・・ | ||
+ | |||
+ | さてgas2naskのソースを眺めてると、acDl(ADD)命令の定義が二箇所ある。さらに各々の定義部に、one_param、tow_paramという名前がつけられている。 | ||
+ | |||
+ | ・・・これは、オペランドが一個しかないもの、2個あるものっていう定義なのだろうか? もしそうなら、addl命令は、オペランドがひとつの場合と二つの場合があり、3つってのはない・・・そうなるが・・・ | ||
+ | |||
+ | ふむ。大体合ってると思う。one_param内にはCALLやJPがあるが、tow_param内にはないし。 | ||
+ | |||
+ | しかしそうなると、ADDにはオペランドが一個っていう場合がある・・・のかなぁ。そういう用法が見つからない。むむむ・・・ | ||
+ | |||
+ | |||
+ | あぁぁぁっと!勘違いだ! ADDにはパラメータ一個は存在しない! それは、''FADD''だ!! | ||
+ | |||
+ | うーん・・・ADDに対してFADDはFPUを使っての命令・・・と。で、その場合はパラメータ一個もありうる・・・(まだ未確認) | ||
+ | |||
+ | しかし、逆に、これのCF関連命令であるADCに、FADCっていう命令はみつからないぞ? もしかしてない?? | ||
+ | |||
+ | たぶんこれで合っているはず。adcl(ADC)命令には、パラメータ一個のパターンは存在しない!!!! | ||
+ | |||
+ | なので、たぶん、adclの定義はtwo_param内に追加すればいいはず! | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | **ソース内の定義の意味は? [#b9cd74ec] | ||
+ | gas2naskのソース内では、たとえばaddlの場合、 | ||
+ | "1addb ADD", | ||
+ | "4addl ADD", | ||
+ | "2addw ADD", | ||
+ | こんなことをしている。先頭の数値とお尻の一文字。これはどういう意味なんだろう?? お尻はほとんど関係なくADDに翻訳されているんだが、頭の数値はなんだんだろうこれ・・・ | ||
+ | |||
+ | *いけた?でもわかんねw [#b41591ab] | ||
+ | "1addb ADD", | ||
+ | "4addl ADD", | ||
+ | "2addw ADD", | ||
+ | "4adcl ADD", | ||
+ | もうわっかんないので無理やりこんなことしてみたら、ちゃんと.nasが正しく出力されたぞ?? いいのか? 本当にこれでいいのか???www | ||
+ | |||
+ | *復帰~ [#n48bb630] | ||
+ | うーん・・・思うところもあるけど、本来の目的であるhidetol_8を完成させる観点から、ちょっとこれで突き進めちゃおう・・・~ | ||
+ | (どーせこれは、GOでもなんでもない。28GOであり、hidetolなんだから・・・<オープン アゲイン!!! | ||
+ | |||
+ | *そんなわけで第一期完成 [#oe00b9a9] | ||
+ | |||
+ | 実行ファイル | ||
+ | #ref(hidetol_8.exe) | ||
+ | |||
+ | ソース | ||
+ | #ref(hidetol_8_src.exe) | ||
+ | |||
+ | COLOR(red){まだOSASKもなんもコンパイルしてません・・・自分自身のソースを自分でコンパイルできるようになったってレベル} | ||
+ | |||
+ | |||
+ | **OSASKコンパイル [#s89fc85d] | ||
+ | ・・・ダメでした・・・orz・・・ | ||
+ | |||
+ | で、問題を検証してみたんだけど、どうもpokonがおかしい。で、どの段階でおかしいかってーと、obj2bimだってことが解った。pokon0.objまでの段階ではまったく同じバイナリなんだけど、こいつをobj2bimでpokon0.bimにすると違いが出ちゃう。 | ||
+ | |||
+ | -差を見てみると、なんとかくだけど規則的に差が出ているように見える・・・ | ||
+ | -そもそも、ほんのわずかだけど、サイズが異なる | ||
+ | |||
+ | でね。こりゃ、obj2bimがバグってるのかぁ?っていうと、winman0ではこれが起きてないんだよなぁ・・・(winman0はこの後のbinでもまったく同じバイナリになってる) | ||
+ | |||
+ | ・・・どゆことなんだべか??? | ||
+ | |||
+ | COLOR(blue){おぉぉっとぉ! 動いたぞ!!!} | ||
+ | |||
+ | 二つの差。それは、rulファイル(各々専用)。ちょっとヤマカンでやってみたのよ。mak_pk0.txtを! | ||
+ | |||
+ | 元々のmak_pl0.txt こうしますた! | ||
+ | STK_PK_AT = 1m STK_PK_AT = 64k | ||
+ | STK_PK_TW = 1m STK_PK_TW = 64k | ||
+ | STK_PK_NE = 1m STK_PK_NE = 64k | ||
+ | |||
+ | これでコンパイルかけてみた。やっぱり同じにはならないんだけど、サイズが揃ったんだよね。で、runしてみるってーと・・・ジャジャ~ン!!! | ||
+ | |||
+ | オレは天才だあぁぁぁ! どんな言語もたちどころに習得できるのに、誰も奥義を授けようとはしなかったあぁ!!! | ||
+ | |||
+ | **はりぼて [#xb68fdc5] | ||
+ | こーっちもイケたぞおぉぉ!!! | ||
+ | |||
+ | リリース近し!! w | ||
+ | |||
+ | |||
+ | **qemuが起動しないミス [#tb2bc0ba] | ||
+ | 例によってhikarupspさんが見つけてくれた!! | ||
+ | |||
+ | qemuの起動に問題があったので一部やり直しました。 | ||
+ | |||
+ | #ref(hidetol_8_2.exe) | ||
+ | |||
+ | |||
+ | |||
+ | *リリース向け準備 [#o104ee3b] | ||
+ | たぶんもう問題はないと思う。リリースに向けて最後の準備。 | ||
+ | |||
+ | で! | ||
+ | |||
+ | この版ではコマンドそのものやパラメータがいろいろ変化していて、hidetol_7みたいにOSASKやはりぼてでチェックができない。(あちこち直さないといけない) | ||
+ | |||
+ | Linuxとかならpatchを流せばいいんだけどWinの場合はねぇ・・・ | ||
+ | |||
+ | そんなわけで、とりあえずご用意。 | ||
+ | |||
+ | **OSASK4.7の代替 [#n923b4d2] | ||
+ | [[ここ>http://osask.net/w/540.html]]からOSAKA Ver4.7を落としてくださいな。OSAKAはOSASKからの派生物。で、なに派生したかって、なーんにも変化していないというwww~ | ||
+ | コイツはhidetol_8で一発コンパイルできるようにMakefile関係だけをイジってあると考えていただければ。 | ||
+ | |||
+ | |||
+ | **はりぼての代替 [#f7ba3dc7] | ||
+ | #ref(harib27f_x.zip) | ||
+ | |||
+ | こいつは「30日で出来る!OS自作入門」付属CD-ROM内の、30日目の最後のソースに、hidetol_8でコンパイルできるようにMakefileやらなんやらを改造したもの。以下ね。 | ||
+ | harib27_x | ||
+ | ├app_mak.txt | ||
+ | ├apilib | ||
+ | │ └Makefile | ||
+ | ├haribote | ||
+ | │ └Makefile | ||
+ | └gvuiew | ||
+ | └Makefile | ||
+ | |||
+ | |||
+ | |||
+ | *リリース完了! ('10/2/1)[#ld83d289] | ||
+ | |||
+ | リリースが完了しましたので、このページは凍結♪ 添付も引っこ抜きます。以降は[[こちら>http://osask.net/w/542.html]]にて。 |
(This host) = http://osask.net