uPD7807
uPD78C10ボードでμPD7807もいけそうと書きましたが、現物を入手しました。
μPD7807CW、1988年36週の製造ですね。パッケージはシュリンクDIPの64ピンです。
ボードを作ったころから探していたのですが、出品が少なく高価だったりして半ば諦めていました。ところが国内ショップの新着情報を見ていて偶然発見、eBayのほぼ半値だったので即購入したのです。
ハードウェア的にはピン配置はμPD7810/μPD78C10と大差はありません。
63ピンがCMOSのμPD78C10では低消費電力モードへ移行させる機能であるのに対し、μPD7807, μPD7810では内部RAMのバックアップ電源ピンになっています。
MN1613でマンデルブロ集合
前回DC
擬似命令で浮動小数点数を扱えるようになったのでテストを兼ねてASCIIART(マンデルブロ集合)を描かせてみました。
元はBASICのプログラムですがアセンブリ言語で書き直しました。16ビット整数や浮動小数点数がそのまま扱えるからか8ビット時代にアセンブリ言語で書いていて感じた面倒さはあまりなくスラスラ書けますね。
計算範囲と条件は はせりん@haserin09 さんの「番外編:ASCIIART(マンデルブロ集合)ベンチマーク」に合わせています。
実行してみたところ9600bpsのシリアルが足を引っ張っているように感じたので、計算はするけど画面出力を止めたバージョンも作って比べてみました。
結果は、表示ありで約7秒、表示無しで約6秒といったところでした。思ったほどシリアルの影響は出ていません。
ASに新CPU対応を(続編)
ちょうど2年前にASのMN1613対応を行ないましたが、セグメント関係と浮動小数点関係が積み残しになっていました。
今MN1613が話題になっていることでもあり対応方法を考えていたのですが...
先日のUniversal Monitorの拡張を行なう中で他にも機能不足を感じる点が出てきました。
29/ 80F : 5374 7269 6E67 DC "String",CR,LF,0
812 : 000D 000A 0000
これは意図した結果ではありません。STROUT
ルーチンはバイト単位で取り出して処理するのでこのように途中に"00"が入るとそこで終了してしまいます。
Universal Monitor MN1610の拡張(その2)
HEXファイルの入出力ができるようになったら、次はブレークとレジスタの操作が欲しいところです。
MN1613は未定義のコードを実行しようとするとレベル0の内部割込みが発生するらしいのでこれを利用することにします。これが発生するとSTRとICをOSPW0(アドレスX'0000', X'0001')に保存し、NSPW0(アドレスX'0100', X'0101')から新しいSTRとICを読み込みます。OSPW, NPSWは外部割込みと共用ですが,内部割込みの場合はIISRというレジスタのビット15が立つので区別が可能です。
NSPW0にハンドラのアドレスを設定し、ハンドラではR0~R4, SPを保存しSTR, ICはOPSW0から取り出して表示させます。
これで試しにX'0800'番地にX'0000'を書き込んで実行させてみます。これは未定義命令なのでレジスタが表示されるかと思いきや何も起こりません。
この状態でステップ動作に切り替えてみたところ、X'0800', X'0801', X'0802'番地から順に命令フェッチを繰り返しているようです。
Universal Monitor MN1610の拡張(その1)
なんか若松通商さんにMN1613, MN1613Aが入荷したようで...
最小限のD
, G
, S
コマンドだけ作ってそのままになっているUniversal Monitor MN1610をこの機会に少し拡張してみようかと思いましてMN1613ボードを引っ張り出してきました。
このボード久々に動かそうとするといつもご機嫌斜めなんですよね。今回も動作しないのでいろいろ調べているうちに、いつの間にか動き出すという状況でした。特にどこかを直したというわけではないのですが...
とりあえず動くようになったので原因究明は後回しにしてプログラム変更に取り掛かります。
まずはHEXファイルをロードするL
からです。
MCS8085でUniversal Monitor
MCS8085でUniversal Monitorを動かそうとするとネックになるのは以下の二点です。
一つ目はUART機能が無いこと。シリアルI/O用としてSID, SODが引き出されているのでソフトウェアUARTを実装する必要があります。
二点目はROM容量が2kBと小さいこと。現状のUniversal Monitor 8080は約2.5kBのROMを必要としますから二割ほど減らさなくてはなりません。
これらの点を何とか解決できれば動かせそうです。
まずはソフトウェアUARTですが、基本的にはCOSMACのソフトウェアUARTをそのまま8085に移植しました。
ロジックができたら1ビットの時間を合わせます。SIDから読んだビットをそのままローテートしたりできて条件分岐の必要が無いのでクロックを数えるのはCOSMACより楽ですね。分岐があるとルートごとのクロック数を揃えなくてはなりません。
8085 SID,SOD引き出しアダプタ
8085のSID, SODピンを引き出すアダプタ(下駄)を作ってみました。
ことの発端はMCS8085にUniversal Monitorを移植しようと思ったことです。MCS8085にはUARTのハードウェアは無いので必然的にソフトウェアUARTを書く必要があります。
ただMCS8085のROMは8755というUV-EPROMとパラレルI/Oが一体になったもので、いつものROMエミュレータが使用できません。
また8755自体すでに入手が難しくなってきているため、頻繁に書き換え・挿し替えはあまりしたくありません。
最近のお買い物(2021/10)
今日は衆議院議員選挙の投票日、投票後に投票所近くのサイゼリヤで昼食をとろうと思ったら同じこと考えた人多数のようで大混雑、諦めて帰ってきてしまいました。
μPD78C10ボード(ソフトウェア編)
ボードが出来たら当然次はソフトウェアを何とかしなくてはなりません。
いつものようにUniversal Monitorを移植することにします。
こういうのってCなどの高級言語か擬似コードを元にアセンブリ言語に変換していくのが一般的なのかもしれませんが、私の場合は似たプロセッサ向けのアセンブリ言語のソースを見ながら直接アセンブリ言語で書き下ろしています。
今回は8080用を元にしていて、現時点でD(ump), S(et), G(o), L(oad), P(unch)の各コマンドが動いています。ここまでで感じたことをあげてみます。
- ニーモニックは8080にそっくりなものが多い。
SHLD
,LXI
など