FDD エミュレータ
FDDエミュレーターについて解説します。
設定(FlashFloppy)
FlashFloppyの設定は、本体のジャンパ設定と、いくつかのcfgファイルによる設定があります。
ジャンパの設定と、各cfgファイルの設定は被る部分がいくつかありますが、その場合はcfgファイルを優先します。
ジャンパ設定
Gotekのジャンパはいくつかありますが、基本的にFlashFloppyでは4つ(S0,S1,MO,JC)しか使用しません。
ほかのジャンパーは、未使用だったり、オプションの装着時に使用します。
S0 : ドライブ0に割り当てる場合に使用します。☆
S1 : ドライブ1に割り当てる場合に使用します。☆
MO: モーターオン信号を有効にします。
JC : IBMPC仕様かシュガート仕様かのジャンパです。
(ジャンパされているとIBMPC、オープンだとシュガート)
☆設定しなくていい場合もあります(電子楽器用の場合など)。
設定ファイル(ff.cfg)
多くのきめ細かい設定ができるのが、FlashFloppyの大きな特徴です。
ff.cfgは設定項目がおおいため、かなり難しいところもありますが、理解できてしまうと、多くの機器に対応できる強力なツールになります。
※なお、大文字小文字は関係ありません。
ff.cfgは、ルートフォルダもしくは\ffフォルダの中に入れます。
ただし、\ffフォルダに入れた場合は、他の設定ファイルも同様に\ffフォルダに入れる必要がある場合があります。
ff.cfgはテキストファイルで、各設定を書いていきます。順番は違っていてもOKです。
ff.cfgは、読み込ませてすぐに有効になるわけではなく、一度読み込ませた後、一度電源を落として再起動した後に有効になります。また、変更しない限り、一度設定したらSTM32の内臓flashメモリに記憶されるので、ff.cfgは常にないといけないわけではありません。
エミュレーション制御:
項目:interface
使用例:interface = ibmpc
フロッピードライブのインターフェースモードの設定を行います。
shugart: P2=DSKCHG, P34=RDY
ibmpc : P2=unused, P34=DSKCHG
(本来P2は2HD/2DDの判別に使用する信号のためエミュレーターでは使用しない)
ibmpc-hdout : P2=HD_OUT, P34=DSKCHG
(通常は不要です:'ibmpc'の設定を優先します)
akai-s950 : P2=HD_OUT, P34=RDY (Akai S950)、
amiga : P2=DSKCHG, P34=DRIVE_ID
(通常は不要です:'shugart'を優先します)
項目:host
使用例:host = unspecified
ホストプラットフォームの設定を行います。
主に特殊なプラットフォームの場合のみで、通常はunspecifiedで問題はありません。
acorn : Acorn ADFS
akai : Akai (S01, S20, S950), Korg, SC Prophet 3000
casio : Casio (FZ-1)
dec : DEC (RX33, RX50)
ensoniq : Ensoniq (ASR, TS, etc)
fluke : Fluke 9100
gem : General Music (S2, S3)
ibm-3174 : IBM 3174 Establishment Controller
kaypro : Kaypro
memotech : Memotech
msx : MSX
nascom : Nascom
pc98 : NEC PC-98
pc-dos : PC DOS Format (geometry determined from Bios Parameter Block)
tandy-coco : Tandy Color Computer (CoCo)
ti99 : TI-99/4A
uknc : UKNC / DVK Soviet PDP-11
unspecified : 上記以外(ややこしいですがibm pcもこれに含まれます)
項目:pin02
pin34
使用例:pin02 = auto
pin34 = auto
FDDインターフェースの2番ピンと34番ピンの手動設定を行う時に使います。
それぞれ個別に設定が可能です。
auto : interface項目の設定に準拠します。
nc : 使用しないときに選択します。
low : 常に0Vになります。
high : 常に5Vになります。
rdy : ready信号(ローアクティブ:0Vアクティブ)を出力します。
nrdy : rdyの逆論理(ハイアクティブ:5Vアクティブ)を出力します。
dens : 2dd/2hdの判別信号を出力します(2HD = 0v)
ndens : densの逆論理(2HD = 5V)を出力します。
chg : Disk changed信号を出力します。(Changed = 0v)
nchg : chgの逆論理(Changed = 5V)を出力します。
項目:write-protect
使用例:write-protect = no
強制的にUSBディスク全体を書き込み禁止属性にするか設定します。。
(個別に書き込み禁止を設定する場合はパソコンからファイル属性を「読み取り専用」で設定してください)
yes : 設定します
no : 設定しません
項目:side-sellect-glitch-filter
使用例:side-sellect-glitch-filter = 0
信号線に混入したグリッチノイズを、ミリ秒単位でフィルタリングします。
機器のノイズが大きく、不安定な誤動作をする場合に使用します。
数値(0~255)の間で設定します。
項目:track-change
使用例:track-change = instant
トラック変更時のディスクの回転オフセットを行います。
instant: オフセットを行いません。
realtime: トラック変更時のオフセットを常に行います。
項目: write-drain
使用例:write-drain = instant
フラッシュメモリへの書き込み後の回転オフセットを行います。
instant: オフセットを行いません。
realtime: トラック変更時のオフセットを常に行います。
eot : トラックの終わりに近づいたらオフセットを行います。
項目: index-suppressin
使用例: index-suppression = yes
WDATAもしくはRDATAがアクティブでないときに、インデックスパルスを出すのを抑えるかどうかの設定を行います。
yes : 抑制します
no : 抑制しません
項目: head-settle-ms
使用例:head-settle-ms = 12
RDATAがアクティブになってから、(仮想)ヘッドがトラック移動で動き出すまでの時間をミリ秒単位で設定します。
数値(0~255)の間で設定します。
項目: motor-delay
使用例: motor-delay = ignore
motor on 信号がアクティブになってから、ready信号がアクティブになるまでの遅延時間(ミリ秒単位)を設定します。
ただし、MOジャンパを設定している場合のみ有効です。設定していない場合、ここでの数値設定は意味を持ちません。設定していない場合はignoreと同じ状態になります。
ignore : motor on 信号を無視する
MOジャンパを設定している場合のみ、数値(0~255)の間で設定します。
項目: chgrst
使用例: chgrst = step
dskchg信号(「ディスクが交換されている」信号)をリセットする要因を決定します。
フロッピーディスクの中には、これを専用の信号でリセットする場合や、一定時間経過後にリセットする場合があり、その場合に使用します。通常はstepでOKです。
step : step信号受信後
pa14 : CHGRST信号:STM32のPA14(GotekではプログラミングコネクタのSWCLKに接続)の信号受信時
※松下JU-363-2などが該当します。主にDX7 II-FDに使われています。
delay-N : 一定時間(N × 0.5秒)経過後自動的にリセットします(N: 0~15: 0.5秒単位)
起動時の動作設定:
項目: ejected-on-startup
使用例: eject-on-startup = no
電源投入時、ディスクイメージを読み込むか排出状態にするかを決めます。
yes : 排出する
no :排出しない(読み込む)
項目: image-on-startup
使用例: image-on-startup = last
起動時にどのイメージ(およびフォルダ)を選択するかを決めます。
last : 電源を切る直前に選ばれていたものを読み込みます。
static : init_a.cfgで設定されたパスを読み込みます。
init : ルートフォルダの最初のイメージを読み込みます。
項目: display-probe-ms
使用例:display-probe-ms = 3000
表示装置を認識する時間をミリ秒単位で設定します。
※2桁の7セグLEDを使用する場合0にセットすることをお勧めします。
数値(0~65535)の間で設定します。
ディスクイメージナビゲーション:
項目: autoselect-file-secs
使用例:autoselect-file-secs = 2
表示されたディスクイメージを自動的に選択するまでの時間です(秒単位)。
なお、0で設定された場合は自動選択を行いません。
数値(0~255)の間で設定します。
項目: autoselect-folder-secs
使用例:autoselect-folder-secs = 2
表示されたフォルダを自動的に選択するまでの時間です(秒単位)。
なお、0で設定された場合は自動選択を行いません。
数値(0~255)の間で設定します。
項目: folder-sort
使用例: folder-sort = always
ネイティブモード時(ディスプレイがOLEDで、任意の名前のファイルを選択可能な場合)、フォルダ表示の並べ替えを行います。
always: 常にフォルダエントリを並べ替えます。 大きなフォルダーは切り捨てられる場合があります。
never: フォルダエントリを並べ替えるのではなく、FAT登録順に表示します。
small: 小さいフォルダのみを並べ替えます。
項目: sort-priority
使用例: sort-priority = folders
フォルダエントリを並べ替えるときのファイルとサブフォルダの優先度を設定します。
folders: ファイルの前にフォルダが来るようにします。
files: フォルダの前にファイルが来るようにします。
none: ファイルとフォルダは区別されません。
項目: nav-mode
使用例: nav-mode = default
ナビゲーションモードの設定を行います。
native : 使用可能なすべてのディスクイメージを扱えます。OLEDオプション装着時設定可能です。
indexed : 7セグLED使用時に対応可能なモードです。ファイル名は DSKA0000, DSKA0001, .で使用します.
default : HxC-compat-mode configによって上書きされない限り、ネイティブモードとして動作します。
項目: nav-loop
使用例: nav-loop = yes
スロットまたはフォルダをナビゲートするとき、最小/最大でループするかを設定します。
(yes | no)で設定します。
項目: twobutton-action
使用例: twobutton-action = zero
Gotekに標準でついている2つのボタンの動作を設定します。
B1 | B2 | 2ボタン同時押し
zero : Prev | Next | Slot 0
eject : Prev | Next | Eject/Insert
rotary: Up-dir | Select/Eject/Insert | -
rotary-fast: Prev | Next | Up-dir [Prev/Next are accelerated]
reverse: B1 and B2 の動きを逆にします。
※reverseと他の設定は組み合わせ可能です、組み合わせるときはコンマで区切ります。
例:twobutton-action=eject,reverse
項目: rotary
使用例: rotary = full
ロータリ-エンコーダーのセンサータイプを指定します。
※オプションの項目で触れますが、ロータリーエンコーダーを使用する場合、i2cコネクタのDT/CLKのそれぞれの端子をエンコーダーの左右端子に、真ん中の端子をGNDに接続します。
ちなみに2ボタンも同様に、(すでに2ボタンあるので不要といえば不要ですが)DT/CLKの端子のそれぞれを各ボタンの片方に、ボタンの端子のもう片方をそれぞれGNDに接続することができます。下記項目で説明しているのは標準の2ボタンではなく前述のボタンのことを指します。
[ロータリーエンコーダーの場合]
full : 1クリックで1項目移動する場合(通常はこれを選択します)
half : 2クリックで1項目移動する場合
quarter : 4クリックで1項目移動する場合
[トラックボールの場合]
trackball : ブラックベリータイプの超小型トラックボールを使用する場合
[2ボタンタイプを使用する場合]
buttons : 2ボタンを使用する場合
[設定を逆にする場合]
reverse : 動きを逆にします。
※reverseと他の設定は組み合わせ可能です、組み合わせるときはコンマで区切ります。
例: rotary=quarter,reverse
項目: ndexed-prefix
使用例: ndexed-prefix = "DSKA"
indexモードの際に、番号の前につける文字列を設定します。
番号は4桁です。
使用例を実際に使用する場合、DSKA0000,DSKA0001といった具合にファイル名を設定することでファイルを認識するようになります(拡張子は認識できるイメージファイルの拡張子)。
表示設定:
項目: display-type
使用例:display-type = auto
表示装置の種類を設定します。
auto : 自動認識 (7セグ LED, LCD, OLED)
lcd-CCxRR CCは桁数、RRは行数です。i2c変換基板付きのバックライトLCD)を使用する場合に設定します。
(CCは16~40, RRは 02~04)
oled-128xNN: i2cタイプの小型OLEDを使用する場合に設定します。(NN=32 or 64)
-rotate : OLEDの表示を180度回転(=上下反転)させます。
-narrow[er] : OLED の表示を、Gotekの標準(=3桁7セグLED用)の窓に収める場合に使用します。
(-narrow: 18文字、; -narrower: 16文字)
-ztech: ZHONGJY_TECH 2.23" 128x32 SSD1305 OLED を使用する場合に設定します。
項目: oled-font
使用例: oled-font = 8x13
OLED使用時、フォントの大きさを設定します。
フォントの大きさが小さいと、多くの文字を入れられますが、見にくくなります。
逆に大きいと見やすくなりますが、文字がはみ出て見えなくなってしまいます。
値は (6x13 or 8x16)で設定します。。
項目: oled-contrast
使用例: oled-contrast = 1
OLED表示の明るさ/コントラストを設定します。
数値(0~255)の間で設定します。
項目: display-order
使用例: display-order = default
LCDやOLED使用時、表示させる内容を設定します。
設定値は"default"もしくはコンマで区切られた2つの数値で設定します(上の行から順)。
その後ろに"d"を入れることで、文字を2行にまたがって表示させることができます。
(OLEDのみになります、LCDでは無視されます)
設定値は0~3, 7, default になります。
0 : 現在使用中のディスクイメージファイル名
1 : 状態
2 : ディスクイメージ/ボリューム情報
3 : 現在のサブフォルダ名
7 : 空白(何も表示させません)
default: 設定されているディスプレイによる。
( 設定値例 : oled-128x32='0,1' ; oled-128x64='3,0d,1')
項目: display-off-secs
使用例: display-off-secs = 120
スクリーンセーバー(ディスプレイ消灯)までの秒数を設定します。
数値(0~255)の間で設定します。
項目: display-on-activity
使用例: display-on-activity = yes
スイッチ操作以外での動作でLCD/OLEDを表示させる(=スクリーンセーバーからの復帰)動作を設定します。
yes : 仮想ヘッドのトラック移動や書き込み時
sel : ドライブ選択信号(DS0 or DS1)受信時
no : 手動
項目: display-scroll-rate
使用例: display-scroll-rate = 200
長いファイル名受信時に、スクロールする表示速度(ミリ秒単位)
数値(100~65535)の間で設定します。
項目: display-scroll-pause
使用例: display-scroll-pause = 2000
スクロールの開始/終了時の一時停止時間(ミリ秒単位)
※0で設定した場合はエンドレスでスクロールします。
数値(0~65535)の間で設定します。
項目: nav-scroll-rate
使用例: nav-scroll-rate = 80
LCD / OLED使用時、ナビゲーション中の長いファイル名のスクロール速度(ミリ秒単位)
数値(0~ 65535)の間で設定します。
項目: nav-scroll-pause
使用例: nav-scroll-pause = 300
LCD / OLED使用時、ナビゲーション中の長いファイル名のスクロール前の停止時間(ミリ秒単位)
数値(0~ 65535)の間で設定します。
その他設定:
項目: step-volume
使用例: step-volume = 10
FlashFloppyはFDDの音(ヘッドのステップやシーク音)をスピーカーを使用して表現可能です。
その音のボリュームを設定できます。
数値(0~ 20)の間で設定します。
項目: da-report-version
使用例: da-report-version = ""
da-report-version = "v3.0.0.0"
ここで設定したバージョン番号をホストソフトウェアに報告します。
設定ファイル(img.cfg)
img.cfgは、イメージファイルの内容に関するもので、昔の8ビットなど、一般的な設定では読み込めない場合に設定を変更することで対応できる場合があります(通常は自動的にある程度作られます)。
多くのシンセサイザーや、すでに対応できている場合はこれをいじる必要はありません。
項目: cyls ※必須項目
使用例: cyls = 80
シリンダ(トラック)数を記入します。
数値は1-254の間で設定します。
項目: heads ※必須項目
使用例: head = 2
ヘッド数(サイド数)を書きます、片面の場合は1、両面の場合は2です。
例えば1D,1DDディスクの場合は1、2D,2DD,2HDの場合は2です。
項目: secs ※必須項目
使用例: sec = 9
シリンダ(トラック)あたりのセクタ数を記入します。
1-256の間で設定します。
項目: bps ※必須項目
使用例: bps = 512
セクタ当たりのバイト数を記入します。
(128/256/512/1024/2048/4096/8192)のいずれかでせっていします。
項目: id
使用例: id = 1
各トラックの最初のセクターのIDを記入します。
連続するセクターには、順番に番号が付けられます
数値は、プレフィックスが0xの16進数で表すことができます(例:0xab)。
x:y形式では、ヘッド/ディスク側ごとに異なるID(x、y)を指定できます。
フォーマットxは、両面ディスクの両方のヘッド/サイドに同じID(x)を指定します。
0-255 [:0-255] の値で設定します。※デフォルトは1
項目: mode
使用例: mode = mfm
記録密度の指定をします。
fm/mfmのどちらかで設定します。※デフォルトはmfm
項目: interleave
使用例: interleave = 1
セクタのインターリーブの指定をします。
1-255の間で設定します。※デフォルトは1ですが、通常はインターリーブは1:1かなしです。
(必要な場合のみ設定します)
項目: cskew
使用例: cskew = 0
シリンダごとのセクタースキューの設定をします。
0-255の間で設定します。※デフォルトは0です、もしくはなしです。
(必要な場合のみ設定します)
項目: hskew
使用例: hskew = 0
ヘッドごとのセクタースキューの設定をします。
0-255の間で設定します。※デフォルトは0です、もしくはなしです。
(必要な場合のみ設定します)
項目: rpm
使用例: rpm = 300
仮想回転数(実フロッピードライブでの実際の回転数)の設定をします。
1-1000の間で設定します。※デフォルトは300ですが、FDDによって違うので確認しましょう。
項目: gap3
使用例: gap3 = 0
セクターごとのポストデータのギャップを設定します。
デフォルト:0の場合、記録モード、セクターサイズ、トラックサイズに応じて自動で設定されます。
(イレギュラーな場合のみ、手動で0-255の間で設定することができます)
項目: iam
使用例: iam = yes
各トラックの先頭にインデックスアドレスマークが含まれているか設定をします。
yes / no で設定します。※デフォルトはyesです。
項目: rate
使用例: rate = 0
データレートの設定をします。(例:MFM DD:倍密度:なら250、MFM HD:高密度:なら500、FM SD:単密度:なら125といった具合です)
0-1000の間で設定します。
※デフォルトは0ですが、この場合はトラックサイズや記録密度などで自動設定になります。
項目: file-layout
使用例: file-layout = interleaved
イメージファイルのトラックレイアウトの設定をします。
interleaved / sequential / reverse-sideN (N = 0 or 1)/ sides-swapped
※デフォルトは interleavedです。
複数の値をコンマで区切って指定できます(例:sequential、reverse-side1)
interleave :インターリーブされたシリンダーの順序:c0s0、c0s1、c1s0、c1s1、..。
sequential :シーケンシャルシリンダーの順序:すべてのサイド0、次にサイド1
(まずサイド0の全トラック、次に再度の全トラックといった感じです)
reverse-sideN :指定したサイドのシリンダー(トラック)は逆の順序(高→低)です(N = 0,1)
side-swapped :サイド0とサイド1の順序が逆になります