アカウント名:
パスワード:
昔は大変だったんだなあとしみじみおもう。
最近だったら、逃走回数カウントするのに、特に気にせずにint変数とか使っちゃいそうだよねぇ……
FC時代のバグや裏技には、こういうギリギリの節約のせいで生まれたものも多いはず。
マイナスはあり得ないとか言ってunsigned intか、微妙にケチってunsigned charとかにしそう。がっつりけちると共用体でビットフィールドかなぁ。値範囲チェックを入れたクラスにしてSet/Getで使うのが今時流か?
ただのフラグなのにintとかも。
最近は8bit型ですね。さすがに32bit型はやりすぎでした。
えー。「BOOL型だけど、エラー値は-1」みたいなことができなくなるじゃないですかっ。
GetMessage function (winuser.h) - Win32 apps | Microsoft Docs [microsoft.com]
# それ、駄目な例。
WindowsのBOOLはtypedefしたものだからboolと同じに考えてはいけないのでは。
Windows データ型 (BaseTsd.h) - Win32 apps | Microsoft Docs [microsoft.com](このページは英語に切り替えて読むのがお勧めです)
いつからintが32bitだと錯覚していた?
# 仮にファミコン用のCコンパイラがあったとしたら、int は 8bit になるのだろうか
ファミコン時代は知りませんが、最近のCだとintは最小16bitが保証されてたような。
すくなくとも、今でも普通に組み込みで多用されている8bitマイコンのコードでは、intは16bit。
というか、コンパイラが対応してようがいなかろうが、int8_tとかを使ってる。intとかlongは使わないな。さすがにcharは使うが。
コンパイラ変えたり処理系変えたりでバグるからね。C言語の仕様を変えろとおもわんでもない。
CPUによっては8bitアクセスのほうが速度、コードサイズのコスト高かったりするんですよネイティブサイズが最大の効率なんてよくある話で
組み込み用の低速なCPUでは8bitアクセスも1命令でできるので高速です。逆に、今どきの高速なCPUでは、メモリアクセスがボトルネックなので、データサイズを小さくしてキャッシュメモリの効率を上げるのが望ましいのです。
あのバグのせいでカジノは楽しめなかったような
そもそもドラクエのカジノやミニゲームは面白くないので、作業回避のためにシリーズのすべてで実装すべきだとすら思う。
11のマジスロは面白かったよ。マジでスロットだった。
当時はオーバーフロー防止のための条件文すらメモリの無駄だったのですねif (cnt!= max) cnt++;
>ドラクエIVでは4回目の「にげる」で必ず逃げられる
むしろ疑うべきはこちらでは?
ifなんて命令はないぞやるとしたらf8でandとってゼロフラグ見て分岐だぞ多分
if (cntmax) cnt++;こっちのほうが安全
安全確認、ヨシッ!
あらゆるばあいで安全じゃなくなってるけど現場猫以外誰も突っ込まないのか...
不等号がタグ扱いで消えてるだけなんで、よく訓練されてる./erは脳内補完余裕
どっとはらい
模範回答乙
まあ、そういった考察抜きにカウンタをいじるたびに都度ガードをかけるほうが、プログラマの能力に依存しない分安全ではあります。クラス化してアクセサでガードするのが現代的でしょうか。
逃げられないのならカウント不要では?
別変数を使用せずに2つの変数の値を入れ替えるというTipsを思い出した
a ^= b;b ^= a;a ^= b;
組み込みに限らず、メモリが高価だった当時は1ビットを削ることに心血を注ぐのが当然だったって話は聞きますね。初代DQだと、使う文字を削って"り"と"へ"はひらがなとカタカナ共用にしちゃって画面表示上では「りレミト」「トへロス」だったとか。
使える文字数は少しづつ増えていきましたけどお題のⅣでも結局「アりーナ」「クりフト」のままでしたね。個人的には戦闘画面の背景が(Ⅰは綺麗だったのに)Ⅱから真っ黒になったのが衝撃的でした。でもそのお陰で複数モンスターや文字数増加に回せたらしいので痛し痒し。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
計算機科学者とは、壊れていないものを修理する人々のことである
ノリが組み込みソフトウェア (スコア:0)
昔は大変だったんだなあとしみじみおもう。
Re:ノリが組み込みソフトウェア (スコア:1)
最近だったら、逃走回数カウントするのに、
特に気にせずにint変数とか使っちゃいそうだよねぇ……
FC時代のバグや裏技には、
こういうギリギリの節約のせいで生まれたものも多いはず。
Re:ノリが組み込みソフトウェア (スコア:1)
マイナスはあり得ないとか言ってunsigned intか、微妙にケチってunsigned charとかにしそう。
がっつりけちると共用体でビットフィールドかなぁ。
値範囲チェックを入れたクラスにしてSet/Getで使うのが今時流か?
Re: (スコア:0)
ただのフラグなのにintとかも。
Re: (スコア:0)
最近は8bit型ですね。
さすがに32bit型はやりすぎでした。
Re: (スコア:0)
えー。
「BOOL型だけど、エラー値は-1」みたいなことができなくなるじゃないですかっ。
GetMessage function (winuser.h) - Win32 apps | Microsoft Docs [microsoft.com]
# それ、駄目な例。
Re: (スコア:0)
WindowsのBOOLはtypedefしたものだからboolと同じに考えてはいけないのでは。
Windows データ型 (BaseTsd.h) - Win32 apps | Microsoft Docs [microsoft.com]
(このページは英語に切り替えて読むのがお勧めです)
Re: (スコア:0)
いつからintが32bitだと錯覚していた?
# 仮にファミコン用のCコンパイラがあったとしたら、int は 8bit になるのだろうか
Re: (スコア:0)
ファミコン時代は知りませんが、最近のCだとintは最小16bitが保証されてたような。
すくなくとも、今でも普通に組み込みで多用されている8bitマイコンのコードでは、intは16bit。
Re: (スコア:0)
というか、コンパイラが対応してようがいなかろうが、int8_tとかを使ってる。
intとかlongは使わないな。さすがにcharは使うが。
Re: (スコア:0)
コンパイラ変えたり処理系変えたりでバグるからね。
C言語の仕様を変えろとおもわんでもない。
Re: (スコア:0)
CPUによっては8bitアクセスのほうが速度、コードサイズのコスト高かったりするんですよ
ネイティブサイズが最大の効率なんてよくある話で
Re: (スコア:0)
組み込み用の低速なCPUでは8bitアクセスも1命令でできるので高速です。
逆に、今どきの高速なCPUでは、メモリアクセスがボトルネックなので、データサイズを小さくしてキャッシュメモリの効率を上げるのが望ましいのです。
Re: (スコア:0)
当時のファミマガには具体的な枚数が伏せられてましたけど、
1回の購入枚数を上げていくと計算合わなくなるのでピンとくるんですよね。
[]_g@
Re: (スコア:0)
あのバグのせいでカジノは楽しめなかったような
Re: (スコア:0)
そもそもドラクエのカジノやミニゲームは面白くないので、作業回避のために
シリーズのすべてで実装すべきだとすら思う。
Re: (スコア:0)
11のマジスロは面白かったよ。マジでスロットだった。
Re: (スコア:0)
当時はオーバーフロー防止のための条件文すらメモリの無駄だったのですね
if (cnt!= max) cnt++;
Re: (スコア:0)
>ドラクエIVでは4回目の「にげる」で必ず逃げられる
むしろ疑うべきはこちらでは?
Re: (スコア:0)
ifなんて命令はないぞ
やるとしたらf8でandとってゼロフラグ見て分岐だぞ多分
Re: (スコア:0)
if (cntmax) cnt++;
こっちのほうが安全
Re: (スコア:0)
安全確認、ヨシッ!
Re: (スコア:0)
あらゆるばあいで安全じゃなくなってるけど現場猫以外誰も突っ込まないのか...
Re: (スコア:0)
不等号がタグ扱いで消えてるだけなんで、よく訓練されてる./erは脳内補完余裕
Re: (スコア:0)
どっとはらい
Re: (スコア:0)
逃げた回数カウンタのカウントアップ処理をボス判定の後か逃げるのに失敗した処理の後でやればよかっただけでは
Re: (スコア:0)
模範回答乙
まあ、そういった考察抜きにカウンタをいじるたびに都度ガードをかけるほうが、プログラマの能力に依存しない分安全ではあります。クラス化してアクセサでガードするのが現代的でしょうか。
Re: (スコア:0)
逃げられないのならカウント不要では?
Re: (スコア:0)
別変数を使用せずに2つの変数の値を入れ替えるというTipsを思い出した
a ^= b;
b ^= a;
a ^= b;
Re: (スコア:0)
組み込みに限らず、メモリが高価だった当時は1ビットを削ることに心血を注ぐのが当然だったって話は聞きますね。
初代DQだと、使う文字を削って"り"と"へ"はひらがなとカタカナ共用にしちゃって画面表示上では「りレミト」「トへロス」だったとか。
Re: (スコア:0)
使える文字数は少しづつ増えていきましたけどお題のⅣでも結局「アりーナ」「クりフト」のままでしたね。
個人的には戦闘画面の背景が(Ⅰは綺麗だったのに)Ⅱから真っ黒になったのが衝撃的でした。
でもそのお陰で複数モンスターや文字数増加に回せたらしいので痛し痒し。