SSブログ

PDP-11(simh)のrk11 のデータ読み込みのなぞ

PDP-11のRK11 ディスクをたたいて、ディスクの読み書きをC言語からやっている。
とりあえず、以下の関数read_blk()を実装して任意のブロックを1ブロック分読めるようになった。



#define RK11_CTL_REG_ADDR (0177400)

static volatile struct rk11 {
  uint16_t rkds; // 0177400                                                                   
  uint16_t rker; // 0177402                                                                   
  uint16_t rkcs; // 0177404                                                                   
  uint16_t rkwc; // 0177406                                                                   
  uint16_t rkba; // 0177410                                                                   
  uint16_t rkda; // 0177412                                                                 
} *rk11_p = (struct rk11*)RK11_CTL_REG_ADDR;

void read_blk(void *buf, int blk_no)
{
  unsigned int cylnd = (blk_no/12)>>1;
  unsigned int plane = (blk_no/12)&1;
  unsigned int sect = (blk_no%12);

  rk11_p->rkda = (cylnd<<5)|(plane<<4)|sect;
  rk11_p->rkba = (uint16_t)buf;
  rk11_p->rkwc = -256;
  rk11_p->rkcs = 5;    // READ & GO                                                                                                                   

  while(!(rk11_p->rkcs & RKRDY))
    ;
}


が、ディスクのブロックを0番地に順に読み込んでいって、 なぜか転送先07000番地に指定すると、おかしな挙動になる。 simhのeコマンドでメモリダンプすると、07000-07777はデータはあるし、 転送してるっぽいけど、010000の境界が何か悪さしてるんだろか。 謎だ。とりあえず時間切れなので、あとで調べるか。

nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。