Article #264

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.

FM-7 ROM吸出し器の改版 (9)

posted by sakurai on May 27, 2020 #264

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

Your email address will not be published.

You may use Markdown syntax. If you include an ad such as http://, it will be invalidated by our AI system.

Please enter the numbers as they are shown in the image above.