3チップ構成68Kマイコンの構想(その6)CPM400.SRの問題 [68K]
「3チップ構成68Kマイコンの構想(その3)Sレコード簡易ローダーの製作」の記事で書いたように今回はCP/M-68K関連のファイルは
からダウンロードしたものを使っています。
CP/M-68K本体のSレコードファイルとしてCPM400.SRとCPM15000.SRがあり、それぞれのアドレスは下表のようになっています。(CP/Mのバージョンは1.3ですがバージョンにより下表のアドレスは異なるようです)
「3チップ構成68Kマイコンの構想(その4)CP/M-68K 初ブート」の記事でSレコードファイルのダウンロード方式によるCP/M-68Kのブートに成功したことを書きましたが、この時はCPM15000.SRを使っていました。
今回、メモリを128KBから512KBに増やすことを考慮してメモリ容量の変更でもCP/MやBIOSのアドレスが変わらないCPM400.SRに移行しようとしてハマりました^^;(まぁこういうことも含めて色々調べる過程も楽しいのですがw)
BIOS内のジャンプテーブルのアクセス動作が不穏な動きをします・・・
EASy68K Simulatorで動作を確認してみるとこんな感じです。
A0の値が $0060AC なのでステップ動作すればA2には $00615E が設定されるはずが・・
ステップ動作後のA2の値は何故か $007000 になっている・・・
何故でしょう?? EASy68Kのバグでしょうか?w
そうではありません。ブレッドボード上の実機で確認しても
Exception $0B at user address $00007000. Aborted.
こんなエラーが表示されます。
BIOSサービスから抜けた後もSTEP動作で動きを確認してみるとCPM内の処理でBIOSのテーブルの一部が書き換えられていますorz
CPM400.SRのマップファイル(CPM400.MAP)を見て納得がいきました。
BIOSの先頭に配置している _init のアドレスが $6000 ですが bss(初期化しないワークエリア)が $5D80 から $6150+FCBのサイズまで割り振られていて BIOS の領域とオーバーラップしています!!
これでは CPM400.SR は使えませんねぇ。
$006000 に _init へのjmp命令を配置してBIOS本体を $6174から始めるようにすれば動くと思います(jmp命令が_subfcbとオーバーラップしますが_initは最初の一回だけしかコールされないのでコール後ワークとして使用されても問題ないはず)が、そんなことをするよりは CPM15000.SR を使ってCP/M-68Kを立ち上げて、CP/M上でCP/Mをリロケートした方が早い。
CPM400.MAPからの抜粋
[TOP] [ 前へ ] 連載記事 [ 次へ ]
からダウンロードしたものを使っています。
CP/M-68K本体のSレコードファイルとしてCPM400.SRとCPM15000.SRがあり、それぞれのアドレスは下表のようになっています。(CP/Mのバージョンは1.3ですがバージョンにより下表のアドレスは異なるようです)
BDOS | _ccp | BIOS _init | |
CPM400.SR | $000400 | $0004BC | $006000 |
CPM15000.SR | $015000 | $0150BC | $01B000 |
「3チップ構成68Kマイコンの構想(その4)CP/M-68K 初ブート」の記事でSレコードファイルのダウンロード方式によるCP/M-68Kのブートに成功したことを書きましたが、この時はCPM15000.SRを使っていました。
今回、メモリを128KBから512KBに増やすことを考慮してメモリ容量の変更でもCP/MやBIOSのアドレスが変わらないCPM400.SRに移行しようとしてハマりました^^;(まぁこういうことも含めて色々調べる過程も楽しいのですがw)
BIOS内のジャンプテーブルのアクセス動作が不穏な動きをします・・・
EASy68K Simulatorで動作を確認してみるとこんな感じです。
A0の値が $0060AC なのでステップ動作すればA2には $00615E が設定されるはずが・・
EASy68K(1) |
|
ステップ動作後のA2の値は何故か $007000 になっている・・・
EASy68K(2) |
|
何故でしょう?? EASy68Kのバグでしょうか?w
そうではありません。ブレッドボード上の実機で確認しても
こんなエラーが表示されます。
BIOSサービスから抜けた後もSTEP動作で動きを確認してみるとCPM内の処理でBIOSのテーブルの一部が書き換えられていますorz
CPM400.SRのマップファイル(CPM400.MAP)を見て納得がいきました。
BIOSの先頭に配置している _init のアドレスが $6000 ですが bss(初期化しないワークエリア)が $5D80 から $6150+FCBのサイズまで割り振られていて BIOS の領域とオーバーラップしています!!
これでは CPM400.SR は使えませんねぇ。
$006000 に _init へのjmp命令を配置してBIOS本体を $6174から始めるようにすれば動くと思います(jmp命令が_subfcbとオーバーラップしますが_initは最初の一回だけしかコールされないのでコール後ワークとして使用されても問題ないはず)が、そんなことをするよりは CPM15000.SR を使ってCP/M-68Kを立ち上げて、CP/M上でCP/Mをリロケートした方が早い。
|
[TOP] [ 前へ ] 連載記事 [ 次へ ]
コメント 0