FMTOWNSテクニカルデータブック

ページ名:FMTOWNSテクニカルデータブック

FMTOWNSテクニカルデータブック


著者 : 千葉憲昭氏 

出版社 : アスキー出版局

・通称 "赤本"

・改定3版まで発行されているが、改定3版以降に発売された機種(E系,H系,VTowns系)については当然ながら未記載

 

TOWNSユーザーにとってはバイブル的な存在では有るが、誤記も多いとの情報はあるがその正誤表をまとめたページの存在は知る限り無いので、このページを作成しました。

情報をお持ちの方は追加していただくか、コメント欄にコメントを残してください。

 

正誤情報

  • 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のブートセクタ解析の結果による)
     
  • 130ページ図I-4-33
    誤:オフセットレジスタのアダレス値への加算
    正:オフセットレジスタのアレス値への加算
     
  • 183ページ 表I-5-8 FDLデータレジスタの重みづけ表
    誤:ビットD1,D0の重みが、それぞれ1^-10,0^-11
    正:ビットD1,D0の重みが、それぞれ2^-10,2^-11
     
  • 257ページ ドライブコントロールレジスタ HDISELビット
    誤:0=サイド1
        1=サイド0
    正:0=サイド0
        1=サイド1
     
  • 838ページ 音声入力割り込み許可フラグの説明
    誤:0=割り込みを発生させる.
    正:1=割り込みを発生させる.
     
  • 840ページ 新PCM音源トリガレベルレジスタの各ビット名称
    ・レジスタ表が1つ前の録音ピークモニタレジスタの物となっている

コメント

返信元返信をやめる

※ 悪質なユーザーの書き込みは制限します。

最新を表示する
WINDY ID:MmM3OWY4Z
>> 返信元

本当だ、タイピングミスですね。
記載しておきます。

返信
2020-09-16 09:55:38

山川機長 ID:NmFmNjA3Z

内容のエラーではないですが、130ページに誤植がありますね。

図I-4-33 オフセットレジスタ値の「アダレス値」への加算

となってます。

返信
2020-09-15 00:35:12

WINDY ID:ZDU5OTdjM
>> 返信元

自己レス
71071のデータシートにDMAAK0~DMAAK3出力が有って、外部側ではどのDMAのアクノリッジなのかは判るようになってました。まともな設計なら後は機器側のコントローラチップが終了を判断して、完了信号をDMACのEND入力に入れているはずですね。
問題はCDCで、TOWNSの場合CDCの詳細が公開されていないのでデータシートが無く、実機をバラして配線から追う他無いのかもしれません。 モデル2なら汎用TTLが多く使われており集積度が低いので向いているかも知れません。

返信
2020-08-08 22:30:22

山川機長 ID:NTkxMGQ2Z
>> 返信元

コメントありがとうございます!FM-7,77AV再稼働プロジェクトではXM7に大変お世話になりました。RS232Cが非常に役に立ち、カーネギーメロンのイベントでも好評でした!津軽弁はスロットごとにタイマーを分けていないので全部オン・オフしかできませんが、もう少し津軽本体で動作するソフトを増やしたらまた再現性のアップを図りたいと思っています。よろしくお願いします!

返信
2020-08-08 13:03:29

たけがみりう ID:ZGE4M2M1M
>> 返信元

原文ではエンベロープ変調をカットするような表現になっていて非常に誤解を招きやすいのですが、主にCh.3の効果音モードで利用するスロットごとにキーオン/キーオフをするためのビットはレジスタ$28のbit7~4にあります(キーオフ時にリリースがかかるのでエンベロープ変調はかかっているのですが)。ただし、現状ではスロットごとのキーオン/キーオフに津軽(津軽弁)が対応していないので、Ch.3の効果音モードを使っているMSV/PMDFMデータでは後から設定されたキーオン/キーオフが全スロットに反映されるので正常な演奏になりません。ご参考までに。

返信
2020-08-08 09:23:29

WINDY ID:ZjBkNjAyZ
>> 返信元

そうですね、掲示板の内容を読むと読み込むべきデータ量よりも多いカウント値を設定しておいてEND入力でDMACがサービスを終了してTCビットを変化させることを選定としたコードのようで・・・「ソフトウェアの作りとしてどうよ」と言う印象です。
END/TC入力端子は71071に1つしか無いんですよね、チャネルは4つ有るので,SCSIをCPUで読み出しながらCD-ROMをDMA転送させた場合等にどうやってEND入力の制御を行っているのか解らない状態です。
もう少しデータシートを読み込んでみます。

返信
2020-08-06 23:43:53

WINDY ID:ZjBkNjAyZ
>> 返信元

原文を見る限り変調をカットするビットがどこかに存在するような表現ですね。
FM音源のデータシートやアプリケーションノートを見てもその様なビットは存在せず、また、誤りの多い資料で有ることが指摘されているので、当時の音源ドライバを作成された方の苦労がうかがえます。

返信
2020-08-06 23:11:39

山川機長 ID:NTNlOTg4N

DOS6ではTerminal Countに達しないのにTCビットをテストしているのでDMACのEND入力は使っていると見て間違いないと思います。ENDと言えば謎なのがCD-ROMのDMAEですね。TCビットは常に出ているわけではないようだしCD-ROMのDMAEビットだけ読むことはできなさそうなのでDMAから終わったと通知があったときに立つのか、CDCが終わったはずと判定して立ててるのか気になってます。

返信
2020-08-06 21:50:58

山川機長 ID:NTNlOTg4N

たしかに、TLがスイッチの意味だったと解釈すれば間違いではないですが、スイッチを持っていると書いてあると僕は、スイッチがオフの場合はエンベロープを適用しないで常に最大変調度が次のスロットにかかると解釈してしまった上に(「エンベロープは振幅の時間的変化を与えるものですから最後のスロットにだけ与えるのが一般的」が追い打ちだった)別にフラグがあるものと思って相当な時間をかけて資料を探し回ったので、少なくとも誤解を招く表現だとは思いませんか?

返信
2020-08-06 21:43:41

WINDY ID:Njk0MjQ3Y
>> 返信元

pp.194の正誤ですが、音関係に詳しくないので間違っているかも知れませんが
原文の「・・・スイッチを持っているので、スロットごとにエンペローブ変調をかけるかどうかを選択できます」は、「スロットごとにエンペローブパラメータを設定できる」と誤っているとすれば、問題ないのでしょうか?
TLはトータルレベルなので、エンペローブとは関係ないような気がしますし、スロットごとに変調をかけれるかかけれないかと言うことであれば、設定が分かれている事から個別に設定を変えれば良いのではと思うのですが

返信
2020-08-06 13:20:38

WINDY ID:Njk0MjQ3Y
>> 返信元

情報の方、有り難うございます。
I/OPort ABhのTC3-0の項目ですが、upd7107の日本語データシート上だと「DMAサービス中にターミナルカウントが発生するか,END入力があれば該当bitがセットされる」と有ります。
END入力は7107のEND端子(END入力兼TC出力)ですがTownsの回路としてEND入力を使用しているかどうか判らないのでそのように記載しておきます。

返信
2020-08-06 11:49:56

山川機長 ID:NTNlOTg4N

↓確認しました。
## pp.75
### 表I-3-20
TC3-0の解説「DMA転送が指定されたバイト数終了したかどうかを示す。」は誤りで、DMAC 71071データシートによると、"The register has DMA request states and terminal count or ~END information"とあるので、正しくは「DMA転送が指定されたバイト数終了したか、あるいはDMAに指定されたバイト数に達しなくても転送が終了したかを示す。」

返信
2020-08-06 09:53:43

山川機長 ID:NGYwMzdmO

なるほど!そうなんですね!PLAY"O4C"をUNZと津軽で比べてみたのでFM音源側のF-Numberは1038で正しいと思います。しかしPCM側が合わないですね。1倍のとき19.2KHzで鳴らしているはずなのですが。

返信
2020-07-20 03:03:35

WINDY ID:ZjVmMTQwN
>> 返信元

情報有り難うございます。
pp.212-表I-5-37 については、音階という表現なのでMMLではなく一般的な音階を表す音名だとすると
問題は無いように思います。MML上でのO4Aは音名だとA4と表記するようです。
ただし、上記のA4(O4A)のF-Numberが幾つなのか・・・・・ このあたりはヤマハの資料を含め、過去の
機種の資料に関しても様々なようですね。どうすればいい加減な資料に振り回されずにキッチリと判明
するのか・・・・ オシロで波形を見るしか無いのでしょうか?

返信
2020-07-19 23:25:47

山川機長 ID:Zjk5MDViN

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テクニカルデータブックの間違い。

返信
2020-07-19 05:05:15

山川機長 ID:NjI2MjYxN

おお、確かに!メモしたということは多分何かが動かなくて16ビットアクセス可能にしたらたまたま動いたけど、今コードみたらたしかにバイトアクセスになっているところを見るとやっぱり僕が何か間違ってたから直したということがあったのかもしれません。ご指摘ありがとうございました!

返信
2020-07-16 21:27:18

WINDY ID:MTZjZGZiY
>> 返信元

有益な情報を有り難うございます
1つだけ確認をさせてください。PITのカウントレジスタですが、PIT内部では16bitですが外部に出ているのは
8bitで、コントロールレジスタのRL1,RL0ビットの指定により16bitでカウント値をライトする時は下位,上位の
順で8bitずつ同じカウントレジスタにアクセスするようです。
従って、赤本の78ページは間違ってはいないのではないでしょうか?

返信
2020-07-16 17:49:30

山川機長 ID:NWZjMzE4Z

一応、僕もまとめたやつをアップロードしてあります。よかったらこちらにも転載してください。

https://github.com/captainys/TOWNSEMU/blob/master/FMTOWNS_Technical_Databook_Errata.md

とかいいながら、77ページの問題はスカッとメモするのを忘れてましたが(^_^;)

返信
2020-07-15 10:15:47

WINDY ID:NDhlYWFmN
>> 返信元

有益な情報を有り難うございます。
今更ながら赤本を詳細に見ていくとチラホラと記載漏れや誤記は確かに有りますね。
誰がその資料を必要としているか判りませんが、半分は自己満足ともう半分は正確な情報を未来に残す事を
建前にコツコツと積み上げていこうと思います。

返信
2020-07-15 09:50:43

山川機長 ID:NWZjMzE4Z
>> 返信元

そこは、僕もひっかかりましたね。ずいぶん前に実装したので記憶が薄れてますが、timer.cppのTonwsTimer::Resetのコメントにそのように書いているので、その解釈で合っているのだと思います。

返信
2020-07-15 04:21:33