2015.1.17

前へ
次へ
ホームページトップへ戻る

MYCPU80でCP/Mを!
超巨大基板の8080互換HCMOS・CPUでCP/Mを走らせてしまおうという、なんとも狂気なプロジェクトです!


[第103回]


●/CPM,D

先日からやっとMYCPU80用のZB3DOS(CP/M互換DOS)のテストに入って、少しずつ作業しています。
説明書も準備しなくてはいけませんので、ND80Z3.5(ND80ZV)用のZB3DOS(CP/M互換DOS)説明書をベースにしながら、「ワンボードマイコンでCP/Mを!」の過去記事も参考にしつつテストをすすめています。
過去記事を読んでいましたら、MYCPU80ではパラメータDが付いた/CPMコマンドのテストはまだしていなかったことに気が付きました。
/CPM,Dについては「ワンボードマイコンでCP/Mを!」[第392回]で説明をしていますから、まずはそちらをお読みください。
そこでは参考例として[第100回]でテストしたVFTST0−2を使ってデバッグを行なっています。
VFTST0−2は前回ソースプログラムをザイログニーモニックからインテルニーモニックに書き換えました。
せっかく書き換えたのですからちょうど良い機会です。
VFTST0−2の代わりにMVFTS0−2を使ってデバッグをしてみましょう。

●ユーザープログラムのデバッグ例(MVFTS0−2のデバッグ)

MVFTS0−2のアセンブルリストは前回お見せしましたが、下に再掲しますのでそれを参照しながら以下をお読みください。

2015/1/16  18:54  mvfts0-2.txt
END=013C
              ;;FUNCTION 0,1,2 TEST
              ;2013/5/4 5/5 2015/1/16 for MYCPU80 from VFTST0-2
              ;
                ORG $0100
                   FCALL=$0005
              ;
0100 0E02     START:MVI C,02
0102 1E2A       MVI E,2A;'*'
0104 CD0500     CALL FCALL
0107 0E01       MVI C,01
0109 CD0500     CALL FCALL
010C 323C01     STA BUFF
010F FE12       CPI 12;^R
0111 CA3701     JZ RESET
0114 0E02       MVI C,02
0116 1E3A       MVI E,3A;':'
0118 CD0500     CALL FCALL
011B 0600       MVI B,00
011D 3A3C01   LOOP:LDA BUFF
0120 0E02       MVI C,02
0122 5F         MOV E,A
0123 CD0500     CALL FCALL
0126 05         DCR B
0127 C21D01     JNZ LOOP
012A 1E0D       MVI E,0D
012C CD0500     CALL FCALL
012F 1E0A       MVI E,0A
0131 CD0500     CALL FCALL
0134 C30001     JMP START
              ;
0137 0E00     RESET:MVI C,00
0139 CD0500     CALL FCALL
              ;
013C 00       BUFF:NOP
              ;
BUFF         =013C  FCALL        =0005  LOOP         =011D  
RESET        =0137  START        =0100  

CP/M互換DOSでのデバッグのためには、最初にまず1回は通常の方法で(つまり/CPMコマンドで)CP/M互換DOSを起動して、それからZB3コマンドでZB3BASICに戻る必要があります。
下の画像は/CPMコマンドでCP/M互換DOSを起動したあとZB3コマンドでZB3BASICに戻ったところからの画面です。
「ワンボードマイコンでCP/Mを!」[第392回]のページを開いてその上でテストをしています。
左上が今回のテスト画面で右下に見えるのは「ワンボードマイコンでCP/Mを!」[第392回]のページの説明画面です。



ユーザプログラムにブレークポイントを設定するには、まず最初にCC03にブレークポイントを設定します。
BP CC03[Enter]
です。
ここは0000〜7FFFの範囲外ですから@をつける必要はありません。
それから
/CPM,D[Enter]
でCP/M互換DOSにエントリします。

Zドライブを選択して、
Z>MVFTS0−2[Enter]
を入力しました。
するとロード直後にCC03でブレークしました。
レジスタダンプのPCのところにCC03と表示されています(PCはプログラムカウンタです)。

最初に010Cにブレークポイントを設定してみました。
BP@010C[Enter]
です。

そのあと
RT@[Enter]
を入力すると、ユーザープログラムが普通に実行されます。
*が表示されたあと、入力待ちになりますから e を入力しました。
するとアドレス010Cの命令の実行直前でブレークしました。
ファンクションコール01の実行直後です。
このときの各レジスタの値やフラグの値などが全てレジスタダンプで表示されています。
Aレジスタにはキー入力した文字eのコード65が入っています。

右下に表示されている画面はND80Z3.5(ND80ZV)での実行画面ですから、Z80のレジスタダンプになっていますが今回はCPUが8080のレジスタダンプになっています。

続いて0127にブレークポイントを設定してRT@を実行しました。
すると改行後に : と e が表示されたあと、0127でブレークしました。
DCR B
を実行した直後です。
BレジスタはFFになっています。
実行結果は0ではありませんからレジスタダンプの右にありますフラグのところのZは0(セットされると1になる)です。
FFはマイナスの数ですからSフラグが1になっています。

MYCPU80でCP/Mを![第103回]
2015.1.17upload

前へ
次へ
ホームページトップへ戻る