PC-6000,6600情報誌 SAVE第18号特別版

 今号の内容                       
・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月中旬発行予定です。         

  • 17号に戻る
  • 19号に行く