aki_iic’s blog

己の欲せざる処人に施す事無かれ、狂人の真似するは即ち狂人なり

motorola mc6800/mc6809(その9)

 随分空いてしまったがmc6800というかmc6809に関する件。実は社会人になってからの事柄故、躊躇していたが今は退職した身で内容もFDCなるロストテクノロジー(最近の若い方はフロッピーをご存知ない方もいる様なので)のお話。

1.MB8877

 MC6809で48KB DRAM+80x25 VRAMでセルフアセンブラを動かした頃迄書いたが、その後、社会人になって残業三昧(当時は残業時間=収入だったので当時の新人や若手は喜んで?残業や休日出勤したものです。昨今の若い方には想像が付かぬかもしれませんが:)でその稼ぎを秋葉原で消費する日々でありました。もっとも当時はまだまだ若かったので(妙な自尊心があって)メーカ製のPCを買う気は無かった(何せ8ビットマイコンの時代だったから比較的チップから組み立てるのも雑誌の記事を参考にすれば個人でも比較的容易でありました)ので次はフロッピーベースのFDOS(当時はOSという語彙はメインフレームのOSの事で8ビットPCではBasicROMが事実上のOSでした)を実現したいというのは当時の流れとしては当然で、8080/z80系ならcp/m(所謂cp/m-80ですね)、68系ではFlexというのが相場でした。で、私はmotorola系だったので:)FDOSはFlex9を想定し、フロッピーは当時安価であった(それでも数万円した)YD-580という2D(なつかし)の5インチFDDを当時の亜土電子でケース+電源込みで1台購入し、FDOSが動いてから2代目のYD-580を購入した記憶がある。

 当時は日本の半導体産業は絶好調でFDC(Floppy Disc Controller)もNEC独自のuPD765(後のIBM−PCに採用されメジャーになる)、そしてWD(Western Digital:今やストレージメーカですな)のFD1771/FD1791とセカンドソースの富士通MB8876/8877が有名所で当時の記憶では入手が容易で比較的安価で応用例(記事)も多めなMB8877でFDCボードを製作する事にした。

www.st.rim.or.jp

 久しぶりに小松さんのサイトから引用。

2.PIO(プログラム転送)

 当時はプログラム転送のPIO(Program Input/Output)と(当時の会社では)呼んでいたのでそれに習うと一般的にFDCは250kbps(5inch 2D),500kbps(5inch 2HD/8inch 2D)と高速(当時としては)故、製品ではDMAを用いるのが常識でしたが、個人の道楽(会社員だけど)はFDCからデータ受信/送信する時は無限ループで待てば32us/dataの転送速度を8bitのmc6809@1Mhzでも充分可能なのでほぼ例外無く、PIOで構成されておりました。これは8080/z80cp/m-80でも同様で要は1byte転送を32us(5inch 2Dの場合),16us(5inch 2HD/8inch 2Dの場合)で行えれば手段不問だったのでFDCのDRQ,IRQを読み込み、bit7をDRQ,bit6をIRQにした記憶がある。bit7にDRQを割り振るのは6800系はbit7の状態がロード命令でNフラグに反映されるから、

L1 LDB FDCST  ; bit7がDRQ,bit6がIRQを想定

   BMI L2  ; DRQ?

  BITB #BIT6  ; IRQ?

  BEQ L1  ; IRQでなければループ

  RTS

L2 LDA FDCDT ; FDCからデータ読み込み

  STA  X+  ; 6809ではpost incrementが使える

  BRA L1

 みたいな感じで(すみません、記憶で書いているので間違っている可能性があります)プログラム転送でFDCからデータを読み/書きしておりました。無論、割り込み禁止なので(そもそも割り込み使って無かった:)上記の如き閉じたループでやりくりしておりました。このレイヤをFlexではdisk driver、cp/mではbiosと呼ばれるレイヤであります(昨今のPCで呼ばれるBIOSとはレイヤが異なる)。

3.FDC9216B

 FDC側はディジタル回路で基本繋いで上記の如き簡単なルーチンを書けば誰でも出来る作業でしたがFDDとのインターフェースはNRZIでencode/decodeするFDDからの信号を復調する為の所謂データセパレータが必要で、当時はアナログPLLが高級品でDPLLは性能は落ちるが安価で容易に構成出来る当時良く使われていたSMCのFDC9216という8ピンのデータセパレータを使ってFDCとインタフェースしておりました。もっともこのDS(データセパレータ、Deep Stateではないよ:)は簡易型だけあってか内周部ではリードエラーでリトライを繰り返す(幸いエラー終了にはならないレベル)場合があって、品質の良さそうなフロッピー(当時は日本の磁気媒体メーカはほとんど全てがフロッピーを販売しておりました、私はTDKとマクセルのフロッピーを使用)を先の残業代を投入してわざわざ秋葉原ラジオ会館(当時)2Fの富士なんちゃらとかいう店舗で購入しておりました。

4.FLEX9

 OS-9/6809が登場する迄は当時個人で入手可能な6800系のFDOSは事実上、FLEXしか無かったので横浜の工人舎迄買いに行った記憶があります(cp/m-68kと混同しているかもしれません)。当時はパソコンはROM−Basicが主流でFDOSは一般的では無い商品だったので秋葉原では売られて無い(亜土電子の離れで売られていたかも?)のでサザン・パシフィック(なつかし)らが有った横浜界隈に出向いてウロウロしておりました。

 FLEX9は移植が容易(上記の如きdisk driverと後はコンソール入出力とプリンタドライバだけで動作した)だったのですが +++のプロンプトが出た時は感動しました(jmp $dc03とか:)。もっとも同時は仕事三昧で徹夜も当たり前(当時は業種関係無く徹夜で対策という名のおしごとに当たっていたものです、ブラックなんて同時は無かった:)そういう訳で色々投資して動くようになったFLEX9ですが思った程、活用はしなかった(出来なかった)気もしますが、初めてFDC/FDDインタフェースを体得した事は大きく、後の8086/v30,mc68000(cp/m-68k)に繋がっていくのでありました(おわり)。

20240331 20:18追記:FDCリードルーチンの誤記訂正。