今回は、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できるようにしたいと思います。