石原 博の覚書

電子工作に関する日々の覚書を記載します

avrcpm注意点4

2020-10-18 13:38:31 | 日記
CP/Mディスク作成

https://github.com/petersieg/avrcpm を参考にさせて頂いてます。

付属するCPMDSK_A_IMGでは動作します。

しかしサイトから The Unofficial CP/M Web site(http://www.cpm.z80.de/)等から
ソフトを入れたいと考えました。

neko javaさんの、「CP/Mディスクイメージ作成手順メモ」を参考に、
64セクタ/トラック、244トラックで作成を考えました。ところが上手く動きません。

通常はbios内だけにディスクパラメタがあるのですが、
実は、dsk_fsys.asm内にもあります。これも修正が必要です。(当然BIOSも修正が必要)

1トラック=64セクタ中 IPL=1セクタ、CCP+BDOS=44セクタとして、残り19セクタまでBIOSに割り当てることが可能なため、
offsetは1としています。

さらに同じようにdiskdefsを作成し mkfs.cpm を使用してディスクイメージを作成することが必要です。

この状態で、通常のコマンドやMBASICの単純な動作確認は通ります。しかしBDS Cでコンパイルの実験をすると、
bad sectorエラーが出ます。SDRAMのノイズ等のハードも疑ったのですが、思ってもみないところで問題がありました。

===ディスクイメージ作成スクリプト(失敗)===
dd conv=sync bs=128 count=1 if=ipl.bin > cpm.bin
dd conv=sync bs=128 count=44 if=cpm.sys >> cpm.bin
dd conv=sync bs=128 count=17 if=bios.bin >> cpm.bin

mkfs.cpm -f CPM-A -b cpm.bin -L drive_a diskimage
cpmcp -f CPM-A diskimage ./temp/A/*.* 0:
mv diskimage CPMDSK_A.IMG
=======================================

これで作成したイメージは、mkfs.cpmだけだと16,384バイト、cpmcpを行うと243,712バイト(イメージ内にコピーするデータによる)
これをパーティションを切った上でfat16でフォーマットしたSDRAMにコピーするのですが、
avrcpm側ではこの領域を広げることが出来ないようです。
そもそも 128byte/sec 64sec/trk 244trk なら 1,998,848バイトです。

mkfsのソースは読んでませんが、予め領域を確保していれば良いことが分かりました。そこで

===ディスクイメージ作成スクリプト(失敗)===
dd conv=sync bs=128 count=1 if=ipl.bin > cpm.bin
dd conv=sync bs=128 count=44 if=cpm.sys >> cpm.bin
dd conv=sync bs=128 count=17 if=bios.bin >> cpm.bin

dd conv=sync bs=8192 count=244 if=/dev/zero > diskimage
mkfs.cpm -f CPM-A -b cpm.bin -L drive_a diskimage
cpmcp -f CPM-A diskimage ./temp/A/*.* 0:
mv diskimage CPMDSK_A.IMG
=======================================
としています。

Neko Javaさんのところでは、1つのファイルに複数CP/Mドライブイメージを入れてます。
Dドライブは領域不足になるのではないかなぁ
私の場合は、Aドライブは変更せずCドライブだけ導入ソフトを変更するということがあるので、
ドライブ毎にファイルを分けています。
===Neko Javaさんのページ ディスクイメージ作成===
mkfs.cpm -f cpm_d diskimage
mkfs.cpm -f cpm_c diskimage
mkfs.cpm -f cpm_b diskimage
mkfs.cpm -f cpm_a -b cpm.bin -L test diskimage
=======================================================

様々なサイトにお世話になりながら、やっと動くものが出来ました。

参考
CP/Mディスクイメージ作成手順メモ
https://www.mikrocontroller.net/articles/AVR_CP/M

===dsk_fsys.asm(オリジナル)===
dpbdat_avrcpm: ;(dpb243)
.db 0x00,0x1A ;sector offset, low(spt)
.db 0x00,0x03 ;high (spt), block shift
.db 0x07,0x00 ;bock mask, extent mask
.db 0xF2,0x00 ;disk size - 1,
.db 0x3F,0x00 ;dir max
.db 0xC0,0x00 ;alloc0, alloc1
.db 0x10,0x00 ;chk size
.db 0x02,0x00 ;offset
=======================

===dsk_fsys.asm(修正後)===
dpbdat_avrcpm: ;
.db 0x00,64 ;sector offset, low(spt)
.db 0x00,4 ;high (spt), block shift
.db 15,0x00 ;bock mask, extent mask
.db 0xcb,0x03 ;disk size - 1,
.db 0x7F,0x00 ;dir max
.db 0xC0,0x00 ;alloc0, alloc1
.db 0x20,0x00 ;chk size
.db 0x01,0x00 ;offset
=======================


===BIOS内該当部分========
dpb972:
dw 64 ;sec per track
db 4 ;block shift BSH 2048=128*(2^4)
db 15 ;block mask BLM 2048/128-1=15
db 0 ;extnt mask EXM
dw 971 ;disk size-1 DSM 128*64*(244-1)/2048-1=971
dw 127 ;directory max DRM 2*64-1
db 192 ;alloc0
db 0 ;alloc1
dw 32 ;check size CKS (DRM+1)/4=(127+1)/4=32
dw 1 ;offset
============================

===diskdefs===
# CP/M A:drive
diskdef CPM-A
seclen 128
tracks 244
sectrk 64
blocksize 2048
maxdir 128
skew 1
boottrk 1
os 2.2
end
=================


最新の画像もっと見る

コメントを投稿