eSC-3000バグ修正 その1

ベーシックレベルⅢでは使えているデータレコーダが、ホームベーシックで使えない件を調べる。Z80にDEBUGログを吐かせて、2つの違いを追ってみました。

_CPU_DEBUG_LOG

_DEBUG_LOG

どうやらホームベーシックは、データレコーダを使用する際に、SIG_DATAREC_REMOTEを投げないようですが、eSC-3000は受け取る前提で実装していました。やっつけのパッチを適用した。

SIG_DATAREC_OUTを受け取ったら、処理する前にSIG_DATAREC_REMOTEを投げてしまう。

if(id == SIG_DATAREC_OUT) {
	bool signal = ((data & mask) != 0);
//	if(rec && remote && signal != out) {
	if(rec && signal != out) {
		change = true;
		if (!remote) {
			remote = true;
			write_signals(&outputs_remote, remote ? 0xffffffff : 0);
			update_event();
		}
	}
	out = signal;
}

void DATAREC::load_image()の最後でSIG_DATAREC_REMOTEを投げてしまう。

play = true;
update_event();

if (!remote) {
	remote = true;
	write_signals(&outputs_remote, remote ? 0xffffffff : 0);
	update_event();
}