今号の内容 ・MUSICコーナー ・PC−6000ハード&ユーティリティ ・P6なんでもコーナー ・お知らせ ・編集後記 【SAVE事務局閉鎖!!】 SAVE事務局が設置されてから2年間、青雲寮で活動してき ましたが、いろいろな事情のため閉鎖されることになりました。 よってスタッフはバラバラとなり、今後は代表の自宅で活動を継 続することになりました。活動内容は今までと変わりませんが、 これからは郵便物等すべてについて代表の自宅にお送り下さい。 さて、ここ札幌の今回の冬は記録的な降雪で総降雪量は6mに もなりました。その雪もやっと解け、ようやく北海道にも春が訪 れました。春は新年度の始まりです。進学、就職に新たな気持ち で頑張って下さい。 〔MUSICコーナー〕 サウンドLSIモニタの説明は今回で最終回となります。今回 は、残りの機能 SoUND文ジェネレータとソフトエンベロー プについて紹介します。 前回までに紹介したサウンドLSIスクリーンエディタはいか がでしたか。サウンドレジスタをカーソルで手軽に操作できるよ うになったのはよいとして、「動く音を作る」というところまで はほとんど到達できませんでした。本気で音を作ろうとするなら ば、もっと別のアイデアが必要なのでしょう。 サウンドLSIスクリーンエディタの新しいキーコマンド、 CTRL−Pにより、サウンドレジスタの値を表すDATA文と そのデータをサウンドレジスタにセットするステートメントとを 自動作成します。作成が終わると「ピー」という音がします。 自動作成はすでに存在するBASICプログラムの最後に、つ け加える形で行われます。ですから、CTRL−Pを押すたびに 次々にプログラムが追加されていきます。 {エンベロープ発生} PLAY文で音楽演奏をする際、Sというパラメータでエンベ ロープをつけることができます。これによって「ポン」というピ アノのような音を出すこともできます。 ところが、Sによるエンベロープでは音符毎の音の大きさを加 減することができません。 また、音符の設定は3チャンネル別々に行えるのに、Sによる エンベロープだけはチャンネル毎に独立に行うことができません Sによるエンベロープパターン0(または1,2,3,9)に 限り、これらの不満を一挙に解消。「ポン」という音の強弱の指 と3チャンネル独立を実現しました。 PLAY DEF □,□,□ パラメータによりチャンネルごとに減衰時間を設定します。最 大の大きさの音なら、パラメータの値10で1秒程度です。 0を設定するか、パラメータを省略したチャンネルでは、通常 のPLAY文が実行できます。 エンベロープ使用時の音の大きさは通常のPLAY文中のVに よって設定します。 PLAY DEF文の処理は、PLAYバッファが空になるま で実行されません。 PLAY DEF機能を始動したあとは、SoUND文、サウ ンドスクリーンエディタなどでサウンドLSIを直接操作するこ とは避けて下さい。誤動作します。 以上、サウンドLSIモニタについてお送りしましたが、お気 づきの点があればこのコーナーまでお知らせください。 パソコンMUSICをやるひとにとって楽譜を読めるというの が必要最低条件です。楽譜が読めない人はそれを見ながらプログ ラムに変えることが出来ません。したがって、がんばって読める ようにしましょう。残念ながらこのワープロでは楽譜は出せない のでここで教えることは出来ません。すみません。もし、教えて ほしいのでしたらお知らせ下さい。個人的に指導します。 私は最近、キーボードを購入したのでもっぱらそればかり使用 しています。これにはMIDIがついているので何とかP6につ なげたいと思っていますが、希望するパーツがどこにも(秋葉原 にも)売っていないのが現状です。こうなったら、パーツも自分 で作ってしまいたい気分にもなってしまいます。 〔PC−6000ハード&ユーティリティ〕 今回はランダムテクニックとして、いろいろな機能について紹 介します。 {タイム機能} PC−6001は時計用の専用のICを持たないため(SRを 除く)、1/512secのタイマ割り込みをカウントアップし てそれをタイマがわりに使用しています。 10 CLS 20 LoCATE 0,0 30 PRINT TIME 40 GoTo 20 上記のプログラムを実行させると下位の桁がめまぐるしく変化 しているのがわかります。これはタイマが1/512sec(1 .953ms)ごとに2つずつカウントアップしているためです PC−6001の内部ではカウンタ用のバッファが4バイト設 定されています。TIME関数は、このバッファの内容を10進 数に直します。10進では4桁目がほぼ秒の単位になりますが、 この機能はあくまでカウンタであって時計の機能ではありません 仮に61秒になっても表示は、101XXXにならずに61XX Xとなります。このように時、分、秒を自動的に処理してくれま せんので、時計として使用する場合はプログラムで時、分、秒の 処理を行わなければなりません。 また、このカウンタ機能では1000カウントが1000/ 1024(0.9765625秒)になりますので、これを1秒 とすると、ゲーム等なら問題ないでしょうが、実用とするなら以 下のように補正が必要でしょう。 SECoND=INT(TIME/1024) {タイマのセット} SRBASICではTIME$=”00:00:00”でタイ マを0にセットできますがN60や66BASICではそれがで きません。ではどうすればカウンタを0にセットできるのでしょ うか? 方法1、リセットまたは電源をOFFにして再びONにする。 方法2、カウンタのバッファを0に書き換える。 上記の方法が考えられます。 方法1は非現実的なので方法2について説明します。 カウンタのバッファはFA28〜FA2BH番地を使用してい ますのでここを0に書き換えます。 10 PRINT ”START”;TIME 20 FoR I=&HFA28 To &HFA2B:PoK E I,0:NEXT I 30 PRINT ”SET ”;TIME 20行を実行したあと30行で表示されるまで時間がかかるので 表示された時間は0になっていません。 機械語で使用するとき 0000 210000 SETIME:LD HL,0000H 0003 2228FA LD (0FA28H),HL 0006 222AFA LD (0FA2AH),HL 0009 C9 RET このタイマ機能には、タイマ割り込みを止めることによってカウ ントアップを一時停止できるのです。これをうまく使えば累計タ イムを測ることが簡単にできます。 10 PRINT ”START”,TIME 20 P=PEEK(&HFA27):P=P oR 1:Po KE &HFA27,P 30 oUT &HB0,P 40 PRINT ”TIMESToP”,TIME 50 FoR I=1 To 300:NEXT 60 PRINT ”CoUNT UP”,TIME 70 P=PEEK(&HFA27):P=P AND &HF E:PoKE &HFA27,P 80 oUT &HB0,P 50行はただの時間かせぎです。50行で時間を浪費したのに もかかわらず時間は増えていきません。 ポートB0Hがタイマ割り込みのoNoFFに使っているので 上記のプログラムでは20行でまずポートB0Hの状態(モータ のリレー状態、表示しているページ等)を調べてタイマをoFF にして、ポートB0Hに出力します。そして70行でタイマをo NにしてB0Hに出力します。 0000 3A27FA SToPTM:LD A,(0FA27H) 0003 F601 oR 1 :BIT0ヲ1ニスル(タイマーoFF) 0005 D3B0 oUT (0B0H),A 0007 3227FA LD (0FA27H),A 000A C9 RET 0000 3A27FA ENDTM:LD A,(0FA27H) 0003 E6FE AND 0FEH :BIT0ヲ0ニスル(タイマーoN) (4) 0005 D3B0 oUT (0B0H),A 0007 3227FA LD (0FA27H),A 000A C9 RET 注 ポートB0Hについて ポートB0Hの各ビットの意味は次の通りです。 ビットヌ0:タイマのoNoFF(0でoN,1でoFF) 〃 ヌ1:VRAMアドレス 〃 ヌ2: 〃 〃 ヌ3:カセットモータのoNoFF(〃) 〃 ヌ4:未使用 〃 ヌ5: 〃 〃 ヌ6: 〃 〃 ヌ7: 〃 FA27H番地・ポートB0Hのステータスエリア ※DI(割り込み禁止)命令のために正確なカウンタしては使え ない。 ※タイマoFFにしたままでいると入力時にカーソルが表示され ず困ることがある。 {行番号を0にする方法} 65000 INPUT”No.”;No:CU=PEEK(& HFA5F)+PEEK(&HFA60)*256 65010 LN=PEEK(CU+2)+PEEK(CU+3 )*2 65020 IF No<LN THEN END 65030 PoKE CU+2,0:PoKE CU+3,0 65040 CU=PEEK(CU)+PEEK(CU+1)* 256:GoTo 65010 上記のプログラムを行番号を0にしたいプログラムの後につけ 加えます。そして、RUN65000とすると”No.”と表示 されますから、変更したい所までの行番号を入れます。しばらく すると”Ok”と表示されますので、LISTをとると行番号が 0になっています。 次回もこの続きをします。お楽しみに。 〔P6なんでもコーナー〕 今回はいくつか質問がきていますので紹介します。 @PC−6001mkーSRにTIME$をつける方法はありま すか。 答え:現在調査中です。次回(19号)でお知らせします。 APC−60m43の裏のFGという所は何をつなげるところで しょうか 答え:FGは、アースをつなげるところです。ほら、洗濯機にも ついているでしょう。 BP6,P6m,P66はZ80のマシン語の本が今でも手に入 りますが、P6SRはどんなマシン語の本があるのでしょうか 答え:質問の意味をどう理解していいのかわかりませんが、たぶ んSRを教材にしたマシン語講座のことでしょう。言語は 66等と同じZ80系なのでそれでよいでしょう。特有の 命令(グラフィックの座標VRAM)などくわしく載って いるのは日本ソフトバンクから出ている「ハローMr.P C」がおすすめです。しかし、P6関係図書は注文しても 在庫がないのではないでしょうか。本当に今でも手に入る のですか。もし在庫があるようなところを見つけたら連絡 してください。 CおしゃべりBOXのプログラム中、グラフィック画面をロード するのにBLoADを使っていますがどういうことでしょうか 答え:モード5まではグラフィック画面はBSAVEで保存でき ます。領域は4000Hです。範囲はマニュアルに載って いるページ番号に対応しています。モード6についても一 応できますが、ロードする時にページを1にする必要があ ります。従って画面を見ながらグラフィック画面をロード できないのです。 〔お知らせ〕 ・最近、SAVEの発行が遅れていますが、編集がうまくいって ないため御了承下さい。 ・かわら版は今回はお休みです。今回原稿を送っていただいた方 は、次回に回させていただきます。御了承ください。また、さら にかわら版の原稿をおまちしています。 ・新会報は当初21号からの予定でしたが、20号からになりま す。(7月発行予定) 編 集 後 記 ・とても長いお休みをいただいてしまいました。しかし、息の続 く限りSAVEを続けていきたいと思います。皆さんの御声援 と御協力をお願いします。 (代表) ・このあとすぐ19号の製作だ! (編集担当) ・SAVE19号は6月中旬発行予定です。