2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

8ビットCPUでC言語?ないないありえないっしょ! 4

1 :ナイコンさん :2018/07/26(木) 22:57:59.65 ID:seSv2gch0.net
!extend:checked:vvvvv:1000:512

【前スレ】
8ビットCPUでC言語? ないないありえないっしょ!

Part.3 http://matsuri.5ch.net/test/read.cgi/i4004/1528299072/
Part.2 http://matsuri.5ch.net/test/read.cgi/i4004/1470913460/
Part.1 http://hanabi.2ch.net/test/read.cgi/i4004/1468652612/

     ♪    /.i   /.i  /.i
   ♪     ∠__ノ ∠__ノ ∠__ノ   
        〈,(・∀・;)ノ・∀・;)ノ・∀・;)ノ
         └i===|┘i===|┘.i===|┘  
           〈__〈 〈__〈 〈__〈
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

952 :ナイコンさん (ワッチョイ ff43-ayCS):2020/06/19(金) 07:02:37 ID:DKjcCzev0.net
>>947
>BDS-Cネタ解説しますね。
>標準では4バイト整数や浮動小数点は扱えなかったのだが、
>別パッケージを追加することで扱えたんですよ。

それはコンパイラ自体が対応してたのではなくて
専用の関数が用意されてたということですよね?

953 :ナイコンさん (ワッチョイ ff43-ayCS):2020/06/19(金) 07:10:34 ID:DKjcCzev0.net
>>950
>何しろLife BoatがBDS CのVer.1.50a販売時につけていたぐらいの本だからね。

だって本の内容がほぼただのマニュアルだからな

954 :ナイコンさん (ワッチョイ 83ce-IXeA):2020/06/19(金) 09:07:59 ID:s9wP4NHE0.net
TSR80用のオール大文字で書かれたソースも含まれてたな。BDS C。

955 :ナイコンさん (ワッチョイ 4e7a-hrv2):2020/06/19(金) 11:11:38 ID:ka+UjalT0.net
BDS C って作者のLeor Zolman 20歳の時の作品。
全アセンブラで開発されたんだってね。2002年にソースコード公開。

BDS C download page
https://www.bdsoft.com/resources/bdsc.html

956 :悩めるCプログラマー (ワッチョイ e316-Epcz):2020/06/19(金) 23:02:22 ID:VbEWK39n0.net
BDS Cで漢字が全く出ないわけでもないようです。
ただし文字の組み合わせによっては文字化けする。

957 :ナイコンさん :2020/06/20(土) 05:16:32.04 ID:ikkrxVqf0.net
「BDS Cの使い方」の序章の目的と制限のところにこんな風に書かれてるぞ

> 残念ながら、C言語の構造は、PDP-11のハードウェアに特質に適応するようになっており、
>8080のハードウェアの特質に対して適応しないPDP-11にとって自然な操作
>(自動記憶割付を処理するとき、大変重要なインデックス付きや、非間接的アドレス指定のような)
>は、8080においてはむしろ非能率的な命令コードへと展開されることになる。
>このためBDS Cは、8080システムプログラミング言語としてPDP-11のUNIX Cのように
>急速に一般化することはないだろうと思われるが、
>有能なマイクロプロセッサが、現存する8bitマシンと置き換わり、
>アプリケーション志向のアセンブリー言語プログラミングやヒストリ・ブックを放棄するに値する
>有能なCコンパイラが出現することは確実である。
>本書は、そのときのためのウォーミングアップと考えてもらいたい。
> かいつまんで言えば、アセンブリー言語のプログラミングと比較したときに
>BDS Cの大きな矛盾は、開発環境の機構と理解を重視したため、
>空間的かつ時間的な実行時のオブジェクトコードの能率の低下を招いてしまったことである。
>しかし、ほとんどすべての教育上の、
>また、ほとんどのシステムのプログラミング・アプリケーションにとって、
>犠牲は益よりも少ないと思う。

つまり、8086や68000のような有能なマイクロプロセッサが、
現存する8bitマシンと置き換わり
アプリケーション志向のアセンブリー言語プログラミングや
ヒストリ・ブックを放棄するに値する
有能なCコンパイラが出現することは確実である。
本書は、そのときのためのウォーミングアップと考えてもらいたい。

と書いてあるように読める
つまり、8bitパソコン+BDS Cは来る日のためのウォーミングアップ用だということ
8086や68000でC言語を使うことを否定する人はいない

958 :ナイコンさん (ワッチョイ de43-a7lq):2020/06/20(土) 20:58:42 ID:iOtngwnw0.net
MS-Cうんぬんと嘘まで付いてるのか、キチガイは。

959 :ナイコンさん :2020/06/21(日) 06:52:07.07 ID:TFuKxYpDp.net
京都マイコンの6809向けCは優秀だったと聞くが、試したことは無い。

960 :悩めるCプログラマー (ワッチョイ e316-Epcz):2020/06/23(火) 22:06:56 ID:bpPDWwHm0.net
>>957
BDS Cはウォーミングアップ用というのは自分の場合当たっていた。
8080ハードウェアの特質にというのはどうもよくわからない。
確かにZ80に比べるとハンティがあるのはなんとなくわかるが
Z80だとしてもどうも生成されるコードが効率わるいというような話も聞く。
BDS Cを使用する場合は「文法が古い」というのが一番の問題と思う。

961 :ナイコンさん :2020/06/25(木) 04:05:31.31 ID:xPcLr6AD0.net
8bit以上の変数計算が遅過ぎて実用性はまるで無いが
面白そうではある

962 :ナイコンさん :2020/06/26(金) 00:35:30.42 ID:hX0Zs62L0.net
グローバル変数でなら、アセンブラよりもそんなに演算が不利になる要素有るかな?

963 :ナイコンさん (アウアウウー Sad3-IYXd):2020/06/29(月) 22:14:27 ID:XXeomAP3a.net
性能的にはあまり不利な要素はなさそうだ。
ロジックの見通しのよさは明らかにCだが、高級言語()がアセンブラに負けるわけないし。
ただてさえアレな80に。

964 :ナイコンさん (ササクッテロラ Spa3-PKxn):2020/06/29(月) 23:54:14 ID:9Gq0k08Wp.net
信長の野望全国版からC言語使ってるのはもう有名。といっても機種間共通部分のゲームの芯をCで書いてるのだろう。
標準ライブラリはもちろん使わない。ハードに依存する部分はアセンブラで書く。
信長のようなゲームなら十分にCを使うメリットはあっただろう。

965 :ナイコンさん :2020/06/30(火) 03:37:52.07 ID:UzsZqSo90.net
シミュレーションゲームなんて速度求められないからな
PC98版の大戦略はBASICで書かれてたらしい

966 :ナイコンさん :2020/06/30(火) 03:39:37.26 ID:UzsZqSo90.net
信長の野望くらいしか例がないってのがね

967 :ナイコンさん :2020/06/30(火) 03:51:21.73 ID:UzsZqSo90.net
C言語だと関数のパラメーターはスタックに積むわけだが
スタックポインタをインデックスレジスタとして使う機能のない8080で
C言語で効率的なコードを吐けるわけがない
C言語はABIの規則に則ったコードを吐くわけだし
当時のコンパイラはみんなZ80ではなく、8080用だしな

968 :ナイコンさん :2020/06/30(火) 09:37:34.68 ID:1pYATo7G0.net
その言語内で完結するならABIなんてなんでもいい
Cだからって引数をスタックに積まなくたっていい

969 :ナイコンさん :2020/06/30(火) 09:57:40.09 ID:3//L7/tl0.net
単にサブルーチンコールとしてアセンブラの置き換えで考えりゃ良いよな
当時だとアセンブラの方が慣れてて得意だが、他種CPUへの移植性が悪いから高級言語を使うってなノリ

970 :ナイコンさん :2020/06/30(火) 10:03:51.36 ID:EIXBdzS9a.net
Cとアセンブラを併用することで開発効率とロジックの見通しが劇的に良くなる

971 :ナイコンさん (ワッチョイ 7f7a-RHle):2020/06/30(火) 12:14:42 ID:RqYeWTI30.net
BDS-C最大の欠点は MS-m80の生成バイナリとの互換性が無くリンクできないことなのよね。
同時期の8bit cコンパイラーのWhitesmith-Cはm80と互換性がありリンクできた。お高かったけど。

972 :ナイコンさん :2020/06/30(火) 16:09:07.89 ID:AsLhF4JC0.net
>>967
LSI-Cは、8080用らしからぬ最適化していて、
パラメータ2つくらいはレジスタ渡ししてたぞ。
一度、吐くコード読んでみたらどうだ?

973 :ナイコンさん (ワッチョイ 3fac-WSmS):2020/06/30(火) 18:16:36 ID:26bospzj0.net
>>964
属国の一覧表示なんか BASIC かと思うほど遅かったけどね。

974 :ナイコンさん :2020/06/30(火) 20:14:48.47 ID:UzsZqSo90.net
LSI-C80は持ってないのでMSX-Cで試した
ただの関数呼び出しのテストだが
MSX-Cの関数呼び出しのオーバーヘッドの大きいこと
(gccのx86_64とARM64では関数のインライン展開を抑制してます)

Cソース
https://pastebin.com/bWfLhn8Y

MSX-C Ver1.1 アセンブラ出力
https://pastebin.com/Bzt3fFaX

Turbo-C Ver1.5 アセンブラ出力
https://pastebin.com/y82ifpxs

おまけ
Ubuntu 18.04 x86_64 gcc-7.4.0 アセンブラ出力
https://pastebin.com/JUP4VFYu

Ubuntu 20.04 ARM64 gcc-9.3.0 アセンブラ出力
https://pastebin.com/9N4eKWeg

975 :ナイコンさん :2020/06/30(火) 20:18:14.14 ID:UzsZqSo90.net
ごめん、x86_64のやつ、インライン展開抑制してなかった
こっちがインライン展開抑制したやつ

Ubuntu 18.04 x86_64 gcc-7.4.0 アセンブラ出力
https://pastebin.com/PTuEv5uL

976 :ナイコンさん (ワッチョイ 3fa4-htoQ):2020/06/30(火) 23:48:32 ID:AsLhF4JC0.net
>>974
MSX-Cは使ったこと無いけど、安い分デチューンされてるようだね。

LSI-C80の関数呼び出し規則はこうなってるよ。
https://i.imgur.com/ze1UI0L.jpg

まさか、MSX-Cの違法コピー使っててマニュアルを持ってないから
正しいコンパイルオプションが指定できないとか?

977 :ナイコンさん (ワッチョイ 2743-Smji):2020/07/01(水) 04:11:37 ID:MHLk2hlE0.net
違法コピーじゃないよ
マニュアル見たがMSX-C Ver1.1に最適化オプションなんてないぞ
LSI-C80持ってるなら実際にコンパイルしてみたらいいんじゃないですかね?

978 :ナイコンさん (ワッチョイ 2743-Smji):2020/07/01(水) 04:36:27 ID:MHLk2hlE0.net
今回のプログラムはパラメーターが6個あるのがミソ
8080で無理にスタック操作するとここまで効率が悪くなるいい見本

979 :ナイコンさん (ワッチョイ 2743-Smji):2020/07/01(水) 05:12:58 ID:MHLk2hlE0.net
MSX-Cは関数じゃなくても、
ローカル変数を6個使って足し算するだけでも同じ
スタック操作が圧倒的に効率悪いらしい

Cソース
https://pastebin.com/UFGjfgef

MSX-C Ver 1.1 アセンブラ出力
https://pastebin.com/HDhKcxzt

980 :ナイコンさん :2020/07/01(水) 09:15:18.10 ID:wz5UNWNj0.net
8bitでC使うなら吐き出すコードを考えてプログラムしろってことだ

981 :ナイコンさん :2020/07/01(水) 09:50:44.36 ID:4KtwbAwNM.net
8bitに限らずその当時ならコンパイル結果を確認する事はよくあったな
GCCでも変なコード吐くことあったし

982 :ナイコンさん (ワッチョイ 736a-FEVw):2020/07/01(水) 11:15:27 ID:rLu631pB0.net
アセンブラ代わりに使うC言語なら、引数はスタックに積むかレジスタ渡しかだけじゃなく、
呼び出し側に埋め込まれてるってアセンブラテクニックを高級言語でも使えるパターンも選べるべきだったな
スタックに積まれた戻りアドレスから連続してる引数アドレスを使ってって、引数終わってる元アドレスとは別な所に戻るってなの

983 :ナイコンさん (ワッチョイ 0ace-VQSO):2020/07/01(水) 11:28:03 ID:FTuNkq3o0.net
CALL FUNC
DB 'a'
としておいて
EX (SP),HLでパラメータもらうやつ?

984 :ナイコンさん (ワッチョイ 736a-FEVw):2020/07/01(水) 12:11:07 ID:rLu631pB0.net
>>983
そう、文字列なんかもアドレスポインタじゃなく文字列全体を引数に入れられる

985 :ナイコンさん (ワッチョイ ab7d-rNvY):2020/07/01(水) 12:44:57 ID:wlDMyHkO0.net
msxのインタープリタはそうなってたな
逆アセンブルすると地獄になる

986 :ナイコンさん :2020/07/01(水) 20:41:51.65 ID:PPhZtYqX0.net
>>979
なんか、無理に8bitが遅いことにしたいみたいだね。
関数を再帰呼び出ししないなら、ローカル変数をstaticで
宣言すればもっと速いコードを出すだろうし、再帰呼び出し
する関数ならアセンブラで書いても効率悪い変数アクセスの
コードになるだろう。

昔は、今みたいに何も考えずに広いメモリ使えるわけじゃなかったから
16bitでも64KBのセグメントが付いて回って、吐くコードを意識して書く
のは当然だったし、Cが作られたPDP-11でもそれは同じだったと思うよ。

987 :ナイコンさん (ドコグロ MMaa-21HI):2020/07/01(水) 21:02:55 ID:qclZ6p3UM.net
単に当時のアーキテクチャーがC言語に合ってなかったって話だろ
6809辺りならもっとまともなコードになるだろうし

988 :ナイコンさん :2020/07/01(水) 22:08:27.32 ID:ICaasxt90.net
MSX-C Ver.1.2 ユーザーズマニュアルのPDFを見た感じでは、pragma指定でコンパイル結果が変わるかもしれんね。3.1.1 #プリプロセッサ文による制御 参照。
最大で引数3つをレジスタ渡しするというのもLSI-C80と同じはず。3.2.1 パラメータの渡し方 参照。
MSXマガジン永久保存版3の付属CD-ROMに入ってる。

989 :ナイコンさん (アウアウウー Sacf-JGE/):2020/07/01(水) 23:51:20 ID:wip1wloda.net
なんであの武将があそこでこう動いていればみたいな事を延々と話してるの?
バガじゃないの

990 :ナイコンさん (ワッチョイ 6aa4-BXkI):2020/07/01(水) 23:54:52 ID:PPhZtYqX0.net
>>987
そういや、6502のCってどういうコード吐くのか見たこと無いけど、
なんか悪夢みたいなもんだろうな。

991 :ナイコンさん (ワッチョイ bb99-dE/J):2020/07/02(Thu) 00:04:17 ID:++jZerDK0.net
次スレ
https://matsuri.5ch.net/test/read.cgi/i4004/1593615761/

992 :ナイコンさん (ワッチョイ 0aed-rs14):2020/07/02(Thu) 00:24:26 ID:nIh+x81b0.net
>>974
わざわざ引数6個で確認ですか
そんな関数作らねーよ
8bitの場合スタック操作は不利なんでローカル変数とかもあまり使わないとか工夫して使ってたがな

993 :ナイコンさん (ササクッテロラ Sp23-h0J+):2020/07/02(Thu) 00:40:18 ID:PSAN11Sep.net
32ビットみたいにバイナリ意識しないコード書けば遅いのは当たり前。
意識すればアクション以外なら十分使える。

994 :ナイコンさん (ワッチョイ 8ebc-uYGD):2020/07/02(Thu) 03:08:53 ID:35Faq8nt0.net
>>990
256バイトのスタックとゼロページに収まるなら引数やローカル変数へのアクセスもポインタ操作も効率良いCPU

995 :ナイコンさん :2020/07/02(木) 03:49:36.05 ID:f2GkeYkP0.net
16bitならauto変数をたくさん使おうが、パラメーターがたくさんあろうが
全く効率悪いコードにはならない
8bitでC言語を使うには制約が多すぎるねw
みんな8080でC言語使うには制約が多いことを認めてる
auto変数は使わない、パラメータは少なくって
それだと無理にC言語使うよりもBASICコンパイラ使った方が速いんじゃないか?

996 :ナイコンさん :2020/07/02(木) 03:53:39.76 ID:f2GkeYkP0.net
まさに「BSD-Cの使い方」に書いてあることそのまんま

> 残念ながら、C言語の構造は、PDP-11のハードウェアに特質に適応するようになっており、
>8080のハードウェアの特質に対して適応しないPDP-11にとって自然な操作
>(自動記憶割付を処理するとき、大変重要なインデックス付きや、非間接的アドレス指定のような)
>は、8080においてはむしろ非能率的な命令コードへと展開されることになる。
>このためBDS Cは、8080システムプログラミング言語としてPDP-11のUNIX Cのように
>急速に一般化することはないだろうと思われるが、
>有能なマイクロプロセッサが、現存する8bitマシンと置き換わり、
>アプリケーション志向のアセンブリー言語プログラミングやヒストリ・ブックを放棄するに値する
>有能なCコンパイラが出現することは確実である。
>本書は、そのときのためのウォーミングアップと考えてもらいたい。

997 :ナイコンさん :2020/07/02(木) 03:55:38.49 ID:f2GkeYkP0.net
>>992
Arduinoでもやってみれば?
パラメーターが6個以上の関数なんか普通に出てきますよ?

998 :ナイコンさん (ワッチョイ 4668-dSQ+):2020/07/02(Thu) 04:49:14 ID:kBB4nx3P0.net
>>997
>パラメーターが6個以上の関数なんか普通に出てきますよ?

ここには1つも無いが
http://www.musashinodenpa.com/arduino/ref/

999 :ナイコンさん (ワッチョイ 2743-Smji):2020/07/02(Thu) 06:18:30 ID:f2GkeYkP0.net
ArduinoのLCD用の有名なグラフィックスライブラリだが普通に出てくるよ
https://github.com/adafruit/Adafruit-GFX-Library

1000 :ナイコンさん (ドコグロ MMc2-21HI):2020/07/02(Thu) 07:06:32 ID:RJVNnO20M.net
>>990
アドレッシングモードがそれなりに豊富だから意外とまともなコードになりそう

1001 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1001
289 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★