今回「ソフト」レビューじゃないのは気にするな。/次(未稿)

+PCM( プラスピーシーエム )

@ソフトレビュー@MSXセクション@鈴見咲サイト

注:本文中に平松明夫氏の名前がでてきますが、平松氏の方では今後+PCMのサポートを一切行わず、また平松氏に+PCMに関する質問はしないようにとのことです。(1999/10/27追記28掲載30再修正)

フロントライン製作・販売/1999年8月〜/梅セット3000円より。スピーカ、アダプタなどを添付したセットも有。

情報が欲しい。

先のMSX電遊ランド(1999年8月21日、22日)にて実質初公開となり、MSX用PCMハードとしては久々の新顔ということになった+PCM。turboRのそれと違って発声時にMSXが装置につきっきりでなくてもよい、という面白そうなうわさが流れてくるものの肝腎の仕様がいつまで経ってもフロントラインさんの頁には掲示されない。なんでも電遊の後始末と次の MSX WORLD Expo'99 の準備に追われ、自分の同人としての活動がままならない、という有り様らしいのだ。

んで。わたしの場合、9月17日に申し込んで、到着したのがつい先日の10月16日。何でもテクニカルパンフレット(13頁構成の技術資料)の印刷が遅れたとか。同人には珍しい?後払い(希望により着払いでも可)通信販売の形をとっており、お金を払って待ちぼうけという不安はない。が、納入時期の予定もわからずに一ヶ月も待つのはやっぱりちょっとアレだ、と思うがどうか。

それはともかく、現物がすでに私の手元にあるわけで、んでもってテクニカルパンフレットの末尾に書いてあることには「本書の著作は A.Hiramatsu 氏が所有しておりますが、いかなる方法においても無断で複写、複製することは了承されております」とのことなので、そこから適当にご紹介。

基本仕様

+PCM Ver. 1.00 スペック
メインユニットSCENIX社製SX18AC/DP(50MHz)
入力データ形式4ビットADPCM(SX-ADPCM方式)
出力精度7ビット
再生レートモノラル6kHz,7.68kHz,9.6kHz,12kHz
モードシングルモード、ミックスモード(6kHzのみ)
バッファ容量4ビット×224個
電源定格9V 250mA〜300mA
スピーカ、イヤホン出力8Ω、耐久入力2W以上推奨

パンフレットの最初にでている表はここにあげたとおり。表の外のところに書いてあって気になりそうなところを並べておくとこんな感じか。

再生性能

ステレオの出力ができないのは表のとおり。シングルモードは4種の周波数をとれるが、ミックスモードは6kHzのみ。ミックスモードというのはシングルモード6kHzのデータ2系統を平行に(1単位ずつ交互に)与えるとそれを+PCM側で合成出力してくれるというもの。合成比率は8段階で指定可能。

入力データ形式

+PCMに送信するデータはテクニカルパンフレットに記述されているデータ変換を行わなくてはなりません。やってみたところ少々面倒ですが難しいわけではないです。このデータ変換により、turboRの圧縮無しPCMデータが真正直に半分のサイズになります。基本的に不可逆圧縮なので、データの劣化がどれくらいか気になるところですが、こればっかりは自分で確認してもらうしかないかな。私の第一印象では「録音設備を気にした方がいい」ような気がします。
参考までに+PCM用データ→turboR用データの逆変換はどうかというとこちらは順変換より手順が少し減って楽になります。+PCMがない場合にリアルタイムで逆変換して・・・ということも考えられなくはないです。リアルタイムはturboRでないと無理か。

電源

+PCM 付属品一覧
セット名付属品
松改ACアダプター、スピーカ、モノラルミニジャック
ACアダプター、スピーカ
ACアダプター、モノラルミニジャック
モノラルミニジャック

表には書かれてないですが、センターがマイナスで、9Vで250mA以上の出力をするアダプタがあればOK、ということらしいです。電圧(9V)は同じでなくてはならないけど電流(250mA)はこれ以上を満たしていればいいと。ここらへんの話は自信がないので心配な人はアダプタの付いている「梅セット以外」を買いなさい(おいおい

スピーカ・イヤホン出力

スピーカとしてはどうなのか知りませんが(梅セットだし)、イヤホンとしては結構大きい出力をしてくれるみたいです。初めて使うときはいったんツマミをカチッと音がする所まで回して(これがOFFになるようです)そこから少しずつ音量を上げて調べていくというオーディオの基本手順をちゃんと踏みましょう。いやマジで。

MSX本体のとの接続

表の中に大事なことが書かれてないような気がしますけど(^^;
+PCMはプリンタポートを介してデータを送信します。送信間隔は+PCMリセット指定時100ミリ秒、モード切替時3μ秒、シングルモード時2μ秒、ミックスモード時2.5μ秒ということになっています。従って、リセット時の100ミリ秒以外は基本的にウエイト処理なしでデータ流しっぱなしでOKのはずです。

といいますのは、z80Aが4MHzで動いていたとしても最短のI/Oアクセス命令である IN A,(port) / OUT (port),A で3μ秒かかってしまいますし、turboRのR800モードの時はプリンタポートのアクセスに対して 4.48μ秒以内の連続アクセスがあるとシステムがウエイトをかけてしまうからです。
将来のMSX規格(?)、あるいはすでにある通常のz80Aとは違うモードで動作する機種のことを考慮する場合は話が変わってきますので念のため。

付属ディスク

ディスクの中身をみると一行のテキストファイルが3つだけあってなんじゃこれは?ということになってしまいますが、これはM改さんの PLESURE HEARTSの体験版。市販ソフトよろしくディスクを入れてリセット、で起動するものなので不良ディスクと勘違いしないように(しないか)
もっとも、MSX World Expo'99 では同ソフト完成版が販売されることになってるのでその際付属ディスクの中身はどうなるのかは不明。

対応ソフトを作るにあたって

必要な情報はすべてテクニカルパンフレットの中に書いてあるので、あとはマシン語プログラミングをできるだけの資料とソフトと実力があれば問題なく扱うことができます。現時点では付属ソフトの中に録音ツールとかデータコンバートツールとか実際に再生のテストを行うソフトとかがないのが困り者ですが、その辺は今後の動きを見守ることにいたしましょう。私?とりあえず turboR のデータを変換してその場で鳴らすサンプル組んだだけです。ハイ。

ここでは現実にプログラムを組んだ場合どんなふうになるかをちょいと考察しておきます。

データサイズはどうなる?

転送データの個数
モード1/60秒あたりのデータ数1秒あたりのバイト数
シングル12kHz200個(100バイト)6000バイト
シングル9.6kHz160個(80バイト)4800バイト
シングル7.68kHz128個(64バイト)3840バイト
シングル6kHz100個(50バイト)3000バイト
ミックス6kHz200個(100バイト)3000バイト×2セット

表でご覧いただいているとおりなんですけど、実際に効果音として使う場合は大半が1秒未満、いくつかが1秒を超えるといった状態になるでしょうか?言葉をしゃべらせるともっと長い(サイズの大きい)データになるでしょう。

+PCM用に変換されたデータは1個あたり4ビットなのですが、実はこのうち「8」だけは現れてきません(-7〜+7の変位データなので-8相当のデータが現れない)。これを上手く使ってデータをリアルタイム復元可能な程度に圧縮できればもう少し能率のいい数字が出ると思います。これは結構可能性を秘めてるといっていいかも。第一印象的私見として。

どんなプログラムになるのか?

メインメモリ、あるいはメモリマッパ対応RAMにデータが置いてある場合は話が簡単です。単純にタイマ割り込みで上記の表のバイト数だけ転送すればいいのです。バッファサイズ(最初に挙げた表にあります)が224個とのことなので、シングル6kHzの時以外は2/60秒分のデータを送ったりすると正常に再生されなくなるので念のため。

ちょっと話がややこしくなるのがVRAMにデータを置いているときですね。
MSXでは基本的に割り込み期間中のVRAMアクセスはない、という設計になっています。BIOSのVRAMアクセスルーチンなんかはそれを前提として組まれていますので、割り込み処理内でVRAMを読み書きした時点で割り込みルーチン側はいいのですがメインルーチン側がめちゃくちゃになってしまいます。

いくつか対処法がなくもないのでそれを書いておきましょう。

  1. BIOS依存をしない。

    つまり、VRAMアクセスルーチンは自前のものを使い、その自前のルーチンではVRAM読み書きアドレス設定からデータの入出力が完了するまで割り込みを許可しないようにつくればとりあえず誤動作は起きません。ただ、常時大量にVRAMへ読み書きする場合、割り込み禁止期間が長くなりすぎては元も子もないのでそこをどうするかが問題となります。一定量ごとに割り込み許可して次の読み書きではもちろんアドレス設定からやりなおすとか。

  2. VDPコマンドを使用し、アクセス方法の住みわけを行う。

    VDPコマンド自体はVRAMの直接読み書き処理とはまるっきり別系統で行われるので、メイン側ではVDPコマンドでしかVRAMアクセスしないような作りになっていれば、割り込み側でVRAM直接読み書きを行っても何ら差し支えないわけです。もちろんこの場合でもBIOSは使わない方がいいでしょうけど。

  3. メインルーチン側はいったんVRAM上のデータをメインRAM上のバッファに送り、割り込みルーチンはそのバッファから+PCMへの送信を行う。

    これが一番現実的で、なおかつ若干面倒な方法といえるでしょう。メイン側の監視部は割り込み処理の出力状況に合わせてVRAMからバッファに書き込んでおくので、1/60秒以内に1度は呼び出されるような構造にするか、バッファを大きくとっておいてバッファ切れが起こらない内に監視部が呼び出されるようにする必要があります。そのバッファの大きさというのは、当然先の表の真ん中の列(「1/60秒あたりのデータ数」のバイト数)をもとに決めることになります。

SZMYP/MP/RP/GPのように多重割り込みを前提としたソフトとの共存は?

タイマ割り込みの処理を行う際に、以下のような点に注意してプログラムを組めば大丈夫のはずです。

  1. SZMxPよりも先に+PCMの処理を行うようにすること
  2. +PCMの処理自体が多重割り込みの発生を想定しているか完全割込み禁止になっていること
  3. さらに先の3つ目の手法において、バッファをさらに大きなものにしておくこと(多重割り込みの分だけメインルーチンの監視部に処理がわたらないことになるから)

PLEASURE HEARTS のどこで音が鳴るか?

これはおまけ。一応確認のため。+PCMがない場合は内蔵音源で効果音が鳴るのですが、+PCMがある場合でも内蔵音源による効果音を使ったり、両方を同時に使ったりしていることがあるようです。

音声系統の一本化

これもおまけ。スピーカをいくつも並べることに制約や苦痛を感じない人は無視してOK。
+PCMの出力が結構大きいというのは最初に書きましたが、このために内蔵音源の音と単純なケーブルで合成しようとすると+PCM側の音しか聞こえなくなる現象が発生するようです。で、この場合、+PCM側のGNDではないほうに1kΩの抵抗を挟んでおくと、いいあんばいになります。このあたりも根拠があるともないとも言い難い程度の信憑性なのでその筋に詳しい方だれか教えて下さい(^^;

簡易ラジオ

もうどうでもいいお話。
長めのコードがアンテナの代わりになってどこぞの音声が入ってしまってます。向きを変えたりすることであっさり解決するようですが、こだわる方は遮蔽でもなんでもやってみてください。

ご意見ご感想お待ちしてます。

まずいところがあったら速やかに報告されたし>特にフロントライン各位

なお、この記事は+PCMの製品に含まれるテクニカルパンフレットをもとに私(鈴見咲君高)が独自に書いたものであり、基本的にフロントラインさんが直接関与するものではありません。同時に私とフロントラインさんとは客と売り主との関係でしかなく、当然+PCMのサポートは私には関係のないことですので念のため。


/次(未稿)
@ソフトレビュー@MSXセクション@鈴見咲ページ鈴見咲ホームページへ
(C) 1999 FRONTLINE / A.Hiramatsu
Copyright (C) 1999 Suzumizaki-kimitaka
メールはこちらまで( suzumizaki@excite.co.jp / suzumizaki@geocities.co.jp ) / 感想フォーム+掲示板入り口