現在地

ソフトウェア

6502ボード(ソフトウェア編)

テーマ:

ハードウェア編に続いて今回はソフトウェア編です。

最初のテストはJMPでループを作ってみます。これは3バイト命令なのできりの良いアドレスに配置すればA0, A1が変化しA2以降のアドレスは変化しません。

これでメモリ基板から読んで実行できていることがわかります。メモリ基板のターゲット側ポートはこれまで未確認だったのですが、ここで確認が取れました。

この後はメモリへの書き込みなど一つずつ確認していくのが堅実だとは思いますが、一気にUniversal Monitorの移植に進むことにしました。

実はこの時点ではR65C51 ACIAは未搭載だったのでメモリ基板のコンソール機能を利用します。この機能も未確認なのでまずはオープニングメッセージを表示するところまで移植してみます。

6502のアセンブリ言語を書くのは初めてです。

Accelerated-X

テーマ:

カテゴリー:

昔使っていたXサーバのマニュアルも出てきました。

マニュアル
386bsd, FreeBSD, Linux などのPCのUNIX系OSのグラフィック環境としてはX Window Systemを使用するのが一般的です。X Window System自体はオープンソースで、PC用の実装であるX386, XFree86ももちろんオープンソースです。

私も386bsdを使い始めた時からX386 ⇒ XFree86を使用していました。

これ(正確にはその中のXサーバ)はグラフィックスハードウェアに依存したソフトウェアです。最初のころはPCのグラフィックスハードウェアの仕様は公開されていたので問題はありませんでした。

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

テーマ:

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

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

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

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

CPU判別法(80編)

68編に引き続き80編をお送りします。

8080系

8080系とZ80系の区別は『I/O』誌の記事を参考にしました。i8080/μPD8080AF, μPD8080A, i8085の判別法は一般的なものがあれば利用するつもりでしたが、見当たらなかったのでデータシートを元に独自に書いたものです。

CPU判別法(68編)

現在のCPUではその種類や対応する命令の範囲などを取得する命令(例えばx86系のCPUID命令)がありますが、以前は微妙な挙動の違いなどから判別していました。

自作のUniversal Monitorのソースコードを例に解説してみます。

MC6800系

まずは昨日目処が立ったと書いたMC6800系からです。

この系統はあまり情報が無く(旬な時期にあまりかかわらなかったのも理由です)手持ちのデバイスで試しながら書いたものです。

該当部分のソースは次のようになっています。

Universal Monitor コマンド一覧

テーマ:

Universal Monitor Z8の基本機能が現在対応している全プロセッサで使用可能になりました。

前回はコマンドの概要のみを書きましたが、今回はコマンドラインの形式も書いておきます。

コマンドは原則1文字ですが、PIなどのように2文字のものも一部あります。
<addr>,<offset>といった数値パラメータは16進表記で必要以上の桁数を入力した場合は末尾が使用されます。
英字の大文字小文字は区別されません。
コマンドとパラメータの間・パラメータとカンマの間には空白を入れても構いません。ただし行入力バッファは短いので注意してください。

モニタ プログラム

カテゴリー:

Z8用モニタについて書きましたが、それ以前にもモニタは何度となく書いています。

  1. Z80ボード3号機
    これはオリジナルではなく『トランジスタ技術』1984年6月号掲載のものをベースに移植・拡張したものです。Z80のアセンブリ言語で記述されています。
    他の多くがシリアルポート経由で操作するのに対し、16進テンキーと8桁7セグメントLEDを使用します。
  2. MC68kボード
    これもオリジナルではありません。やはり『トランジスタ技術』1985年4月号掲載のものを移植拡張しました。MC68000のアセンブリ言語で記述されています。後にMC68010用に変更しています。

Universal Monitor Z8

テーマ:

カテゴリー:

先日のROMエミュレータを2732には去年作ったZ8613ボードにモニタを移植するのが目的でした。

Universal Monitor Z8
とりあえず基本的な機能が動くようになりましたので、試しているスクリーンショットを載せておきます。

まずは0FFF8H~0FFFFH,0000H~0077Hまでのメモリダンプ、次のHコマンドでCが表示されているのでこれはプログラム(コード)メモリ空間です。

FDCボード (テスト編 その3)

テーマ:

カテゴリー:

ちょっと間があいてしまいました。

前回CRCエラーが出ているとはいえ一応セクタが読めるようになりました。データ転送のオーバランも発生していません。

FDCの回路を作るのは今回が初めてですが、8ビット時代に製作記事はよく読んでいました。そこではデータ転送が間に合うかどうかが大きな課題として扱われることが多く、ソフトウェアでステータスを見ながらでは取りこぼすということでいろいろな工夫がありました。

  • 他の割り込みを禁止する
  • DMA(Direct Memory Access)を利用する。これは速度の余裕ができてからもほかの理由で使われ続けました。
  • ステータスをチェックしないでデータ転送する。そのままでは正常に転送できないので、ハードウェアでFDCへのアクセスを引き伸ばす。

それで当初は心配していたのですが、さすがに当時とはCPUの速度が一桁以上上がっているので余裕がありますね。

ページ