EXCEEDの同人ソフト開発日記という名の備忘録

趣味のゲームソフト開発人。プロなのかアマなのかは不明(不定)らしい。

任天堂のソフトはいつも予定通りに出てこないって言われるけど、
ソフト作りっていうのは、そういうもの。
ゲームソフトは、期限までにやれと言われて、徹夜したり死に物狂いでやったからといって、
期待通りのものにはならない。そういうふうにすると、
結局、チームは妥協しなければならなくなる。
妥協させられて、できたものは、粗くなってしまう。
ユーザーは目が肥えていますから、受け付けてもらえない

山内 薄

EXCEED2009-11-08


おそらくコアのバグだと思うが、特定の文字列表示を行うと、ある法則で文字バケを起こす・・・

正直、このところ根詰め過ぎで頭が働かないので、気分転換に外食でカレーを食べたら、ふと思いついた。SBC のバグだ・・・。さっさと帰宅して、エミュレータのソース(マクロ)を見たら、やっぱり、 ~c を引く所を c を引いてしまっていたので、結果として1余分に引いてしまっていた。



しかしまあ、以下のロジックをたかだか数クロックで再現できるという「ハードウェア」という概念が、いかに高速かをつくづく感じるわけですよ。


#define ADC \
unsigned char c = (m_P & FLAG_C) ? 1 : 0; \
unsigned short buf16; \
\
if( m_P & FLAG_D ) \
{ \
unsigned short l = (m_A & 0x0F) + (buf8 & 0x0F) + c; \
unsigned short h = (m_A & 0xF0) + (buf8 % 0xF0); \
m_P &= ~(FLAG_C|FLAG_V); \
\
if( l > 9 ) \
{ \
h += 0x10; \
l += 0x06; \
} \
if( ~(m_A^buf8) & (m_A^h) & 0x80 ) m_P |= FLAG_V; \
\
if (h > 0x90) h += 0x60; \
if (h & 0xFF00) m_P |= FLAG_C; \
m_A = (l & 0x0F) + (h & 0xF0); \
} \
else \
{ \
buf16 = m_A + buf8 + c; \
m_P &= ~(FLAG_C|FLAG_V); \
if( ~(m_A^buf8) & (m_A^buf16) & 0x80 ) m_P |= FLAG_V; \
if( buf16 & 0xff00 ) m_P |= FLAG_C; \
m_A = (unsigned char)buf16; \
} \
\
FLAG_N_UPDATE(m_A) \
FLAG_Z_UPDATE(m_A) \