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();
}
}