これまで、8インチ片面単密度の標準ディスクでのCP/Mのシステム起動ができましたが、ディスク容量があまりにも少なすぎるので、ディスクの物理パラメータを変えて、容量アップを行いたいと思います。

ディスクパラメータを変えるには、アセンブラMACのDISKDEFマクロ・ライブラリを使って、BIOSのディスクパラメータテーブルを作成するのが早道です。

今までの起動デスクには、MAC.COM、DISKDEF.LIB及びED.COMを含んでいるので、これらを使用して、新たなBIOSのディスクパラメータテーブルを作成していきたいと思います。

まずは、ED.COMでディスクパラメータファイルを作成しますが、ED.COMは現在主流のスクリーンエディタのように矢印キーでカーソルを動かして編集することはできません。
自分自身がカーソル位置を常に意識して編集するラインエディタです。

ということで、ここからは、ラインエディタEDについて習得していきたいと思います。

新規にファイルを作成します。

A>ed test.asm

NEW FILE
     : *

文章を新規入力します。
インサートモード i を入力(Enter)して新規テキストを入力していきます。
1行の中ではBS(BackSpace)できますが、行をまたがることはできません。
インサートモードを抜けるには Ctrl+z(Ctrlキーとzキーを同時に押す)です。

一行目に 1234567890、 二行目にabcdefghij 3行目にCtrl+zで終了します。

NEW FILE                                                                        
     : *i                                                                       
    1:  1234567890                                                              
    2:  abcdefghij                                                              
    3:                                                                          
     : *    

CP(編集したい文字位置:キャラクタポインタ)を 文章の先頭にするには b 最後にするには -bです。
タイプ(表示)するにはtとします。CP位置から2行前は -2t CP位置から 後ろ2行は 2tです。

CPを先頭に戻して 2行表示するには、b2tとします。

: *b2t
1: 1234567890
2: abcdefghij
1: *

CPは一行目先頭になっています。
1行の中で文字位置を移動するには、C を使用します。
先頭のCP位置を1として、移動位置の相対値をCの前に与えます。また CP位置より前は、-(マイナス)を与えます。
例えば 数字の5の位置は 5cとなります。

行の先頭からCP位置までを表示するには 0tとします。

    1: *5c                                                                      
    1: *0t                                                                      
    1:  12345*

今CPは1行目5文字目にあります(つまり数値の5の位置)

文字削除は dです。 削除する文字数をdの前に与えます。またCPより前方を削除する場合は -(マイナス)を付加します。

ここでは 数字の678を削除します。3dと入力したあと 行先頭からCPまで表示します。

    1:  12345*3d                                                                
    1: *0t                                                                      
    1:  12345*

これでは 数字の678が削除されたわからないので、行の先頭から行末まで表示させます。ここでは ラインNo.を指定して表示させます。

ラインNo を指定するには :とします :の前にラインNoを指定します。
CPは指定ラインの先頭に移動します。

ここでは、1行目を指定して 2行表示します。

    1:  01234*1:                                                                
    1: *2t                                                                      
    1:  1234590                                                              
    2:  abcdefghij                                                              
    1: *

ちゃんと 数値の678が削除されているようです。

元通りに678を挿入してみます。

挿入は最初に使用した iですが、CPの後ろから挿入していきます。

ということで、数字の5以降に678と挿入すればいいことになります。
5cと入力した後、(確認のため)CPまで表示させてから、i678Ctrl+zと入力(Enter)します。そのあと 1行目から1行表示しています。 1:と入力 1tと入力

    1: *5c                                                                      
    1: *0t
    1:  12345*i678^Z
*
    2:  abcdefghij
    2: *1:
    1: *1t
    1:  1234567890
    1: *

今度は、1行目の5を削除してみます。
1: 5c -1d
1: 1t

    1: *1:
    1: *5c                                                   
    1: *-1d                                                  
    1: *1:                                                   
    1: *1t                                                   
    1:  123467890                                            
    1: *

再度 5を挿入
4c 0t i5Ctrl+z (Enter)
1: 1t

    1: *4c                                                   
    1: *0t                                                   
    1:  1234*i5^Z                                            
*1:                                                          
    1: *1t                                                   
    1:  1234567890                                           
    1: *

置換は S を使用。Sのまえに数値を入れるとその動作を数値分繰り返す。
最初に 置換したい文字列を指定し、Ctrl+zのあとに置換する文字列を指定してEnterする。
1行目の 456をabcに置換する場合は、
1: s456Ctrl+zabc Enter 1: 1t

    1: *1:                                                   
    1: *s456^Zabc                                            
    1: *1:                                                   
    1: *1t                                                   
    1:  123abc7890                                           
    1: *

行は相対的に移動することができます。
CPが1行目にいる場合、2:の代わりに1l(エル)で1行次の行に移りCPを先頭にします。

    1: *1:                                                   
    1: *1t                                                   
    1:  123abc7890                                           
    1: *1l                                                   
    2: *1t                                                   
    2:  abcdefghij                                           
    2: *

数値だけ指定すると、その数値行数次の行に移り、CPを先頭にし、1行表示します。
いま2行目にいるので 1行目に移り、1行表示するには
-1 とします。

    2: *-1                                                   
    1:  123abc7890                                           
    1: *

数値の 0のみの場合は、CPを行の先頭に移動し、1行表示します。

    1: *0                                                    
    1:  123abc7890                                           
    1: *

Enterのみ押すと、次の行に移りCPを先頭にし、1行表示します。

    1: *                                                     
    2:  abcdefghij                                           
    2: *


行削除は k kの前に数値を指定するとその数値行数分削除します。

1行目を削除

    1: *1k                                                   
    1: *b                                                    
    1: *2t                                                   
    1:  abcdefghij                                           
    1: *


セーブして 終了は e 起動したときに指定したファイル名にセーブします。

    1: *e                                                    
                                                             
A>dir                                                        
A: ASM      COM : DDT      COM : DISKDEF  LIB : DUMP     COM 
A: ED       COM : LOAD     COM : MAC      COM : PIP      COM 
A: STAT     COM : SUBMIT   COM : XSUB     COM : Z80      LIB 
A: TEST     BAK : TEST     ASM                               
A>type test.asm                                              
abcdefghij                                                   
                                                             
A>

編集したファイルを再度読み込み編集するには a を指定します。
ファイルから 指定行読むこむ場合は aの前に行数を指定します。
0aの場合、エディタバッファーの半分まで読み込むそうです。

0aを指定する前は、自動で読込されません。0aを指定すると読み込まれます

A>ed test.asm                                                
     : *2t                                                   
     : *0a                                                   
    1: *2t                                                   
    1:  abcdefghij  

他にもいろいろとコマンドがありそうですが、これだけ覚えたら テキストを編集できそうです。

BIOS, CP/Mの関連記事
  • Z80(Z8S180)に萌えたい。Z8S180でも容量拡張BIOS
  • Z80に萌えたい CP/M ディスクアクセス改善
  • Z80(TMPZ84C015)に萌えたい CP/M ディスク容量拡張その3
  • Z80に萌えたい CP/M ディスク容量拡張その1
  • Z80に萌えたい CP/M EDを使ってみる
  • Z80(Z8S180)に萌えたい。Z8S180でもモニタからのCP/Mブート
おすすめの記事
Z8S180
ハード的にマイコンとの通信がUSB経由でできるようになりましたので、Z80側に通信用確認プログラムを作成して、ちゃんと通信できるか確認したい...
BIOS
今回も前回に引き続きBIOSを作成していきます。そして、実際にCP/Mを起動したいと思います。 前回まだ、未完成だったwboot:から作成し...
monitor
拡張したSRAM上で動作するモニタを自動的に転送するコマンドを追加しました。 コマンドは”t”です。 合わせて、オープニング時にBBR、CB...