FMTOWNSテクニカルデータブック
著者 : 千葉憲昭氏
出版社 : アスキー出版局
・通称 "赤本"
・改訂3版まで発行されているが、改訂3版以降に発売された機種(E系,H系,VTowns系)については当然ながら未記載
TOWNSユーザーにとってはバイブル的な存在では有るが、誤記も多いとの情報はあるがその正誤表をまとめたページの存在は知る限り無いので、このページを作成しました。
情報をお持ちの方は追加していただくか、コメント欄にコメントを残してください。
表紙
- 初版: ???
- 改訂版: ブルックリン橋
- ブルックリンからマンハッタンを望む
- 改訂2版: ヒューストン
- 一番高い建物が JPMorgan Chase Tower
- 二番目に高い建物が Wells Fargo Plaza
- 改訂3版: 東京都庁
- 手前が第二本庁舎、奥が第一本庁舎
正誤情報
- 12ページ 図I-I-6 I/Oキャラクタ部分のメモリマップドI/O 漢字ROMアドレスの各開始アドレス値
誤:1E800H,1E000H,1F000H,1F800H
正:3D000H,3D800H,3E000H,3E800H
- 57ページ~ 割り込みの説明全般
・「Specific」を「特殊」と訳しているが、「特定」と訳すべき
・「フリーネステッドモード」の「フリー」は「Free」ではなく「Fully],従って、意味合い的には
「全ネステッドモード」と解釈する必要が有るので注意が必要
- 74ページ DMAC I/O 00AAH モードコントロールレジスタ TDIR
・一覧ではビット2の名称がDIR2となっているが、TDIRの説明ではDIR2は無く、DIR0と表記されている
ビットの並びより、一覧のDIR0と表記すべき箇所がDIR2と表記されているものと思われる
- 75ページ DMAC I/O 00ABH ステータスレジスタ TC3~TC0
誤:「DMA転送が指定されたバイト数終了したかどうかを示す。」
正:「DMA転送が指定されたバイト数終了したか、DMACのEND入力による終了のいずれかを示す」
*TOWNSの回路としてDMACのEND入力を使用している事は確実かと思われるが、タイミングは不明
- 77ページ PIC 説明文1行目
誤:8253の動作モードのうち,チャネル0,2,3ではモード3・・・・
正:8253の動作モードのうち,チャネル0,2,4ではモード3・・・・
- 90ページ シリアルROM制御レジスタ ID RESETフラグ
誤:チップセレクトがアクティブで,クロックが1のとき・・・
正:チップセレクトがアクティブのとき
(山川機長さんによるフリコレ6のブートセクタ解析の結果による)
- 93ページ 拡張NMI関連のレジスタの説明文の際後尾部分
誤:拡張していないときには常に0を保ちます
正:発生していないときには常に0を保ちます
- 130ページ図I-4-33
誤:オフセットレジスタのアダレス値への加算
正:オフセットレジスタのアドレス値への加算
- 130ページ表I-4-19
誤R/W 7 6 5 4 3 2 1 0 R DP1 0 0 0 DP0 0 0 0 W 0 0 0 DP1 0 0 0 DP0 正(DP0は表示に影響を及ぼさないが、MAでは書き込んだビットは保存される)
R/W 7 6 5 4 3 2 1 0 R 0 0 0 DP1 0 0 0 DP0 W DP1 0 0 0 DP0 0 0 0
- 183ページ 表I-5-8 FDLデータレジスタの重みづけ表
誤:ビットD1,D0の重みが、それぞれ1^-10,0^-11
正:ビットD1,D0の重みが、それぞれ2^-10,2^-11
- pp.194
「スロットは、個別にエンベロープ信号を接続するかどうかのスイッチを持っているので、スロットごとにエンベロープ変調をかけるかどうかを選択できます。」
そんなスイッチは無い。実際のアプリケーションでオフにする場合はTLを127にしている。好意的に解釈すると、TLがそのスイッチとも取れなくないけど、普通に解釈するとTLとは別にオンオフスイッチするレジスタがあるように取れるのでやっぱり間違いだと思う。
-
201ページ YM2612の内部クロック
誤: 内部クロック周波数は600KHzです。正(多分): 内部クロック周波数は667KHzです。
FM-7/77AVのFM音源カードYM2203Cに与えられるマスタークロックは、1228.8KHzであることが判明している。そこから、F-BASIC V3.3とF-BASIC 386がPLAY"O4A"で書き込むF_NUMとBLOCKを元に、クロック周波数の比を計算して、あてはめると、TOWNSのYM2612に与えられるマスタークロックは1999.46KHzという計算になるので、おそらくマスタークロックが2MHz。YM2203Cは分周比2,3,6から選ぶことができるので、YM2612も同じと考えて、分周比3が使われているとすると、2000/3=667KHzの内部クロック周波数になっているものと思われる。
- 257ページ ドライブコントロールレジスタ HDISELビット
誤:0=サイド1
1=サイド0
正:0=サイド0
1=サイド1
-
262ページ
誤 IMSK(bit6) 0:割り込み許可 1:割り込み禁止
正 IMSK(bit6) 1:割り込み許可 0:割り込み禁止
- 303ページ
1024x512の画面モード (画面モード3と4)は球面スクロール可能。円筒スクロールという記述は誤り。
- 369ページ
図ではスプライトBUSYの開始はVSYNC終了時と解釈できるが、実際はVSYNC開始と同時にスプライトBUSYとなる。
FM TOWNS 2MX実機で計測したところ、スプライト画面消去にかかる時間は約30usだったので、誤差を考えるとおそらく32usという図の記述は正しい。スプライト一個あたりの所要時間は2MXでは57usだった。MXでは先代TOWNSよりもスプライトが高速化しているという情報があるので初代機では図にある通り75usだったのかもしれない。
スプライト転送終了時から次のVSYNCのRising Edgeまでの間はスプライトREADYとなる。このため、スプライト転送終了が次のVSYNC Rising Edge直前だった場合、スプライトREADY期間は非常に短くなる場合がある。逆に、VSYNC開始直後にスプライト転送が終了するとほぼCRTCが一画面を描画する期間(1/60秒)スプライトREADYとなる。
- 375ページ
誤 ES:DSI
正 DS:EDI
- 412ページ
音程の説明。表では値の範囲は24~119とあるが、TOWNS OS V2.1 L51のTBIOSで確認したところ12~107。範囲外ではパラメータエラーとなる模様。
-
415ページ
ピッチベンドの説明。入力DXは-8192~+8191で正しいが、FM音源はF-NUMBERを616~1232の範囲で設定、入力値±13毎に1上下する計算で-8008~+8008 (616*13=8008)となる。±8008に達した時点で1オクターブ分変化しそれ以上それ以下の値にしてもそこから変化しない。また上記412ページとは違い、ここでの設定値がBLOCK 0・F-NUMBER 616以下もしくはBLOCK 7・F-NUMBER 1231以上の範囲外となってもパラメーターエラーを返さずその上下限値が設定されるので、キーの音程が低い(もしくは高い)と変化がないように聞こえてしまう。 - 838ページ 音声入力割り込み許可フラグの説明
誤:0=割り込みを発生させる.
正:1=割り込みを発生させる.
- 840ページ 新PCM音源トリガレベルレジスタの各ビット名称
・レジスタ表が1つ前の録音ピークモニタレジスタの物となっている
コメント
最新を表示する
>> 返信元
本当だ、タイピングミスですね。
記載しておきます。
内容のエラーではないですが、130ページに誤植がありますね。
図I-4-33 オフセットレジスタ値の「アダレス値」への加算
となってます。
>> 返信元
自己レス
71071のデータシートにDMAAK0~DMAAK3出力が有って、外部側ではどのDMAのアクノリッジなのかは判るようになってました。まともな設計なら後は機器側のコントローラチップが終了を判断して、完了信号をDMACのEND入力に入れているはずですね。
問題はCDCで、TOWNSの場合CDCの詳細が公開されていないのでデータシートが無く、実機をバラして配線から追う他無いのかもしれません。 モデル2なら汎用TTLが多く使われており集積度が低いので向いているかも知れません。
>> 返信元
コメントありがとうございます!FM-7,77AV再稼働プロジェクトではXM7に大変お世話になりました。RS232Cが非常に役に立ち、カーネギーメロンのイベントでも好評でした!津軽弁はスロットごとにタイマーを分けていないので全部オン・オフしかできませんが、もう少し津軽本体で動作するソフトを増やしたらまた再現性のアップを図りたいと思っています。よろしくお願いします!
>> 返信元
原文ではエンベロープ変調をカットするような表現になっていて非常に誤解を招きやすいのですが、主にCh.3の効果音モードで利用するスロットごとにキーオン/キーオフをするためのビットはレジスタ$28のbit7~4にあります(キーオフ時にリリースがかかるのでエンベロープ変調はかかっているのですが)。ただし、現状ではスロットごとのキーオン/キーオフに津軽(津軽弁)が対応していないので、Ch.3の効果音モードを使っているMSV/PMDFMデータでは後から設定されたキーオン/キーオフが全スロットに反映されるので正常な演奏になりません。ご参考までに。
>> 返信元
そうですね、掲示板の内容を読むと読み込むべきデータ量よりも多いカウント値を設定しておいてEND入力でDMACがサービスを終了してTCビットを変化させることを選定としたコードのようで・・・「ソフトウェアの作りとしてどうよ」と言う印象です。
END/TC入力端子は71071に1つしか無いんですよね、チャネルは4つ有るので,SCSIをCPUで読み出しながらCD-ROMをDMA転送させた場合等にどうやってEND入力の制御を行っているのか解らない状態です。
もう少しデータシートを読み込んでみます。
>> 返信元
原文を見る限り変調をカットするビットがどこかに存在するような表現ですね。
FM音源のデータシートやアプリケーションノートを見てもその様なビットは存在せず、また、誤りの多い資料で有ることが指摘されているので、当時の音源ドライバを作成された方の苦労がうかがえます。
DOS6ではTerminal Countに達しないのにTCビットをテストしているのでDMACのEND入力は使っていると見て間違いないと思います。ENDと言えば謎なのがCD-ROMのDMAEですね。TCビットは常に出ているわけではないようだしCD-ROMのDMAEビットだけ読むことはできなさそうなのでDMAから終わったと通知があったときに立つのか、CDCが終わったはずと判定して立ててるのか気になってます。
たしかに、TLがスイッチの意味だったと解釈すれば間違いではないですが、スイッチを持っていると書いてあると僕は、スイッチがオフの場合はエンベロープを適用しないで常に最大変調度が次のスロットにかかると解釈してしまった上に(「エンベロープは振幅の時間的変化を与えるものですから最後のスロットにだけ与えるのが一般的」が追い打ちだった)別にフラグがあるものと思って相当な時間をかけて資料を探し回ったので、少なくとも誤解を招く表現だとは思いませんか?
>> 返信元
pp.194の正誤ですが、音関係に詳しくないので間違っているかも知れませんが
原文の「・・・スイッチを持っているので、スロットごとにエンペローブ変調をかけるかどうかを選択できます」は、「スロットごとにエンペローブパラメータを設定できる」と誤っているとすれば、問題ないのでしょうか?
TLはトータルレベルなので、エンペローブとは関係ないような気がしますし、スロットごとに変調をかけれるかかけれないかと言うことであれば、設定が分かれている事から個別に設定を変えれば良いのではと思うのですが
>> 返信元
情報の方、有り難うございます。
I/OPort ABhのTC3-0の項目ですが、upd7107の日本語データシート上だと「DMAサービス中にターミナルカウントが発生するか,END入力があれば該当bitがセットされる」と有ります。
END入力は7107のEND端子(END入力兼TC出力)ですがTownsの回路としてEND入力を使用しているかどうか判らないのでそのように記載しておきます。
↓確認しました。
## pp.75
### 表I-3-20
TC3-0の解説「DMA転送が指定されたバイト数終了したかどうかを示す。」は誤りで、DMAC 71071データシートによると、"The register has DMA request states and terminal count or ~END information"とあるので、正しくは「DMA転送が指定されたバイト数終了したか、あるいはDMAに指定されたバイト数に達しなくても転送が終了したかを示す。」
なるほど!そうなんですね!PLAY"O4C"をUNZと津軽で比べてみたのでFM音源側のF-Numberは1038で正しいと思います。しかしPCM側が合わないですね。1倍のとき19.2KHzで鳴らしているはずなのですが。
>> 返信元
情報有り難うございます。
pp.212-表I-5-37 については、音階という表現なのでMMLではなく一般的な音階を表す音名だとすると
問題は無いように思います。MML上でのO4Aは音名だとA4と表記するようです。
ただし、上記のA4(O4A)のF-Numberが幾つなのか・・・・・ このあたりはヤマハの資料を含め、過去の
機種の資料に関しても様々なようですね。どうすればいい加減な資料に振り回されずにキッチリと判明
するのか・・・・ オシロで波形を見るしか無いのでしょうか?
EUPファイルを演奏させるとFMとPCMで音程が合わない問題を調査中ですが、多分↓も誤情報です。
pp.212
表I-5-37
そもそもMMLとしてA4は変で、多分O4Aと書きたかったのではないか。
この表だとO4Aに対応するF-Numberは1153のはずだが、F-BASIC386で
PLAY "O4A"
とするとF-Numberは1038が書き込まれる。Sega Genesis Software Manualでは"A"に対応するF-Numberは1037とあるので、多分FM TOWNSテクニカルデータブックの間違い。
おお、確かに!メモしたということは多分何かが動かなくて16ビットアクセス可能にしたらたまたま動いたけど、今コードみたらたしかにバイトアクセスになっているところを見るとやっぱり僕が何か間違ってたから直したということがあったのかもしれません。ご指摘ありがとうございました!
>> 返信元
有益な情報を有り難うございます
1つだけ確認をさせてください。PITのカウントレジスタですが、PIT内部では16bitですが外部に出ているのは
8bitで、コントロールレジスタのRL1,RL0ビットの指定により16bitでカウント値をライトする時は下位,上位の
順で8bitずつ同じカウントレジスタにアクセスするようです。
従って、赤本の78ページは間違ってはいないのではないでしょうか?
一応、僕もまとめたやつをアップロードしてあります。よかったらこちらにも転載してください。
https://github.com/captainys/TOWNSEMU/blob/master/FMTOWNS_Technical_Databook_Errata.md
とかいいながら、77ページの問題はスカッとメモするのを忘れてましたが(^_^;)
>> 返信元
有益な情報を有り難うございます。
今更ながら赤本を詳細に見ていくとチラホラと記載漏れや誤記は確かに有りますね。
誰がその資料を必要としているか判りませんが、半分は自己満足ともう半分は正確な情報を未来に残す事を
建前にコツコツと積み上げていこうと思います。
>> 返信元
そこは、僕もひっかかりましたね。ずいぶん前に実装したので記憶が薄れてますが、timer.cppのTonwsTimer::Resetのコメントにそのように書いているので、その解釈で合っているのだと思います。
NG表示方式
NGID一覧