「Z80」タグアーカイブ

Z80, 8080の話題

S1/30 早速Z80Bカード故障^^;;

S1/10の故障によりS1/30に引っ越ししたZ80Bカードですが、早速故障してしまったようです(泣

今回のカードは配線が超スパゲッティなので少し触ると壊れそうなので、慎重にカードを差替え・・

差替え直後はS1/30でも問題なく動作していたのですが、本日弄ってみると何だかおかしな動作・・・

バス切替がうまく動作しなくなっているようで

リセット直後は6809側OK

Z80側に切り替えて
6809側に戻しても正常に戻らなくなっています・・・

どこか半田が外れてしまったのかなぁ 続きを読む S1/30 早速Z80Bカード故障^^;;

S1-CP/M80 移植作戦 その16 BIOSの作成準備2^^

Z80Bカードと6809側のデータやり取りでループバックするテストプログラム その1

ポンコツプログラムですが一応、目的の動作をしているので参考に晒しておきます^^

Z80側のプログラム

続きを読む S1-CP/M80 移植作戦 その16 BIOSの作成準備2^^

S1-CP/M80 移植作戦 その15 BIOSの作成準備1^^

S1側とZ80Bカードの連携方法を確認するためにテストプログラムを作ってみました

以前教えて頂いたZ80と6809との切り替え方は
①0:0000~Z80のコールドスタートのプログラムを書く
②$FF7Fに$FFを書込む(Z80スタンバイ)
③$FE19に$00を書込む(Z80スタート)
これでZ80がスタートされ6809から拡張メモリを含む全てのスロット上カードへのアクセスができなくなる(バスフローティング状態)
しかし6809は停止していないのでS1の資源だけを利用してZ80と並行動作している。
この状態で6809からスロット上のカードをアクセスする必要が出た時は
④$FE19に$80を書込む(バスリクエスト)
⑤$FE19を読出しMSBが1になるのを待つ
⑥必要な処理を行う
⑦$FE19に$00を書込む(Z80スタート)
④~⑦の繰り返しで処理可能

S1の拡張MPUカードの特徴は6809もZ80も両方とも動作しているということで、
6809側からもZ80側からも見える共通の領域にデータを書き込んでI/O処理のときにデータを参照する
仕組みだそうです。
(6809側とZ80側の両側からアクセスできるエリアは物理アドレスで$00000~$7FFFFの512KBで
MPC-RA64~512の拡張RAMカードが必要です)

これだと両MPUは常に動作しているので、MPU切替を複雑には考えなくていいようです。
これがS1のフローティングバスの優れた部分だそうで、
Z80カードを作って初めてフローティングバスの恩恵を得られました(^^)

上記①~⑦を図に書いてループバックのソフトを整理してみました。
(フローチャートではないので何だかちょっと変^^) 続きを読む S1-CP/M80 移植作戦 その15 BIOSの作成準備1^^

S1-CP/M80 移植作戦 その14 データ転送環境を準備^^

Z80カードのハード廻りはOKになったのでソフト作成の準備としてS1にデータをロードする環境を準備します

現在私が使っている開発環境はCygwin上に作ったクロスアセンブラで
m6809-as
Z88dk
を使用しています

デバッガはS1エミュレータのデバッガ
なので完全なクロス開発環境です。

S1実機でのデバッグとS1エミュでデバッグでは使いやすさが全然違うのである程度エミュ上でデバッグしてから
バイナリをS1実機にロードする方法で進める予定です

S1のメモリへのロード方法は
①ディスクイメージを実イメージに書き戻す方法(DITT)
②シリアルポート経由で直接データを送る方法
が考えられますが、
貴重なS1/30を使い始めるのはもう少しソフトが出来てからの方が良さそうなので、
シリアルポート経由でメモリにデータをロードできるメモリローダを作ってみました。
ロード先の物理アドレスを指定する方法としてS1のモニタで設定してもいいのですが、
面倒なのでメモリローダ内に物理メモリの先頭番地を指定できるようにしてみました^^

そこで、このメモリローダをS1に入力しないといけないのですが、
最初はダンプを入力するしかないので最小サイズになるまで整理・・^^
もう少し減らせる可能性もありそうですが、とりあえず204バイトになりました。
これならS1モニタのEコマンドでも楽々入力できます

かなりのポンコツソフトですが一応使えるので晒しておきます

位置独立ではありません D000番地からロードして実行できます^^

使い方RS232Cでバイナリ通信できるターミナルと接続しN81で1200bpsにセットします
S1モニタでバイナリを入力しD000から実行 続きを読む S1-CP/M80 移植作戦 その14 データ転送環境を準備^^

S1-CP/M80 移植作戦 その13 Z80Bカード動作確認OK^^

Z80側からメモリにデータが書けるようになったので、再度動作確認実施!

確認点は
①任意のアドレスからデータリード
②メモリ前半部分にデータ書き込み
③メモリ後半部分にデータ書き込み
④I/O出力によりS1への割込み要求
の4点を確認するプログラムを実行してみました

実行した手順はこちら

全てS1のモニタで行ってます

Z80は$0000~$003Fまでリセットベクタらしくユーザプログラムは$0040以降に書くのがルールっぽですが、
ユーザプログラムエリアに使えないわけではないようなので回路の動作確認用にハンドアセンブルしました。

$0000~プログラムをセットします。
①物理メモリ$00000~$00FFFを論理メモリ$0000~$0FFFに割付
②物理メモリ$0F000~$0FFFFを論理メモリ$1000~$1FFFに割付
③$0000番地からテスト用プログラム書込み
0000 3A 0F 00     LD     A,(000Fh)
0003 32 20 00      LD     (0020h),A
0006 32 FF FF      LD     (FFFFh),A
0009 76                   HALT
④コピー元データを$000Fに$E5セット 続きを読む S1-CP/M80 移植作戦 その13 Z80Bカード動作確認OK^^