復活!CP/M ワンボードマイコンでCP/Mを!
CP/MがTK−80互換のワンボードマイコンの上で復活します
ND80ZVとMYCPU80の上でCP/Mが走ります!
[第37回]
●先頭のジャンプ命令を削除
このところCP/Mソースプログラムの修正ばかりしております。
前回書きましたように、BIOSジャンプテーブルの開始アドレスを××00HにするというのがCP/Mの暗黙のルールらしいということがわかりましたので、今回はそのための変更を行ないます。
今までは初期設定ルーチンへのジャンプ命令をCP/Mプログラムの先頭に置いていました。
しかしそのジャンプ命令の3バイトさえなければ、BIOSジャンプテーブルの先頭アドレスが××00Hになることがわかりましたので、それを削除することにしました。
前回修正して保存したcpm22f.txtをTeraPadで開いて、下記の2ヶ所を修正してください。
(1)44行の START: JP SETENTRY を削除してコメント行( ; )に戻します。
(2)3740行の SECTRN: JP SECTRNJ の次に JP SETENTRY を追加します。
そのあと、cpm22g.txtという名前をつけて保存します。
それから、ZASM1.64でアセンブルします。
アセンブルの結果、BIOSジャンプテーブルのアドレスが××00Hから始まっていることを確認しておきましょう。
BIOSジャンプテーブルはD200Hから始まっています。
ジャンプテーブルの最後のところに追加した初期設定ルーチンへのジャンプ命令のアドレスはD233Hです。
ここを実行すればCP/Mが起動します。
アセンブルの結果、作成された cpm22g.bin をnd80z3フォルダにコピーしてください。
いよいよCP/Mを実行します。
が。
その前に。
もうひとつ準備をしておく必要があります。
●仮RAMディスクのフォーマット
ND80ZVのRAM上に仮に設けることにした、仮のRAMディスクをフォーマットしておかなければなりません。
仮のRAMディスクについては[第10回]で説明をしております。詳しくはそちらを参照願います。
フォーマットすると言ってもフロッピーディスクと違って、トラックやセクタに区切る必要はありません。
プログラムの方でアドレスを計算してトラック、セクタの位置を割り出しますからメモリに何かの印をつけておく必要はありません。
しかしデータがまだ何も書かれていない、という印を書いておく必要があります。
CP/Mではフロッピーディスクをフォーマットするときに、そこにはまだデータが何も書かれていない、という印として全体にびっしりとE5というコードを書き込みます。
そこで、アドレス8800〜B7FFの仮のRAMディスクにもそのメモリ範囲全部にE5を書き込みます。
これがそのフォーマットプログラムです。
たったこれだけの簡単なプログラムです。
; FILL E5 for CP/M RAM DISK ; ORG $8100 REENT=$1033 ; LD HL,$8800 LD B,E5 LOOP:LD (HL),B INC HL LD A,H CP B8 JP NZ,LOOP JP REENT ; |
このプログラムはCP/M上で実行するのではなくて、ZB3BASIC上で実行しますから、実行後はZB3BASICのエントリアドレス(1033H)にジャンプします。
説明の途中ですが、本日は時間がなくなってしまいました。
この続きは次回にいたします。
ワンボードマイコンでCP/Mを![第37回]
2012.2.18upload
前へ
次へ
ホームページトップへ戻る