SSブログ
English Version

レトロマイコン86ボードの構想(その8)Cold Start LoaderでのCP/M-86の起動 [8086]

 前回の記事に書いたようにCP/M本体をHexファイル化してHexファイルローダーでロードすることでCP/M-86が起動できたので今回はCP/MのコールドスタートローダーをHexファイルローダーで読込むことでCP/M-86を起動してみます。

 CP/M-86の起動シーケンスは前回も書いたように
  1. Bootstrap
     最初のセクタ(128バイト)から読み込んだBootstrapをV20にのメモリにロードし、起動することで第2セクタ以降に格納されているCold Start Loader(simple version of CP/M-86)をメモリに読込む

  2. Cold Start Loader
     DiskA内のCPM本体(CPM.SYS)をメモリに読込み起動することでCP/M自体が立ち上がる

という流れです。

 Cold Start LoaderはCP/Mのサブセット版なので専用のBIOSが必要になりますが、今回はBIOSをCP/M-86 System Guideに載っているサンプルを参考に作成しているので「loader_bios EQU false」の部分をtrueに変更することでLoader用のBIOSのHexファイルを生成できるようにしています。

 loader_biosのEQU宣言を変更する度にBIOSのソースファイルのタイムスタンプが変わるのが嫌だったのでEQU宣言をPicBois.defファイルに移し、includeするようにしました。
 include化したことで予想外のエラー(ソースにはない内容のエラーを検出)したので確認したところ、CPM86エミュレータはファイルのエンドにCP/MのEOFマークである01AHを渡していない模様で、PicBois.defファイルの末尾に01AHのコードを入れたらエラーは出なくなりました。

 アセンブルした結果、生成されたBIOSのHexファイルをCP/M-86関連のダウンロードファイルに入っているCold Start Loader用のCP/MとBDOSのHexファイルと連結します。
 連結方法としてシステムガイドには

PIP LOADER.H86=LDCPM.H86,LDBDOS.H86,LDBIOS.H86


と書いてあるのですが前回の記事で書いたようにms-dos player+cpm86.exeでのpip起動ではエラーになるのでエディタで連結しました。

 連結したLOADER.H86をgencmdコマンドでコマンドに変換すればCold Start Loaderが完成します。

C:¥picle¥V20¥asm¥bios¥cmd>msdos cpm86 gencmd loader 8080 CODE[A400]
CP/M-86 emulator for DOS vers 1.3 - 11/30/97
Copyright (c) 1985, 1997 Jim Lopushinsky

BYTES READ 1073
RECORDS WRITTEN 2C



C:¥picle¥V20¥asm¥bios¥cmd>


 [A400]のスイッチはセグメントを0400Hにするためです。
 生成されたLOADER.CMDを前回の記事で書いたようにCMDヘッダを削除しHexファイル化します(セグメントの値は0400H)。

 Cold Start Loader用のBIOSのINIT処理のエントリは1200HなのでCold Start LoaderのHexファイルをHexファイルローダで読込み、0400:1200Hから実行するとCP/M-86が起動します。

 Cold Start LoaderをHexファイルローダでロードしてCP/M-86を起動した際のサンプルログを貼っておきます。
 CP/M本体のセグメントアドレスと最終オフセットが表示されていますが、これはCold StartLoaderが表示しているもので、もう少し見栄えを良くしたいのですがソースが無いのでまずはそのままにしておきます。
 Cold Start LoaderのサイズはCP/M本体の半部以下なのでCP/M-86の起動が少し楽になりました。

Cold Start LoaderでのCP/M-86の起動
:¥¥ +B000-BDBA # CP/M-86 boot 2019/08/23 +C000-CC8D #LibCpm CP/M86(PMP) v0.01 2019/08/17 +D000-DEEB #LibSpi SPI lib V0.04 for CP/M86 2019/08/16 +E000-EDC7 # Memory check executer 2019/08/18 +F000-FC43 # Pic24V20 HexLoader v0.02 2019/08/12 :¥<$F000 3139 :run HexLoader Start 2000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000001 :¥< 3514 :run Pic24V20 CP/M-86 Version 2.2 Segment Address = 0040 Last Offset = 31FF System Generated by skyriver 2019/08/23 A>dir A: ASM86 CMD : ASSIGN CMD : CONFIG CMD : CPM SYS A: DATA PFK : DDT86 CMD : DSKMAINT CMD : ED CMD A: FUNCTION CMD : GENCMD CMD : HELP CMD : HELP HLP A: PIP CMD : PRINT CMD : SETUP CMD : STAT CMD A: SUBMIT CMD : TOD CMD A>stat A: RW, Free Space: 1,780k A>stat dsk: A: Drive Characteristics 15,552: 128 Byte Record Capacity 1,944: Kilobyte Drive Capacity 256: 32 Byte Directory Entries 0: Checked Directory Entries 128: 128 Byte Records / Directory Entry 16: 128 Byte Records / Block 64: 128 Byte Records / Track 1: Reserved Tracks A>



★2019/10/22 追記
 Cold Start LoaderのCPM.SYS起動部のソース(LDCPM.A86)を見つけたのでメッセージを下記のように変更しました。

... loading
Pic24V20 ver0.02 CP/M-86 Version 1.1
Segment Address = 0040
    Last Offset = 31FF
  System Generated by skyriver 2019/10/07

A>



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


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