今回は、cpmtoolsを使用して、ディスク容量拡張したSDCARDを作成していきたいと思います。
以下 環境としてraspberryPI3 とRaspbianで行っています。

また 前回の 「Z80(TMPZ84C015)に萌えたい。CP/M ディスク作成」を参考にしてください。

容量拡大のディスクパラメータをもう一度おさらいすると次のようになります。
ディスク数      4 ドライブ(A/B/C/D)
トラック数    128 トラック
セクタ数      64 セクタ
セクタバイト数  128 バイト
ファイル最小単位 2048バイト
システムトラック    0トラック
スキュー         なし
ディレクトリ数  128

これらの情報をもとに、cpmtoolsのパラメータを設定します。
cpmtoolsの設定ファイル /etc/cpmtools/diskdefsを開き、最後尾に下記設定パラメータを追加します。

$ sudo vim /etc/cpmtools/diskdefs

#最後尾の後に追加

diskdef newdisks
  seclen 128
  tracks 128
  sectrk 64
  blocksize 2048
  maxdir 128
  skew 0
  boottrk 1
  os 2.2
end

システムのみのバイナリーイメージを作成します。

$ dd conv=sync bs=128 count=44 if=CPM.SYS >> cpm.bin

システムを含めた 1ドライブ全体のディスクイメージを作成します。

$ mkfs.cpm -f newdisks -b cpm.bin -L test diskimage_64_128

ディスクイメージにファイルを追加します。
追加するファイルは以前作成したものといっしょです。

$ cpmcp -f newdisks diskimage_64_128 ./a/*.* 0:

追加されたファイルを確認します。

$ cpmls -f newdisks diskimage_64_128
0:
asm.com
ddt.com
diskdef.lib
dump.com
ed.com
load.com
mac.com
pip.com
stat.com
submit.com
xsub.com
z80.lib

512byte→128byte再配置のpythonプログラムconvertfiles を通します。
ディスクパラメータが変更になっているので一部 下記のように更新しました。
ファイル名 convertfiles_64_128.py として保存します。

import sys
import struct

infiles = open("diskimage_64_128","rb")

data_buff = infiles.read()
buff128_size= int(len(data_buff)/128)
print(buff128_size)


disk_number = 4
track_number = 128
system_track = 1
sector_number = 64
out_buff128_size = disk_number*track_number*sector_number
print(out_buff128_size)
out_buff = bytearray([229] * out_buff128_size*512)

for i  in range(system_track*sector_number):
    for j in range(512):
        out_buff[i*512+j] = data_buff[i*512+j]

for i  in range(system_track*sector_number,buff128_size):
    for j in range(128):
        out_buff[i*512+j] = data_buff[i*128+j]

with open("diskimage_conv_64_128","wb") as outfiles:
    outfiles.write(out_buff)

infiles.close()
outfiles.close()

pythonプログラムを実行します。

$ python convertfiles_64_128.py
688
32768

USB SDCARDリーダーを接続して、下記コマンドを実行してドライブ名を確認します。ここでは 新たに8GBのSDCARDを用意しました。

$ dmesg | tail
中略
[ 4046.119225] sd 1:0:0:0: [sdb] 15523840 512-byte logical blocks: (7.95 GB/7.40 GiB)

この情報から ドライブ名は sdb  1ブロック512byteとなっています。

SDCARDにディスクイメージを書き込みします。

$ sudo dd bs=512 if=./diskimage_conv_64_128 of=/dev/sdb
32768+0 レコード入力
32768+0 レコード出力
16777216 bytes (17 MB, 16 MiB) copied, 4.08467 s, 4.1 MB/s

これで 新たに拡張したSDCARDが作成されました。
次回 1部BIOSを更新して、CP/Mがbootできるようにしたいと思います。

おすすめの記事