初代パソピアの音楽機能

初代パソピアの音まわりの機能について図書館にある本から調べてみました。実機もマニュアルも持っていないので、書籍からの情報の寄せ集めです。一番最後に結論が簡潔に書いてあります。

■ ハード構成

書籍「パソピアの内部構造」から引用です。この本と実機があればエミュレータが作れるくらい、ハードウェアの構成だけではなく、BASICインタプリタの中間言語やワークメモリ等々、内部構造が詳しく書かれています。

回路図

Z80 CTCの出力1bitがスピーカにつながっているようです。実際の回路だとアンプか何かが入ってるんじゃないかと思いますが。Z80 PIOの役目は、出力のON/OFFです。

DEVICE PORT 備考
Z80 PIO 30h-33h A-bit7
Z80 CTC 28h-2Bh CH1タイマモード・割込なし

■ 書籍:パソピアの内部構造

この本によると、パソピアには、OA-BASICとT-BASICの2種類のBASICが供給されていたようです(購入時にどちらかを選ぶのかな?)。どちらのBASICもROMカートリッジとして供給され、あとから別のBASICに差し替えることができたようです。
型番PA-7010のパソピアはT-BASIC、PA-7012はOA-BASICを搭載していました。

音周りについての記述は…

  • OA-BASICの中間コード一覧をみると、音に関する命令は「BEEP」(中間コードA6h)のみ
  • T-BASICの中間コード一覧をみると、「SOUND」と「PLAY」があるのですが、「BEEP」はありません

また、T-BASICのインタプリタメモリ一覧で音に関係ありそうな箇所を引用すると

1813H 音発生 音程Areg(0-107), 長さDEreg:1-FFFF
186BH 周波数テーブル  
5458H SOUNDエントリ  

というのがありました。BEEPはOA-BASIC用ですから、T-BASICのインタプリタに載ってないのはわかるのですが、PLAYがないのです。これは、T-BASICの中間言語とジャンプテーブルアドレス表でも、

中間コード ROM版ver1.0 ROM版ver1.1 DISK版ver1.0
PLAY D6 **** ****  
SOUND D0 8D 536E 5458 645C

となっていて、ROM版T-BASICではPLAY命令のエントリアドレスが記載されていないのです。PLAY命令はROM版T-BASICには実装されていないみたいですね。

ところで、ちょっと話がそれますが、OA-BASICはTOSHIBAが、T-BASICはMicrosoftが作ったそうです。また、それぞれのBASICには、DISK版が存在したようです。
OA-BASICのROMがささった状態でパソピアを起動し、直後にディスクからOA-BASICを起動するような使い方もできたようです。
また、T-BASICにはROM版Ver1.0とROM版Ver1.1がありました。音周りの相違点は

  • SOUNDの休符指定(SOUND0,n)
  • ファ音の周波数を修正

のようです。

■ 書籍:PASOPIA パソコンプログラミング500題

SOUND命令

SOUND 音程,長さ
音程は0から82
長さは0から65535の数で1/64秒単位です。従って64で1秒です。

音程表

オクターブ
1 2 3 4 5
12 24 36 48 60
ド# 13 25 37 49 61
14 26 38 50 62
15 27 39 51 63
16 28 40 52 64
ファ 17 29 41 53 65
ファ 18 30 42 54 66
19 31 43 55 67
20 32 44 56 68
21 33 45 57 69
22 34 46 58 70
23 35 47 59 71

PLAY命令

この本では「PLAYはディスクベーシックのみで有効です」と記載されています。ROM版T-BASICのインタプリタにエントリアドレスが無い理由はこういうことなのですね。
PLAYの書式は、他のBASICのPLAY命令と同じようなものです。

T 速さ 32-255 省略時はT120 / TnはL4の長さを1分間にn回数える速さ
O オクターブ 0-6 省略時はO3
L 長さ 1-64 省略時はL4
R 休符 1-64 省略時はR4

音程指定

C
半音 C#,C+,D-
D
半音 D#,D+,E-
E
ファ F
半音 F#,F+,G-
G
半音 G#,G+,A-
A
半音 A#,A+,B-
B

■ 雑誌:アスキー1982年10月号

パソピアのLOAD TESTの記事が掲載されています、が、音周りにはほとんど触れていません。OA-BASICではBEEP命令があるという程度の情報です。

■ 書籍:OA-BASICの徹底活用方法

BEEP命令で約1秒のブザー音が出るという記述があります。それと、

「パソピアに準備されているシステムフラグは次のようになっています。このフラグに対して値をセットするには、SFLG文[SFLG f,n]を使い、フラグの値を参照するにはFLAG関数[FLAG(n)]を使います」

という説明がありました。フラグ番号は0から13で、番号ごとに機能が割り当てられているようです。
例えば、カーソルの点滅/消去は、フラグ番号0番の値を0にすると消去、1で点滅といった設定で、フラグ番号9番がサウンドフラグになっています。0でスピーカからの音を停止、1で出力開始です。おそらく、キーボードのキーを押した時のクリック音の事だと思います。

■ 書籍:T-BASICプログラミング

ディスク版T-BASICを使ってT-BASICの機能を説明しています。

本文から一部引用すると

パソピアは、ブザー音を発生させることができますが、それ以外にMML(ミュージックマクロ言語)が用意されていますので、音楽機能を楽しむ事が出来ます」

と書かれています。この本だけ、MMLとはっきり書いてありました。

・ブザー PRINT CHR$(7)

T-BASICにはBEEP命令がないのですが、これで代用できるのですね。

SOUND 音程,長さ

音程 0-82(0の時は休み)
長さ 0-65535(1/64秒単位)

PLAY “MML言語”

速さ T 32-255
オクターブ O 0-6
長さ L 1-64
休符 R 1-64
間接指定 X<文字変数名>; T =

L =

A-G =<値変数名>

O =

R =

間接指定は、説明するより実例を見た方が速いと思います。

10 A$="L18N3"
20 PLAY "O2L8XA$;"
30 I=4
40 PLAY "L=I"

■ 書籍:雪だるま式 パソピア応用プログラミング教本

音関係の記述を引用すると

「~略~ ディスクBASICでは、PLAYというマクロステートメントがあり、これは、PLAYの後に、音符をつけてやれば、自動的に演奏してくれるので簡単だ。~略~」

と書いてありますから、やはり、PLAYはDISK版T-BASICでのみ使えるようです。

また、SOUND命令の説明があります。この辺は他の本と同じです。

SOUND 音程(0-82),長さ(0-65535 1/64秒単位)

この本の後半はパソピア7について書かれています。拡張されてたPLAY文の説明も書かれているのですが、そこに

「~略~とくに画面が静止して音楽を演奏するなど制約があった」

と記述されていました。初代パソピアのPLAY文はバックグラウンド演奏ができなかったのですね。

■ 書籍:誰にでも使えるT-BASIC入門

PLAY文の説明が書いてあり、ディスク版T-BASICのみ使えるという記述があります。

■ 書籍:コンピュータ・ミュージック入門

パソピアには直接は関係ないのですが、「パソピア7」のSOUND命令の使い方が書いてありました。

SOUND 音程,長さ

音程:11-83 半音刻みに1ステップずつ数字が大きくなる
長さ:1/100秒ステップ(※)で0から65535

この本の記述は怪しいです。他の書籍のパソピアのSOUND命令の説明では長さの単位は1/64と記載されています(10進/16進の勘違い?)。

PSGを直接制御する(レジスタに書き込む)場合は
SOUND=(レジスタ番号,データ)
という書式を使うようです。でも、パソピア7って、SN76489を2個積んでるので、どちらのSN76489かを指定できないと困るんじゃ?

■ まとめ

  • OA-BASICでは、BEEPのみ
  • T-BASICのROM版では、SOUNDのみ使える。PRINT CHR$(7)でBEEPが出せるかも?
  • T-BASICのDISK版では、SOUNDとPLAYが使える。PRINT CHR$(7)でBEEPが出せる

コメントは受け付けていません。