Windows, Linux, macOS などで使用できる fMSX 形式のディスクイメージファイル(.dsk)用のコマンドライン版ユーティリティです。
要望などあれば issues を切っていただければ対応するかもしれません。(もちろん Pull Request も歓迎します)
なお、テストは Linux (CI) と macOS (実機) で実施していますが、Windows は持っていないのでノーチェックです。
- create: ローカルファイルからディスクイメージファイルを生成
- info/ls: ディスクイメージファイルの各種情報を確認
- get: ディスクイメージファイル内の特定ファイルをローカルへ取得
- put: 特定のローカルファイルをディスクイメージへ書き込み
- cat: ディスクイメージファイル内の特定ファイルをローカルへ標準出力
- rm: ディスクイメージファイル内の特定ファイルを削除
- MSX-BASIC の テキスト⇔中間言語 を 相互変換:
create
とput
でテキスト形式の.BAS
ファイルを書き込むと中間言語形式に自動変換cat
で.BAS
ファイルを標準出力する時にテキスト形式に自動変換
- GNU Make
- CLANG (C++)
make
を実行すればビルドとテストが実行されます。
テストで行っていること:
- WebMSXで作成したディスクイメージから MSX-BASIC のコードを
get
コマンドで読み込む create
コマンドで新規ディスクイメージを生成- 生成したディスクイメージの情報を
info
コマンドで確認 - 生成したディスクイメージの情報を
ls
コマンドで確認 - 作成したディスクイメージからMSX-BASICのコードを
get
コマンドで読み込む(バイナリ差分が出ない事を git 上で確認用) - 作成したディスクイメージからMSX-BASICのコードを
cat
コマンドで出力
% make
clang++ --std=c++14 -o dskmgr src/dskmgr.cpp
cd test && make
../dskmgr ./wmsx.dsk get hello.bas
../dskmgr ./wmsx.dsk get hoge.bas
../dskmgr ./image.dsk create hello.bas hoge.bas attrac.bas barcode.bas blocks1.bas cmapload.bas cyrmap.bin cmapsave.bas vdptest.bin vdptest.bas
hello.bas: Write to disk as a binary file ... 23 bytes
hoge.bas: Write to disk as a binary file ... 30 bytes
attrac.bas: Convert to MSX-BASIC intermediate code ... 978 -> 906 bytes
barcode.bas: Convert to MSX-BASIC intermediate code ... 466 -> 433 bytes
blocks1.bas: Convert to MSX-BASIC intermediate code ... 2097 -> 1877 bytes
cmapload.bas: Convert to MSX-BASIC intermediate code ... 489 -> 432 bytes
cyrmap.bin: Write to disk as a binary file ... 2056 bytes
cmapsave.bas: Convert to MSX-BASIC intermediate code ... 319 -> 301 bytes
vdptest.bin: Write to disk as a binary file ... 1237 bytes
vdptest.bas: Convert to MSX-BASIC intermediate code ... 253 -> 210 bytes
../dskmgr ./image.dsk info
[Boot Sector]
OEM: SZKPLN01
Media ID: 0xF9
Sector Size: 512 bytes
Total Sectors: 1440
Cluster Size: 1024 bytes (2 sectors)
FAT Position: 1
FAT Size: 1536 bytes (3 sectors)
FAT Copy: 2
Creatable Files: 112
Sectors: 9 per track
Disk Sides: 2
Hidden Sectors: 0
Volume ID: 1B,15,58,E8
Dirty Flag: 36
[FAT]
Fat ID: 0xF9
- dirent#0 (HELLO.BAS) ... 2
- dirent#1 (HOGE.BAS) ... 3
- dirent#2 (ATTRAC.BAS) ... 4
- dirent#3 (BARCODE.BAS) ... 5
- dirent#4 (BLOCKS1.BAS) ... 6,7
- dirent#5 (CMAPLOAD.BAS) ... 8
- dirent#6 (CYRMAP.BIN) ... 9,10,11
- dirent#7 (CMAPSAVE.BAS) ... 12
- dirent#8 (VDPTEST.BIN) ... 13,14
- dirent#9 (VDPTEST.BAS) ... 15
Total using cluster: 15 (15360 bytes)
../dskmgr ./image.dsk ls
00:----w HELLO.BAS 23 bytes 2023.03.24 09:56:54 (C:2, S:14)
00:----w HOGE.BAS 30 bytes 2023.03.24 09:56:54 (C:3, S:16)
00:----w ATTRAC.BAS 906 bytes 2023.03.24 09:56:54 (C:4, S:18)
00:----w BARCODE.BAS 433 bytes 2023.03.24 09:56:54 (C:5, S:20)
00:----w BLOCKS1.BAS 1877 bytes 2023.03.24 09:56:54 (C:6, S:22)
00:----w CMAPLOAD.BAS 432 bytes 2023.03.24 09:56:54 (C:8, S:26)
00:----w CYRMAP.BIN 2056 bytes 2023.03.24 09:56:54 (C:9, S:28)
00:----w CMAPSAVE.BAS 301 bytes 2023.03.24 09:56:54 (C:12, S:34)
00:----w VDPTEST.BIN 1237 bytes 2023.03.24 09:56:54 (C:13, S:36)
00:----w VDPTEST.BAS 210 bytes 2023.03.24 09:56:54 (C:15, S:40)
Total Size: 7505 bytes
Free Size: 715776 bytes (699 clusters)
../dskmgr ./image.dsk get hello.bas
../dskmgr ./image.dsk get hoge.bas
../dskmgr ./image.dsk cat hello.bas
10 PRINT"HELLO,WORLD!"
../dskmgr ./image.dsk cat hoge.bas
10 CLS
20 PRINT"_____HOGE____"
Command | Outline |
---|---|
create | 新規ディスクイメージファイルを生成 |
info | ディスクのブートセクタと FAT (FAT12) の内容をダンプ |
ls | ディスクに格納されているファイルの一覧を表示 |
get | ディスクに格納されているファイルをローカルへ取得 |
put | ローカルファイルをディスクへ書き込む |
cat | ディスクに格納されているファイルをローカルで標準出力 |
rm | ディスクに格納されている特定のファイルを削除 |
./dskmgr image.dsk create [files]
- 新規のフォーマット済みのディスクイメージファイル (
image.dsk
) を作成します files
(複数指定可能) へ指定したファイルが書き込まれたimage.dsk
が生成されます- テキスト形式のBASIC(.BAS)ファイルは中間言語形式に自動変換されます
- ファイルサイズやファイル数の上限を超える場合は
Disk Full
エラーで書き込みが失敗します
files
を指定しなければ空のimage.dsk
が生成されます
./dskmgr image.dsk info
image.dsk
のブートセクタと FAT (FAT12) の内容をダンプします
./dskmgr image.dsk ls
image.dsk
に格納されているファイルの一覧を表示します
./dskmgr image.dsk get filename [as filename2]
filename
で指定したimage.dsk
内のファイルをローカルへ取得します[as filename2]
を指定した場合はローカルではfilename2
で保存されますfilename
は大文字と小文字を区別しません(全て大文字と解釈されます)
BASIC (.BASファイル) の場合は
cat
コマンドを使えば中間言語からテキスト形式に変換することができます。
./dskmgr image.dsk put filename [as filename2]
filename
で指定したローカルファイルをimage.dsk
内へコピーします[as filename2]
を指定した場合はimage.dsk
にはfilename2
で保存されますfilename
またはfilename2
は大文字と小文字を区別しません(全て大文字と解釈されます)image.dsk
内にfilename
またはfilename2
と同じファイル名が存在する場合は上書きされますimage.dsk
内にfilename
またはfilename2
と同じファイル名が存在しない場合は新規追加されます- テキスト形式のBASIC(.BAS)ファイルは中間言語形式に自動変換されます
- ファイルサイズやファイル数の上限を超える場合は
Disk Full
エラーで書き込みが失敗します
./dskmgr image.dsk cat filename
filename
で指定したimage.dsk
内のファイルをローカルへ標準出力しますfilename
は大文字と小文字を区別しません(全て大文字と解釈されます)- 拡張子が
.BAS
の場合、テキストに変換して標準出力します
./dskmgr image.dsk rm filename
filename
で指定したimage.dsk
内のファイルを削除します
- MSX Disk Manager for CLI (src/dskmgr.cpp) ... MIT
- MSX-BASIC Filter (src/basic.hpp) ... MIT
- Test Programs:
- MSX: Gilbert François Duivesteijn ... Apache License Version 2.0
- VDP Timing Test ... Expat License
- Copyright © 2020 Pedro Gimeno Fortea.
- URL: https://notabug.org/pgimeno/vdptest/