INS8073のROMを読む

カテゴリー:

INS8070ボードでROMのBASICの1文字入出力ルーチンを独自のものにしようとしてうまくいかなかったと書きましたが、モニタを移植したことでROM内を読めるようになったので関連箇所を調べてみることにしました。

まずはPコマンドでROMのアドレス範囲(0x0000~0x09FF)をPCに持ってきます。

そう、P(unch)コマンドを実装したのはこのためです。

手頃な逆アセンブラがないかネットを探してみたのですが見当たらなかったので簡単なものを書いてしまいました。

さて、どこから手を付けるかですが、先頭から読んでいくのはしんどいです。

今回調べたいのは文字入出力だけなのでメッセージから追っていくことにします。

メモリダンプを見ていくとASCII文字列がいくつもありますが、多くはBASICの予約語なので今回の目的には使えません。その中で良さそうなものが見つかりました。

INS807xにモニタを移植

前回書き始めていたモニタですが、いつものようにD(ump)コマンドが動くころには慣れてしまって残りはサクサク進み基本的なD,G,S,Lコマンドはすぐにできました。今回はちょっとわけあってP(unch)コマンドも追加しています。

SC/MP(I と II)とは以下のような相違点があります。

  1. 16ビット演算命令
    これ自体は便利でありがたいのですが、キャリ/ボロー込みの加減算命令がなくなってしまいました。モニタには必要ありませんでしたが、16ビットを超える演算は相当面倒になると思われます。条件分岐がAレジスタ(下位8ビット)でしかできないのも意外に不便です。
    SC/MPでは16ビットの値をメモリとやり取りすることがなかったのでエンディアンの概念がありませんでしたが、SC/MP IIIはリトルエンディアンです。
  2. スタックとサブルーチン
    サブルーチン呼び出しの機能が追加されたのは助かります。同時に長距離ジャンプも追加され、4kBページの制約も解消されています。

INS8070ボード

テーマ:

カテゴリー:

CDP1802ボードの次は何にしよう、と考えていて選んだのがこれです。実は先日eBayを眺めていてついINS8070をポチってしまったので...


いつものようにEMILY Boardで動かします。

私は普段ボードを作るときは少なくともメインのチップを手に入れて(ヘタをすると何年も寝かせて)からなのですが、今回は珍しく到着前に作り始めてしまいました。

作っているうちに着くかなと思っていたのですが... 海外からなので時間がかかっているようです。

COSMACのI/O

カテゴリー:

このところCOSMAC関係が続いておりますが、今回をもって一旦終わる予定です。

ソフトウェアUARTも動いたことですし今更感もあるのですが、せっかく準備したUSARTも動かしてみました。

基板 表側
新たに追加したのはμPD71051CとEXO-3です。

当初8251を考えていましたが、せっかく他がCMOSなのでそれに合わせるためと、クロックを5MHzにしてしまったので分周しなくても使えるという理由からμPD71051Cを使うことにしました。

ソフトウェアUART

カテゴリー:

前々回前回書いたような厄介な点はありましたが、CDP1802ボードUniversal Monitorを動かすのは思っていたより簡単でD(ump), G(o), S(et), L(oad)の各コマンドは動作するようになりました。

そうなると今度はSBC1802でも動かしてみたくなります。

ところがこれにはUART相当のハードウェアは無く、CPU内蔵のQ, EF3をシリアルポートとして使うようになっています。UARTの機能をソフトウェアで実現しなくてはなりません。

COSMACでサブルーチン

カテゴリー:

前回書いたようにCOSMACにはサブルーチン呼び出しの仕組みがありません。

それではどうするかというとSEP命令を使います。

COSMACはメモリをポイントできるレジスタを16個 R(0)R(F)と、4ビットのレジスタPを持っています。R(0)R(F)の内Pで選ばれたR(P)がプログラムカウンタとして使用されます。

SEP命令でPに新たな値を設定することでサブルーチンを呼び出し、Pに元の値を設定することで戻ることができます。

COSMACのソフトウェア

カテゴリー:

CDP1802のハードウェアができたのでいつものようにUniversal Monitorを移植していきます。

以前SC/MP使いの憂鬱で書いたようにSC/MPはかなり癖の強いアーキテクチャでしたが、このCOSMACも負けず劣らずですね。

  1. PCがない
    プログラムカウンタに相当するものが無いわけではありません。複数あるレジスタのどれをプログラムカウンタとして使うか選択できるようになっています。専用のものがないという点でだいぶ変わっています。

最近のお買い物(2021/08)

テーマ:

カテゴリー:

ちょうど先月末に1回目のワクチン接種を受けましたが、モデルナだったので4週後の28日に2回目接種を受けてきました。3日前のことです。前回より少し高めの熱(ピークで38.1℃)とちょっと腕の痛みも増した気がしますが、思ったほどキツくはありませんでしたね。

というわけで最近のお買い物です。

CDP1802ボード

テーマ:

カテゴリー:

今日2度目のワクチン接種に行ってきまして、ついでに秋月によって不足していた(持ってるはずなんだけど行方不明)パーツを調達してきました。


CDP1802(とCDP1806も)のボード、いつものようにEMILY Boardと組み合わせるボードです。

CDP1802動かすだけならSBC1802でいいのですが、新CPUでいきなりソフトウェアUARTは敷居が高いかなと思って作ってみました。

シリアルクロックの話

カテゴリー:

現在EMILY BoardでCDP1802 / CDP1806を動かすCPUボードを製作中ですが、動くまでまだ時間がかかりそうなのでシリアルクロックの話を少し書いてみようかなと思います。

PCと自作のマイコンを接続する最も簡単な方法の一つが調歩同期シリアルです。

マイコンボードを新たに作る場合、最終的には必要なくてもデバッグ用などにあると重宝するので、まずこれを動かすことが初期の目標になることも多いですね。

でマイコン内蔵にしろ外付けにしろUARTを動かすには(通常通信レート×16の)クロックが必要になります。

専用に発振器を用意してしまうのが簡単で自由度も高いですが、CPUクロックと共通の発振器から供給できれば部品を減らせます。その場合必要とするシリアルクロックの整数倍の発振器が使えればピッタリのクロックが得られますが常にそうできるわけではありません。PLL等を使わない限り整数分の一のクロックしか得られませんから近似値で代用することになります。この誤差はどの程度まで許容できるのか考えてみましょう。

Pages