aki_iic’s blog

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

Motorola MC6800(その5)

 34℃という猛暑が続きますが(自称含めた)意識高い系の環境活動家と築地や変態空間で禄に取材もせず「転写記事モドキ」で自爆を繰り返している上から目線が滑稽なメディア様はこの猛暑の中でも28℃に環境調整などと生ぬるい事ではなく「無冷房・無電源による地球環境を守る活動にご自身のお命を賭ける覚悟(理念)」であられるかと存じます。理念が現実世界を凌駕する自称文系インテリ(理科科目は除く)様はさぞかし日頃の言動に反しない庶民共が付き従うご立派な行動規範を率先されるのでしょう(ですよね〜)。そうそう念の為に申し上げておきますとスマホも電気を充電器経由で充電する仕掛けなのでスマホを使う=地球環境破壊行為なのですよ(貴方方の価値基準では)。ご留意頂きたく(憮然)。

------------------------------------------------------------------------------------------------------------------

(前回からの続き)

 ハードウェアの事柄ばかりでソフトウェアに関する記載が少なかったのでMC6800というか初めて体験したマイクロコンピュータ(というかノイマンマシン)で思った事を少しだけ書いてみる。今でもソフトは不得手故、見当違いで大雑把な印象に過ぎないけれど。

11.MC6800のプログラミングモデル

 

MC6800 programming model

www.st.rim.or.jp

 今サーチしたら1977年発表の日立製作所さんの社外報(日立評論1977年5月号:8ビットマイクロコンピュータHMCS6800の特徴と基本構成)がヒットしたのでリンクを記す↓

https://www.hitachihyoron.com/jp/pdf/1977/05/1977_05_10.pdf

 高校の物理部時代にH68/TRの関連マニュアルを(中身も理解出来ずに)読んでいた記憶(錯覚かもしれない)でこのような類の構成図があったような気もする(自信なし)。それはともかく当時の日立製作所富士通と並んでMotorola MC6800(後にMC6809,MC6801)のセカンドソースでありintel 8080A、8085AやZilog Z80のセカンドソース(RE含む)のNEC東芝、三菱、後のシャープ他のメーカとは異なる戦略を取っていた。上記マニュアルの大半の図面と情報は無論オリジナルのMotorola社のドキュメントの翻訳であるがどういう経緯か日立も富士通もクロックジェネレータだけはオリジナルデザインのチップで(MC6871Bのハーメチックシール製法のライセンスの問題とか?)設計されていた。後に気づくがMC6800の∮1、∮2のノンオーバラップ2相クロックは5V近くまでスイングを求めているものの実用的には(松本さんの回路の如く)7405の如きオープンコレクタ+プルアップ抵抗で充分安定に動作するのでi8224の如き+12Vを必要とするintel 8080Aに比べて少なくともクロック系は単純な構成で済んだ(+12V、−5VもCPUの為に必要とする事は無かった)。いつのまにやらハードウェアの話に偏ってしまったので話を戻すと

 

M6800プログラミングモデル

 をハードウェアが安定動作するようになってからはこれらのレジスタモデルと命令セットを暗記出来る様になる。

12.最初のプログラム

 松本吉彦さんの名著「私だけのマイコン設計&製作」のハードウェア製作の最後の部分に動作確認の為のプログラムの記載がある。これをハードウェアの動作が安定するまえ永遠に繰り返すのだが

Adrs   Inst.  operand  mnemonic

FF00 7C FC00 INC FC00

FF03 7E FF00 JMP FF00

 といった感じの機械語プログラムであった。MC6800はメモリを直接アクセスする命令が充実しているので上記プログラムは

・FC00番地のデータを+1する

・それを繰り返す

 動作となる。この程度の命令では然程抵抗感無く理解出来たのだがさっぱり分からなかったのが

13.インデックスレジスタ

 であった。これは松本さんのプログラムがコードを減らしたい為か

FF00 CE 0080 LDX #$0080

FF03 6F 00   L1: CLR 0,X

FF05 09      DEX

FF06 26 FB    BNE L1

 といったコードで記載されていたのでインデックスレジスタ(以下X)の終了条件が0以外の場合にはどうすれば良いかさっぱり分からなかったのです。まあCPXという命令を用いればそれが可能となる訳ですが後の章にならないと出てこなかった(或いは見落とした)為に

MC6800のXレジスタはインデックスレジスタ(ポインタ)でもあり、

ゼロフラグが変化するループカウンタでもある

 というのが理解出来る迄結構時間を要した記憶がある。逆に80系ではBC、DEレジスタペアをポインタとして使用するとフラグレジスタは変化せず変化するのはB,C,D,E等8ビットレジスタとして使用する場合に限られるのだから細かいかもしれないが設計思想の違いを感じる気がしないでもない。実の処MC6800がPDP11のミニコン的なアーキテクチャを参考にしたという件はMotorola系のプロパガンダとして良く出てくるがそもそもPDP11を知らなかったのでプログラムの組みやすさがどうちゃらとかいう宗教論争より

何でも良いからやりたい事が簡単に実現出来る

例:LEDに表示させる、VRAMに文字表示させ、スクロールさせる、カセットにプログラムを保存出来る、等々

 手段であればプロセサアーキテクチャなぞどうでも良いとの悟りの境地に到達するのは16ビットマイコンの末期頃ではなかったかと記憶している。その頃は会社で組込みシステム三昧な日々を送っていたので仕事と趣味は別次元だからアーキテクチャがどうだから等という贅沢は許されない(あたりまえ)。

14.自然と覚える機械語命令セット

 そうは言いつつ初めてのマイコンで当時はそれしか自分が作って使えるマイコンボードは無かったので前述の如く松本吉彦さんの本を起点としてトラ技やインタフェース誌、初期の頃はRAM誌やASCII誌等も参考にしつつ機械語アセンブラで8ビットマイコンのプログラムを組んでいたが実用一点張り(EPROMの書込みを行う、逆アセンブラを移植する等)でゲームの類はTinyBasicのStarTrek以外はほぼ無かったのは私の性癖(ゲームとは他人が作ったプログラムをユーザとしてそのフローを流すだけで得るモノは何も無く、何度も繰り返し同じようなことを実験動物の如く強制されるのが嫌だった)の為であろうと思っている。似たような事を繰り返すのが不得手(猫型人間なので)な性分故、その最たるゲームというのは相性が悪かったのだろう。おかげさまで一大産業に成長したゲーム機産業とは無縁であるのは幸運であったと個人的には考えている。まあそういう事だからプログラムが上達する事もさして無く情報系には然程関心は無かったのだが当時必修科目だったFORTRAN(66の時代です:)のような高級言語、特にコンパイラ系には興味を唆られた記憶はあるが雲の上の存在(JOBがABENDしてTRACEBACKを喰らうと途方に暮れていた苦い思い出も。まあゼロ除算だったりループカウントがマイナスだったりしたのだが)でMC6800界隈ではASCII誌にTL/1という8ビット変数固定の1パスコンパイラがあって書式がPascal風というかPL/1を標榜した作者の理念は立派で8ビット変数に限られるがオンメモリコンパイルも充分速く1MhzのMC6800でも充分実用になったが結局私が必要とした低レベル処理はアセンブラなり機械語でこつこつハンドアセンブルMC6809ではセルフアセンブラ)したのが当時の実態でありました。

 話を戻すとMC6800は70種類程度の命令セットがあるのだけどほぼ全ての命令を記憶出来たのは命令セットとアドレッシング・モードが規則的で例えば

 CLR A 4F、CLR B 5F、CLR 0,X 6F 00、CLR 7F XXYY

 といった風に命令に規則性があったので覚えやすかったという実態がある。これはハンドアセンブルする時には大変便利で暫くすると命令表をほぼ見ないで機械語プログラムが書けるようになる(多分、誰でもそういう状況に追い込まれるとそうなるのでは)が相対分岐のオフセット計算だけは面倒で松本モニタのBコマンドで自動計算していた(何度でも松本吉彦さんに感謝)がMC6809でオフセットが16ビットにも拡張されたのでそこは自分で機能追加した記憶もある。

15.相対分岐

 Motorola系信者さんが必ず引き合いに出すのが相対分岐命令で確かに絶対分岐命令と異なりプログラムの配置を変えても動作するのは有難いが所詮±127バイトであって故にMotorola系優位とは恥ずかしくて言えなかったがこれが16ビットオフセットが可能なMC6809となるとレジスタ強化とアドレッシング・モードの充実で非常に使い勝手が良いマイクロプロセサとなりMicroware OS-9の如きそのアーキテクチャを積極的に活用したマルチタスクOSが8ビットCPUの領域で登場する事になるのは後々のお話

 

MC6809 programming model

 マイコンアーキテクチャがどうちゃらと抜かす割にプログラミングモデルも出せないマイクロソフトご出身の社長さんもいらっしゃるそうなのでここはMC6809アーキテクチャの片鱗であるプログラミングモデルをMotorolaのドキュメントから示しておこうか(無論、皮肉ですよ)。当時はPosition Independentと称して後々のMC68020でも実装されるアドレッシングモードであるがこれが無いとOS-9uClinuxの様なMMU無しでマルチタスクの実現は難しかっただろうと個人的には考えている。

 今やプロセサアーキテクチャ論争はGPUやAIアクセラレータの如き専用処理プロセサ・コントローラが花盛りでこの論争が決着するのが何時頃になるかは興味を唆るし疑似的な量子コンピュータもいつかはエンドユーザにも提供される日が来るだろうからノイマンマシン全盛の時代はまだまだ続くだろうし、それを凌駕するだけのコンピュータアーキテクトは所謂IT詐欺師業界には存在しないのだろうと思っている。冷静に考えるとコンピュータアーキテクチャが進化しないのは市場がそれで満足している為でそうでないニッチな市場(例えばML)が新たなアーキテクチャの萌芽となるのが技術の進展でありその意味ではIntel,Microsoftとその手下共によるコンピュータアーキテクチャデフレの大罪は深く重いがそれを凌駕出来なかった挑戦者・競争者にも相応な事由があるのだろう。世の中自由競争である(リアル指向としての)。