この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。
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の境界が何か悪さしてるんだろか。
謎だ。とりあえず時間切れなので、あとで調べるか。
2014-09-21 23:18
nice!(0)
コメント(0)
トラックバック(0)
コメント 0