現在地

Universal Monitor

[UniMon] 内部ルーチンの新しい呼び方を試す(その1)

カテゴリー:

以前[UniMon] 固定エントリポイントで機能ごとに固定したエントリポイントを用意することでユーザプログラムから内部ルーチンを使えるようにする方法を用意しました。

でもよく考えるとこれはあまりよい方法ではなかった気がしてきました。

MC68000を考えるとサブルーチンコールではなくTRAPを使いたいですし、MC68000のTRAP命令は16通りしかありません。今のところ足りるとはいえ、できればエントリポイントは1つにしたいところです。

[UniMon] RP2A03判別 と Lコマンド追加

カテゴリー:

先日のRP2A03ボードによってRP2A03判別ルーチンの確認ができたのでここに記しておきます。

まず判別するためには両者の違いを利用することになりますが、簡単なのはRP2A03で削除されている10進演算機能の有無を使う方法です。

他にも内蔵のAudio Processing Unit(APU)などのレジスタを参照する方法も考えられなくは無いですが、RP2A03以外では何がつながっているかわからず、誤判別や思わぬ副作用の原因になるかもしれません。

それではソースコードです。

MUTIF09

テーマ:

Universal Monitorを移植しようと組み立てたMUTIF09、他の石も載せてからと思っていましたが時間かかりそうなのでとりあえず現状です。

MUTIF09
MUTIF09はKasumi YOSHINO(JA1UMI)氏のシングルボードコンピュータボードで、資料はBOOTH・プリント基板はオレンジピコショップにて入手可能です。Universal Monitor移植に最低限必要なもの(と手持ちがあって迷いのないものの一部)を搭載しています。

[UniMon] レジスタ命令の内側(その3)

カテゴリー:

最後となる今回は「3. メモリに退避されている内容をレジスタに戻しユーザプログラムに制御を渡す」です。

コマンドで値を変更したらその状態でユーザプログラムを実行できなくては意味がありません。

要はレジスタに値を設定して目的の番地にブランチすれば良いだけなのですが、すでに設定済みのレジスタを壊さないようにしなくてはいけないので進むにつれ制約が増えていきます。

比較的多くのプロセッサで使える手は、「スタックに積んでおいてPOP,...,POP,RET」です。ちょうど1回目の逆です。

スタックを使った割り込みに対応しているプロセッサなら大抵これが使えます。

割り込み時にはレジスタの状態を元に戻す必要があるからです。スタックが専用空間にあって自由にアクセスできないなど使えないプロセッサもありますが...

MC6800を例に見てみましょう。

[UniMon] レジスタ命令の内側(その2)

カテゴリー:

前回は「ユーザプログラムからモニタに制御が渡ったときにレジスタ内容をメモリに退避する」でしたので、今回は「2. メモリに退避されている値を表示・変更する」についてです。

レジスタ内容をメモリに退避するのはプロセッサ固有の書き方が必要でしたが、すでにメモリ上にある値を表示・変更するだけであれば特殊なプログラミングは必要ありません。とはいえレジスタの名称や個数はプロセッサ毎に異なりますからそれなりの工夫は要ります。

まず全レジスタの一覧表示は簡単です。ループとテーブルで書いてもいいのですが、レジスタ数が少ないうちは「レジスタ名を表示・メモリから値をロード・16進表示」を必要数分並べてしまっても大したことはありません。

レジスタの変更はそうはいきませんので、以下のようなテーブルを用意しました。

[UniMon] レジスタ命令の内側(その1)

カテゴリー:

MC6800に続いて6502, MC6809についてもレジスタ命令を追加しましたので、その内側について書いてみたいと思います。

さて、レジスタ命令とはレジスタの値を表示・変更する機能なわけですが、CPUがある瞬間に実行できるプログラムは1つですからユーザプログラム実行中はモニタプログラムは実行できません。モニタプログラム自身の動作にもレジスタは必要です。

ではどうするか?

モニタプログラムには次の3つの機能が必要になります。

MN1613ボード(モニタ移植編)

テーマ:

前回は簡単なテストプログラムを動かしましたが、その後アセンブラもある程度動作するようになったのでいつものUniversal Monitorを移植することにします。

しばらくボードを動かしていなかったので念のためにもう一度小さなプログラムを試してみましたが、何故か動作が変というかいきなり暴走している感じです。
原因はいくつか考えられます。

  1. ボードかCPUが壊れてしまった
  2. (リセット動作には不明な点が多いので)以前動いたのは偶然だった
  3. アセンブラが誤ったコードを吐いている

ハンドアセンブルと比較したり、以前と同じコードを試したりで3.で無いことはすぐに判明しました。

EMILY Board

テーマ:

メモリ基板、確かにメモリではあるのですがそれだけでもないので「EMILY Board」と名付けました。

Environment for Microprocessor Introduction ... の略というのはもちろん後からのこじつけで、二式大型飛行艇の連合国側コードネームからの命名です。

二式大型飛行艇
写真は鹿児島の鹿屋航空基地資料館に展示されている二式大型飛行艇、唯一の現存する機体のはずです。

これだけではなんなのでこれまで書かなかった資料編をお送りします。

コネクタ ピン配置

まずは基板上部のCPUボードへのコネクタです。

[UniMon] アセンブリ言語で書いている理由

テーマ:

現時点でも6800, 6809, 8080, AVR, Z8, Z80と多くのプロセッサで動いているUniversal Monitorですが、まだまだ対応プロセッサは増やすつもりでいます。

すでに完成したボードがあって動かせるMC68000、SBC8088ボード購入済みであとは組み立てるだけの8086/8088、6502/65C816あたりが次の候補ですね。

これだけの多プロセッサ展開を前提としているのになぜC言語を使わないのか不思議に思われるかもしれません。

そこで今回は何故オールアセンブリ言語なのか書いてみようと思います。

ページ