Skip to content

suzukiplan/msx-disk-manager-cli

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MSX Disk Manager for CLI CircleCI

Windows, Linux, macOS などで使用できる fMSX 形式のディスクイメージファイル(.dsk)用のコマンドライン版ユーティリティです。

要望などあれば issues を切っていただければ対応するかもしれません。(もちろん Pull Request も歓迎します)

なお、テストは Linux (CI) と macOS (実機) で実施していますが、Windows は持っていないのでノーチェックです。

Features

  • create: ローカルファイルからディスクイメージファイルを生成
  • info/ls: ディスクイメージファイルの各種情報を確認
  • get: ディスクイメージファイル内の特定ファイルをローカルへ取得
  • put: 特定のローカルファイルをディスクイメージへ書き込み
  • cat: ディスクイメージファイル内の特定ファイルをローカルへ標準出力
  • rm: ディスクイメージファイル内の特定ファイルを削除
  • MSX-BASIC の テキスト⇔中間言語 を 相互変換:
    • createput でテキスト形式の .BAS ファイルを書き込むと中間言語形式に自動変換
    • cat で .BAS ファイルを標準出力する時にテキスト形式に自動変換

Pre-requests

  • GNU Make
  • CLANG (C++)

How to Build and Test

make を実行すればビルドとテストが実行されます。

テストで行っていること:

  1. WebMSXで作成したディスクイメージから MSX-BASIC のコードを get コマンドで読み込む
  2. create コマンドで新規ディスクイメージを生成
  3. 生成したディスクイメージの情報を info コマンドで確認
  4. 生成したディスクイメージの情報を ls コマンドで確認
  5. 作成したディスクイメージからMSX-BASICのコードを get コマンドで読み込む(バイナリ差分が出ない事を git 上で確認用)
  6. 作成したディスクイメージから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____"

Manual

Command Outline
create 新規ディスクイメージファイルを生成
info ディスクのブートセクタと FAT (FAT12) の内容をダンプ
ls ディスクに格納されているファイルの一覧を表示
get ディスクに格納されているファイルをローカルへ取得
put ローカルファイルをディスクへ書き込む
cat ディスクに格納されているファイルをローカルで標準出力
rm ディスクに格納されている特定のファイルを削除

create

./dskmgr image.dsk create [files]
  • 新規のフォーマット済みのディスクイメージファイル (image.dsk) を作成します
  • files (複数指定可能) へ指定したファイルが書き込まれた image.dsk が生成されます
    • テキスト形式のBASIC(.BAS)ファイルは中間言語形式に自動変換されます
    • ファイルサイズやファイル数の上限を超える場合は Disk Full エラーで書き込みが失敗します
  • files を指定しなければ空の image.dsk が生成されます

info

./dskmgr image.dsk info

image.dsk のブートセクタと FAT (FAT12) の内容をダンプします

ls

./dskmgr image.dsk ls

image.dsk に格納されているファイルの一覧を表示します

get

./dskmgr image.dsk get filename [as filename2]
  • filename で指定した image.dsk 内のファイルをローカルへ取得します
  • [as filename2] を指定した場合はローカルでは filename2 で保存されます
  • filename は大文字と小文字を区別しません(全て大文字と解釈されます)

BASIC (.BASファイル) の場合は cat コマンドを使えば中間言語からテキスト形式に変換することができます。

put

./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 エラーで書き込みが失敗します

cat

./dskmgr image.dsk cat filename
  • filename で指定した image.dsk 内のファイルをローカルへ標準出力します
  • filename は大文字と小文字を区別しません(全て大文字と解釈されます)
  • 拡張子が .BAS の場合、テキストに変換して標準出力します

rm

./dskmgr image.dsk rm filename
  • filename で指定した image.dsk 内のファイルを削除します

License