So-net無料ブログ作成
English Version

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ですがバージョンにより下表のアドレスは異なるようです)

BDOS_ccpBIOS _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
 そうではありません。ブレッドボード上の実機で確認しても
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からの抜粋
_init 6000 equ global abs _sub_ind 5D80 global bss _log_dsk 5D82 global bss _load_tr 5D84 global bss _gbls 5D86 global bss _crit_ds 5E74 global bss _tail 5E76 global bss _cur_dis 5E7A global bss _parm 5E7C global bss _dma 5EF4 global bss _chainp 5F78 global bss _sub_use 5F7C global bss _save_su 5F7E global bss _subfcb 6000 global bss _first_s 6024 global bss _subdma 6026 global bss _tpa_hp 60A6 global bss _user 60AA global bss _tpa_lp 60AC global bss _tpa_ht 60B0 global bss _user_pt 60B4 global bss _ro_dsk 60B8 global bss _tpa_lt 60BA global bss _autorom 60BE global bss _subprom 60C0 global bss _end_of_ 60C2 global bss _subcom 60C4 global bss _glb_ind 6146 global bss _chain_s 614A global bss _index 614C global bss _dirflag 614E global bss _cmdfcb 6150 global bss cpmlo.sys:19490+1436+2998=23924 (5D74 ) stack size = 0


[TOP] [ 前へ ] 連載記事 [ 次へ ]

nice!(0)  コメント(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。