■PC-9801-14 メモ Texas Instruments TMS3631-RI104 搭載 MAMEには TMS36xx として実装されている (TMS3615/TMS3617での使用 / ノーティボーイなど) 参考資料: TI半導体技術資料No.10(1982) トランジスタ技術1983年6月号 P261-273 http://www.retropc.net/mm/archives/1530 ブロックダイヤグラム +--------+ | PA|------------------------------------------+--->Envelop -+--> Audio(R) DB0-7 | | +-------------+ +-+ | --------->| 8255 PC|---->|TMS3631-RI104|---->(ft制御)--->+--+ +---> Speaker | | | +-------------+ A +-+ | | | PB|-------------------------------------|----+--->Envelop -+--> Audio(L) | +--------+ | | | | +-------------+ | +---->|Mask Register|--------------------------------+ | +-------------+ | | +-------------+ +-----------+ +---->| 8253 Out#2|----------| Int Level |-----> INT0,4,5,6 | +-------------+ +-----------+ | +---> ROM --------> ROM DB8-15 I/O: 008E ボード上のポートアドレス設定用ジャンパSW(8bit) * * x7 x6 | x5 x4 0 A2 | x3 x2 x1 x0 | 1 A1 A0 0 A2= 0 ... 8255 1 ... 8253, mask x7〜x4: JPSW(2C2) 上位4bit x3〜x0 : JPSW(2C2) 下位4bit JPSW(2C2)のデフォルトは 00001000 1:オープン 0:ショート JPSW(IL3) : ROMアドレス上位1byteめ (B1-A1ショート: Cxxxx C1-B1ショート: Dxxxx) JPSW(2MI) : ROMアドレス上位2byteめ (0,2,4,6,8,A,C,E) デフォルトは CC000H JP(1L1) : 割り込みレベル MINT1(1-4側) = D7 MINT2(2-3側) = D6 デフォルトはINT6 (1-4,2-3両方ショート) (ショート=1 オープン=0) ※もしかしたらINT5とINT4のジャンパが逆の可能性あり(マニュアル誤記?) 26K音源のジャンパの指定の図もINT5とINT4が逆だった JPSWがデフォルト設定時のI/Oポート 0088 ... 8255 ポートA 008A ... 8255 ポートB 008C ... 8255 ポートC 008E ... 8255 コントロール 0188 ... マスク 018C ... 8253 出力/入力 018E ... 8253カウンタ2/割り込みレベル 0088 R/W 8255 ポートA (エンベロープR側ゲイン: 0で最小) 008A R/W 8255 ポートB (エンベロープL側ゲイン: 0で最小) 008C R/W 8255 ポートC (TMS3631-RI104) bit7:CE bit6:WCLK bit5〜0:DATA 008E W 8255 コントロールポート (コントロールワード=80H) 80H= D7 1 モードセットの意 D6D5 00 グループA : モード0 (基本入出力) 出力ラッチ/入力非ラッチ D4 0 ポートA : Output D3 0 ポートC上位4bit : Output D2 0 グループB : モード0 D1 0 ポートB : Output D0 0 ポートC下位4bit : Output CE = ChipEnable : ONの時に書き込み可能、内部カウンタクリア 書き込みが終わったら0にする WCLK = WriteClock : 鍵データを書き込む (L->H(6us)->L(8us)) (8ch処理後のみ5us,10us) D1〜D4 : 鍵データ(音程) : 半音単位 (0000,1111,1110, 1111は無音, 但し111101は最高音) D5,D6 : オクターブ(00:低 11:高) 0188 W チャンネルマスクレジスタ(Write) (=キーオン(1)/オフ(0)) 規定値は00 bit0からCH1〜CH8 パン: CH1,2 = 中央, CH3,4,5 = 左, CH6,7,8 = 右 CH3-5とCH6-8のみエンベロープが適用できる 018C R/W 8253 出力/入力 018E W 8253 カウンタ#2 R ボードの割り込みレベル設定(1L1)(bit7,6のみ) D7 D6 D7=MINT1(1-4側) D6=MINT2(2-3側) ショート=1 オープン=0 0 0 INT0 0 1 INT5 1 0 INT4 1 1 INT6 (<--出荷時設定) ハードウェアボリューム フィートボリューム(音程ごとのボリューム) f2 ... O7 最も高い音 (CH1はf2のみで構成される。CH2〜8は全てのフィートが使用できる) f4 O6 f8 O5 f16 ... O4 最も低い音 CH1,2 L ... CH1,2の左チャネルミキシング用 CH1,2 4 ... CH1,2の左チャネルミキシング用 VOL ... オンボードスピーカーの音量 ============================================================= ■ジャンパスイッチ (2C2) = I/Oアドレス指定 8 7 6 5 4 3 2 1 9 10 11 12 13 14 15 16 x0 x1 x2 x3 x4 x5 x6 x7 上記の時、I/Oアドレス 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 y y x7 x6 x5 x4 0 A2 x3 x2 x1 x0 1 A1 A0 0 y : 任意(デコードされていない) ※設定値はポート0x008Eから読み出し可能 (1L1) = 割り込みレベル指定 4 3 1 2 1-4 2-3 off off : INT0 off on : INT4 ※INT4指定時は8インチFDD装着用スロットには装着不可 on off : INT5 on on : INT6 ============================================================= ■N88-BASIC(86)でのPLAY命令での演奏方法 [事前準備] ・メモリスイッチの設定 - DIP SW 2-5 を ONにする (メモリスイッチの保存) - SSW4 bit 2を1にする(サウンドボードの使用) PC-9801/E/F/M 等で、ROM BASICからモニタに入れる場合は MON SSW4 00 -> 08 に変更 PC-9801VM以降ではモニタに入るためにはメモリスイッチの設定が必要のため BASICから以下のコマンドで変更可能 OUT &H68,&HD:DEF SEG=&HA3FE:POKE &HE,8 または Disk BASICのシステムディスクの switch.n88 等で変更してもよい なお、MS-DOSの SWITCH.EXE では変更できない項目になっている - メモリスイッチを設定したら再起動する - 14ボード上のサウンドROMはCC000-CCFFF ・演奏バッファの確保 CLEAR ,&H1E00 PLAY ALLOC 255,255,255,255,255,255,255,255 ・演奏方法 PLAY A$,B$,C$,D$,E$,F$,G$,H$ 8パート, 文字列で指定(不要なパートは省略可) ・PLAY命令で使用可能なMML: ----------------------------------------------------- O : オクターブ (O4〜O7) (省略時O5) CDEFGAB : 音階 R : 休符 ※音階と休符は直後に音長指定可 + : シャープ(半音上げ) - : フラット(半音下げ) L : 音長省略時の音長 (省略時L4) 音長 1,2,4,8,16,32,64 : 全音符, 二分音符, 四分音符, ... 64分音符 . : 符点 K : 音階の絶対指定(半音単位) K1=O4C(最低音) K49=O8C相当(最高音) (=O7B+) T : テンポ (1分間に演奏される四分音符の数) ※パート毎指定 省略時T120 S : エンベロープ S,,,, 省略時はS255,0,255,255,253 MF : フォアグラウンド演奏指定 MB : バックグラウンド演奏指定 ^ : タイ (例: C4^16) X=<文字変数>; : 変数での間接指定 指定例 FOR J=1 TO 49:PLAY "L64 K=J;":NEXT ----------------------------------------------------- ※音量調整はない (物理ボリュームのみ) [その他の演奏関係の命令] STATUS PLAY(<パート>) 指定パートの演奏バッファの未演奏データの残りバイト数を返す ON PLAY (P,N) GOSUB <行番号> 指定パートのバッファの残りがNになったら行番号へ分岐(演奏割り込み) PLAY ON/PLAY OFF/PLAY STOP 演奏割込みの許可/禁止/停止(無視) PLAY STOPは割り込みがかかっても保留し、次の PLAY ON で割り込みがかかる