27 |
FM-7 ROM吸出し器の改版 (9) |
Arduino側のアクセス修正
前稿にあるとおりプログラムします。新たにprologue()及びepilogue()を作成して、PICと待ち合わせを行います。
void prologue() { while (digitalRead(RFREQ) == HIGH); digitalWrite(RFGNT, LOW); } void epilogue() { digitalWrite(RFGNT, HIGH); }
従来のアクセスの前後に挟んでアクセスコントロールを行います。例えば、readByte()という、あるアドレスから1バイトを読み出す関数の、
setAddress(address); // アドレスをセット d_pin_input(); // データピンを入力方向 DIR_Read(); // R/Wをread data = readData(); // データを入力
この本体4行に対して、今作成したリフレッシュ排他制御で挟みます。
prologue(); // リフレッシュを禁止 setAddress(address); d_pin_input(); DIR_Read(); data = readData(); epilogue(); // リフレッシュ許可
さらに、6809動作と競合しないように、トライステート制御で挟みます。
if (digitalRead(Z80W)==LOW) { ポート出力動作; } else { a_pin_input(); d_pin_input(); }
これを全ての出力ポートアクセスに被せることで、バスバッファを3個省略しています。以上から、次のようなプログラムを作成しました。
unsigned char readByte(unsigned address) { unsigned char data; if (digitalRead(Z80W)==LOW) { prologue(); setAddress(address); d_pin_input(); DIR_Read(); data = readData(); epilogue(); return data; } else { a_pin_input(); d_pin_input(); } }
Leave a Comment