8080とZ80のUniversal MonitorにI/OアクセスのコマンドとCPU判別を追加しました。
- I(nput)
入力ポートから入力して表示します。I <port>IW <port>(Z280のみ)IS <port>(Z280のみ)
1の形式では<port>番の入力ポートから8ビット幅で入力して表示します。2の形式では16ビット幅で入力して表示します。3の形式ではZ280のCPU制御/ステータス・レジスタを読んで表示します。
Z80系では<port>は16ビットアドレスが使用可能です。 - O(utput)
出力ポートに出力します。O <port>, <data>OW <port>, <data>(Z280のみ)OS <port>, <data>(Z280のみ)
1の形式では<port>番の出力ポートに<data>を8ビット幅で出力します。2の形式では16ビット幅で出力します。3の形式ではZ280のCPU制御/ステータス・レジスタに書き込みます。
Z80系では<port>は16ビットアドレスが使用可能です。
unimon_8080では、8080にはポートアドレスをレジスタで指定できる命令が存在しません。そこでINあるいはOUT命令とポートアドレスをRAMに書き込んで呼び出しています。
unimon_z80ではIN A,(C), OUT (C),E命令を使用しています。Z280専用のIW, IS, OW, OSは後述のCPU判別でZ280と判定された場合のみ使用可能になります。IN HL,(C), OUT (C),HL, LDCTL HL,(C), LDCTL (C),HLの各命令が使用されます。
これらのコマンドはUniversal Monitor自体の動作と整合させるための仕組みはありません。そのままIN, OUT命令が実行されます。使い方によってはモニタの動作に支障をきたしますので注意して使用してください。
CPU判別機能はオープニングメッセージの表示直後に実行され表示します。
| モニタ | 表示 | 対象CPU | 条件 | 備考 |
|---|---|---|---|---|
| unimon_8080 | Z80 | Z80, HD64180, Z280 ... | A=7FHでINR Aを実行してFのビット2が立ったら |
これ以上の判別はしていません。必要ならunimon_z80の使用をお勧めします。 未確認 |
| uPD8080A | μPD8080A | Fのビット3が立っていたら | ||
| i8085 | 8085 | HL=0FFFFHでINX HLを実行してFのビット5が立ったら |
未確認 | |
| i8080 | 8080, μPD8080AF | |||
| unimon_z80 | HD64180 | HD64180 | B=00H, C=0FFHで0EDH,4CHを実行してBCが0だったら | 0EDH,4CHはHD64180ではMLT BC、Z280ではNEG HL、Z80では未定義命令未確認 |
| Z280 | Z280 | A=40Hで0CBH,37Hを実行しPフラグ(Fのビット2)が立ったら | 0CBH,37HはZ280ではTEST A、Z80ではSLL A(未定義) |
|
| Z80 | Z80 |
このように未定義命令や未定義動作を使っているため互換プロセッサなどでは正常に動作しない可能性もあります。その場合はconfig.incの中でUSE_IDENT = 0とすることで判別を止めてください。
コメントを追加