(57)【要約】【課題】  時分割で複数のＭＰを実行することができる信号処理装置において、種々のサイズのＭＰの差し替えや遅延メモリの使用領域サイズの変更を、他のＭＰの動作を停止することなく行うことができ、またＭＰメモリや遅延メモリ内で領域の断片化が発生しても問題なく動作継続できるようにすることを目的とする。【解決手段】  信号処理装置において、遅延メモリ（第１記憶手段）を複数ページにページ分けする。新たなプログラムの実行指示に応じて、遅延メモリの所定数の未使用ページを、該新たなプログラムのアクセス空間に割当てる。各サンプリング周期毎に、前記新たなプログラムを演算手段に実行させる際、遅延メモリへのアクセス命令に応じて、指定されたアドレス位置を、割当てられたページ内のアドレス位置に変換し、変換されたアドレス位置の読出し又は書込みを行うようにする。【選択図】図２
2013140606.tif 000002
【特許請求の範囲】
【請求項１】
第１記憶手段と、
前記第１記憶手段へのアクセス命令を含む複数のプログラムを記憶する第２記憶手段と、
前記複数のプログラムの各々に、該プログラムのアクセス範囲に応じて、前記第１記憶手段の複数の記憶領域を割当てる割当て手段と、
サンプリング周期毎に、前記第２記憶手段から複数のプログラムを時分割で順次読出し、前記アクセス命令に応じて該順次読出したプログラムに割当てられた記憶領域をアクセスしつつ、入力する信号に対して当該プログラムに応じた信号処理を施して出力する演算手段と
を含む信号処理装置であって、
前記第１記憶手段は複数ページにページ分けされており、また、
各プログラムにおける前記アクセス命令は、当該プログラムの前記アクセス範囲に対応するアクセス空間内の、当該アクセス命令により指定されるアドレス位置への読出し又は書込みの命令であり、
前記信号処理装置は、さらに、
前記第２記憶手段に記憶されている新たなプログラムの実行指示に応じて、前記第１記憶手段の所定数の未使用ページを、該新たなプログラムの前記アクセス空間に割当てる割当手段と、
各サンプリング周期毎に、前記新たなプログラムを前記演算手段に実行させる実行制御手段と、
前記アクセス命令に応じて、前記指定されたアドレス位置を、割当てられたページ内のアドレス位置に変換する変換手段と
を含み、
前記演算手段は、前記アクセス命令に応じて、前記第１記憶手段の前記変換されたアドレス位置の読出し又は書込みを行うこと
を特徴とする信号処理装置。
【請求項２】
請求項１に記載の信号処理装置において、
前記プログラムのアクセス命令によりアクセスするアクセス空間のページと前記第１記憶手段のページとの対応関係を管理するテーブルを設け、該テーブルにより、前記変換手段によるアドレスの変換を行うことを特徴とする信号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のマイクロプログラムを時分割で実行する信号処理装置に関し、特に、複数のマイクロプログラムを同時実行しながら任意の大きさのマイクロプログラムを入れ替えることが可能な信号処理装置に関する。
【背景技術】
【０００２】
従来より、複数のマイクロプログラム（ＭＰ）を時分割で実行することにより、見かけ上複数のＭＰを並行に同時実行する信号処理装置（ＤＳＰ：Digital Signal Processor）が知られている。
【０００３】
例えば、特許文献１や２には、複数の効果付与プログラムをマイクロプログラム（ＭＰ）メモリに記憶しておき、その中からユーザが指定した５種類のプログラムの先頭アドレスを所定の先頭アドレスレジスタに記憶し、１ＤＡＣサイクルの間に５回アドレスジャンプしながらこれら５種類のプログラムを時分割で実行していくＤＳＰが記載されている。実行する５種類のプログラムは、先頭アドレスレジスタに書込む先頭アドレスを書き替えることで切り替えることができる。特許文献３には、ＭＰメモリに記憶したＭＰを１ＤＡＣサイクルの間に係数などを変更しながら繰り返し使い回し、これによりＭＰメモリの容量を抑えて複数の機能を実現するようにしたＤＳＰが記載されている。
【０００４】
また特許文献４には、ＭＰを複数のブロックに分割し、外部メモリ（遅延メモリ）もこれらブロックに対応付けて分割し、各ブロックに対してリソース（ＭＰメモリの領域、外部メモリの領域など）の割当てを行ってＭＰを動作させる効果付与装置が記載されている。あるブロックに割当てるリソースをある程度の余裕を持って確保しておくことにより、そのリソースの範囲内で実行可能な他のブロックをＭＰメモリに上書きして実行させることができる。特許文献５，６には、時分割で実行されている複数ＭＰのうちの一部のＭＰを、その他のＭＰを動作させたまま、停止して新たなＭＰに変更し、その新たなＭＰの実行を再開することができるＤＳＰが記載されている。
【０００５】
上記特許文献に記載のＤＳＰでは、時分割で実行する複数ＭＰの各々に外部に接続された遅延用メモリの領域（ブロック）を割当てて、各ＭＰはその割当てられた領域を用いて信号処理を行っている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許2765426号公報
【特許文献２】特許2765470号公報
【特許文献３】特許3208990号公報
【特許文献４】特許3760824号公報
【特許文献５】特許3230413号公報
【特許文献６】特許3230449号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記従来技術では、ＭＰメモリは決まった順番でしか読出すことができないため、空き領域の断片化（フラグメンテーション）が生じ、あるサイズのＭＰを実行させようとするとき、空き領域を合わせれば十分な領域があるにも関わらずまとまった領域になっていないため実行できない、という場合があった。また、時分割の実行順が途中（最後でない）のＭＰを停止して差し替え処理を行う場合、新たなＭＰとして選択できるＭＰは、その停止するＭＰのサイズ以下のＭＰに限られていた。そのため、停止するＭＰのサイズより新たに差し替えるＭＰのサイズが大きい場合には、差し替えできないことがあった。
【０００８】
さらに、各ＭＰ毎に必要な遅延メモリの領域のサイズは一般的には異なるので、新たなＭＰの処理を開始しようとするとき、遅延メモリの開放された領域（未使用ブロック）が断片化していると、合わせれば充分な遅延メモリの領域があるにもかからず実行ができない場合があった。
【０００９】
本発明は、時分割で複数のＭＰを実行することができる信号処理装置において、種々のサイズのＭＰの差し替えや遅延メモリの使用領域サイズの変更を、他のＭＰの動作を停止することなく行うことができ、またＭＰメモリや遅延メモリ内で領域の断片化が発生しても問題なく動作継続できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明は、第１記憶手段と、第１記憶手段へのアクセス命令を含む複数のプログラムを記憶する第２記憶手段と、前記複数のプログラムの各々に、該プログラムのアクセス範囲に応じて、前記第１記憶手段の複数の記憶領域を割当てる割当て手段と、サンプリング周期毎に、前記第２記憶手段から複数のプログラムを時分割で順次読出し、前記アクセス命令に応じて該順次読出したプログラムに割当てられた記憶領域をアクセスしつつ、入力する信号に対して当該プログラムに応じた信号処理を施して出力する演算手段とを含む信号処理装置において、前記第１記憶手段を複数ページにページ分けし、各プログラムにおけるアクセス命令は、当該プログラムのアクセス範囲に対応するアクセス空間内の、当該アクセス命令により指定されるアドレス位置への読出し又は書込みの命令とし、第２記憶手段に記憶されている新たなプログラムの実行指示に応じて、前記第１記憶手段の所定数の未使用ページを、該新たなプログラムの前記アクセス空間に割当て、各サンプリング周期毎に、前記新たなプログラムを前記演算手段に実行させ、前記アクセス命令に応じて、前記指定されたアドレス位置を、割当てられたページ内のアドレス位置に変換し、演算手段は、前記アクセス命令に応じて、前記第１記憶手段の前記変換されたアドレス位置の読出し又は書込みを行うことを特徴とするものである。前記プログラムのアクセス命令によりアクセスするアクセス空間のページと前記第１記憶手段のページとの対応関係を管理するテーブルを設け、該テーブルにより、前記変換手段によるアドレスの変換を行うこととするとよい。
【発明の効果】
【００１１】
本発明によれば、信号処理装置において、記憶手段に記憶されているプログラム及び係数データセットの読出し順序をページ単位で制御できるので、記憶手段の未使用領域（未使用ページ）が断片化していたとしても、それらの全未使用領域（未使用ページ）を合わせた領域に入るプログラムまで実行させることができる。また、実行中のプログラムを停止することなく、プログラムの差し替えなどを行うことができる。さらに、遅延メモリをページ単位に分割し、各プログラムのアクセス空間にページ単位で割当てるようになっているので、遅延メモリの未使用領域（未使用ページ）が断片化していたとしても、それらの全未使用領域（未使用ページ）を合わせた遅延領域を使用するプログラムまで実行させることができる。遅延メモリの使用領域サイズの変更なども、他のマイクロプログラムの動作を停止することなく行うことができる。
【図面の簡単な説明】
【００１２】
【図１】この発明の一実施形態であるＤＳＰを利用した音響処理装置の構成図
【図２】実施形態のＤＳＰの詳細な構成図
【図３】ＰＡテーブルとＳＰテーブルの構造図
【図４】プログラムの実行途中で何れかのプログラムを削除し、新たなプログラムを設定して実行する場合の、ＳＰテーブル及びＰＡテーブルの例を示す図
【図５】ＢＭＳテーブルとＢＰテーブルの構造図
【図６】プログラムの実行途中で何れかのプログラムを削除し、新たなプログラムを設定して実行する場合の、ＢＭＳテーブルとＢＰテーブルの例を示す図
【図７】ステップ読出部２４０が行うハードウェア処理の手順を示すフローチャート
【図８】ＣＰＵの処理の手順を示すフローチャート
【発明を実施するための形態】
【００１３】
以下、図面を用いてこの発明の実施の形態を説明する。
【００１４】
図１は、この発明の一実施形態であるＤＳＰを利用した音響処理装置の構成を示す。中央処理装置（ＣＰＵ）１０１は、この音響処理装置の全体の動作を制御する。フラッシュメモリ１０２は、ＣＰＵ１０１やＤＳＰ１１０が実行・使用する各種のプログラムやデータを格納した不揮発性メモリである。ＲＡＭ１０３は、ＣＰＵ１０１が実行するプログラムのロード領域やワーク領域に使用する揮発性メモリである。マウス１０４やキーボード１０５は、ユーザが本装置に各種の指示を与えたりデータを入力するための操作子である。ハードディスク１０６は、プログラムやデータを記憶する外部記憶装置である。ディスプレイ１０７は、各種の情報を表示するための表示装置である。その他Ｉ／Ｏ１０８は、本装置に各種の外部機器を接続するためのインタフェースである。
【００１５】
波形入力部１０９は、ＤＳＰ１１０にデジタル音響信号を入力する部分であり、例えば、（１）外部から入力したアナログ音響信号をデジタルに変換するＡＤ変換器、（２）外部機器からデジタル音響信号を受信する通信Ｉ／Ｏインタフェース、（３）ＣＰＵ１０１からの指示に応じてデジタル音響信号を発生する音源、（４）ハードディスク１０６やＲＡＭ１０３などに記憶された音響信号を再生するレコーダなどである。ＤＳＰ１１０は、１チップの大規模集積回路（ＬＳＩ）として構成され、ＣＰＵ１０１から与えられる各種のマイクロプログラムを実行することにより、ディストーション、コーラス、リバーブ、ハウリングキャンセラ、イコライザなどの各種の音響信号処理を行い、処理後の波形信号を波形出力部１１２に出力する。このＤＳＰ１１０は、複数のマイクロプログラムを時分割で並列に実行可能なものである。ＤＳＰ１１０に設定する信号処理のプログラムやパラメータ（係数を含む）は、もともとフラッシュメモリ１０２やハードディスク１０６に記憶されているものであり、信号処理の選択操作に応じて、ＣＰＵ１０１がフラッシュメモリ１０２等から選択された信号処理のプログラムやパラメータを読出してＤＳＰ１１０に設定する。遅延メモリ１１１は、ＤＳＰ１１０での処理において長時間遅延した信号が必要な場合に使用する外部メモリである。波形出力部１１２は、ＤＳＰ１１０からのデジタル音響信号を出力する部分であり、例えば、（１）デジタル音響信号をアナログに変換して外部に出力するＤＡ変換器、（２）外部機器へデジタル音響信号を送信する通信Ｉ／Ｏインタフェース、（３）デジタル音響信号をハードディスク１０６やＲＡＭ１０３などに録音するレコーダなどである。以上の、波形入力部１０９、ＤＳＰ１１０、および波形出力部１１２は、それぞれ、所定のサンプリング周波数（例えば、９６ｋＨｚ）でデジタル音響信号の処理を行う。このサンプリング周波数は、ユーザが変更できるようになっていてもよい。
【００１６】
図１の装置は、例えば汎用的なＰＣに所定のソフトウェアをインストールして所謂ＡＷＳ（オーディオワークステーション）として、ハードディスクレコーディング機能、効果付与機能、及びシーケンサ機能などを実現した機器でも良いし、あるいはデジタルミキサなどの機器であっても良い。本発明に係る信号処理装置（ＤＳＰ）は、音響信号を処理する機器でマイクロプログラムを入れ替えて動作させるものであればどのようなものにでも適用して好適なものである。
【００１７】
図２は、本発明の一実施形態であるＤＳＰ１１０の詳細構成を示す。２２１〜２３１は、従来より知られている通常のＤＳＰの信号処理回路と同様の回路である。乗算器２２６は、セレクタ２２４により選択されたＩ／Ｏ  ＲＡＭ２２１又はテンポラリＲＡＭ２２２のデータと、セレクタ２２５により選択された補間部２５１から供給される係数データ又はＹＲＡＭ２２３のデータとを乗算し、乗算結果を加算器２２８に出力する。加算器２２８は、セレクタ２２７により選択された内部バス２２９、Ｉ／Ｏ  ＲＡＭ２２１、又はテンポラリＲＡＭ２２２のデータと、乗算器２２６から出力されたデータとを加算し、加算結果を内部バス２２９に出力する。内部バス２２９には、外部ＲＡＭ（遅延メモリ）１１１に対する書込部２３０及び読出部２３１が接続されており、内部バス２２９上のデータを外部ＲＡＭ１１１に書込み、又は外部ＲＡＭ１１１内のデータを内部バス２２９に読出すことができる。内部バス２２９上のデータは、Ｉ／Ｏ  ＲＡＭ２２１、テンポラリＲＡＭ２２２、又はＹＲＡＭ２２３に書込んだり、セレクタ２２７に入力させることができる。これら各部はパイプライン処理を行っており、１ステップ毎にＩ／Ｏ  ＲＡＭ２２１からデータを読出し、１ステップ毎にＩ／Ｏ  ＲＡＭ２２１に処理後のデータを書込むことができる。ここでは、Ｉ／Ｏ  ＲＡＭ２２１は、ＤＳＰ１１０と外部のデバイスとの間で音響信号の入出力をおこなうためのインターフェースとしての働きを有する。ＤＳＰ１１０は、あるサンプリング周期で波形入力部１０９から供給された音響信号を、次のサンプリング周期でマイクロプログラムの所望のステップに配置した読出命令によりＩ／Ｏ  ＲＡＭ２２１の入力用領域から読み出して利用することができ、また、あるサンプリング周期に、マイクロプログラムの所望のステップに配置された書込命令によってＩ／Ｏ  ＲＡＭ２２１の出力用領域に書き込まれた音響信号を、次のサンプリング周期に、波形出力部１１２に出力するようになっている。上述した信号処理回路の各部は、マイクロプログラムメモリ２１４から読み出されたマイクロプログラムの命令コードに応じて制御信号発生部２５２が発生する制御信号に基づいて動作することにより、各種の信号処理を行うものである。マイクロプログラムの各ステップには、ＤＳＰ１１０内のＲＡＭ２２１、２２２、２２３の書込／読出命令、セレクタ２２４、２２５、２２７を制御する選択命令、外部ＲＡＭ１１１の書込／読出命令、アドレスレジスタ２３２への書込命令、乗算器２２６及び加算器２２８を制御する命令などを適宜組み合わせた命令コードが記憶されている。
【００１８】
本実施形態のＤＳＰ１１０は各サンプリング周期毎に４０９６ステップの処理を繰り返し実行するものであり、マイクロプログラム（ＭＰ）メモリ２１４には、図１に示したＣＰＵ１０１がその４０９６ステップ分のマイクロプログラムを設定する。また、ＣＰＵ１０１は、係数メモリ２１３に上記４０９６の各ステップ毎の係数データを、アドレスメモリ２１５に上記４０９６の各ステップ毎のアドレスデータ（遅延メモリ１１１のアクセスアドレス）を、それぞれ設定する。特に、本実施形態のＤＳＰ１１０では、上記４０９６ステップを１２８ステップ／ページ単位で３２ページ分のページ領域に分け、指定されたページの順番でマイクロプログラムを実行する。実行するページの順番は、ＰＡテーブル２１１及びＳＰテーブル２１２の設定による。ステップ読出部２４０に入力するＦｓは、上述したサンプリング周波数の周期で発生するサンプリングクロックであり、Φはそのサンプリング周期内で上記４０９６ステップの処理を行うためにＤＳＰ内部の各部に供給される動作クロックである。すなわち、この動作クロックは、サンプリング周波数の４０９６倍以上の周波数とされる。また、サンプリングクロックＦｓは、波形入力部１０９、波形出力部１１２にも供給されており、波形入力部１０９、ＤＳＰ１１０、波形出力部１１２は、それぞれ、この共通のサンプリングクロックＦｓに同期して音響信号の処理を行う。ステップ読出部２４０は、１サンプリング周期内の上記４０９６の各ステップのタイムスロット毎に、そのタイムスロットで実際に実行すべき命令がＭＰメモリ２１４から読出されるように（同時に、その命令に対応する係数データ及びアドレスデータが係数メモリ２１３及びアドレスメモリ２１５から読出されるように）制御する。
【００１９】
ここで、図３を参照して、図２のＰＡテーブル２１１とＳＰテーブル２１２の構造及びステップ読出部２４０によるＭＰメモリ２４１からの命令ステップの読出し制御について説明する。
【００２０】
図３（ａ）は、ＳＰテーブル２１２の詳細な構造を示す。ＳＰテーブル２１２は、時分割実行する最大８つの各プログラムのＭＰメモリ２１４内での先頭ページのページアドレスを記憶するテーブルである。すなわち、８つのプログラムをインデックスｂ（ｂは０〜７の整数で３ビットデータ）でプログラムｂ（要するにプログラムｂは第ｂ＋１番目のプログラムである）と呼ぶとき、ＳＰテーブル２１２の要素ＳＰ（ｂ）には、プログラムｂのＭＰメモリ２１４内の先頭ページのページアドレスが記憶されている。ＳＰ（ｂ）＝０のとき（ｂ≠０の場合）、プログラムｂは割当て無し（存在しない）を示す。ＳＰ（０）には特別な意味を持たせる。ＳＰ（０）＝０は、プログラム０の先頭ページがページアドレス０のページであることを示す。ＳＰ（０）≠０は、そのＳＰ（０）の値（≠０）をインデックスｂとするプログラムが、（インデックス０，１，…と順に見ていったとき）最初に割当てられているプログラムであることを示す。例えば、ＳＰ（０）＝１は、プログラム０は割当てが無く、プログラム１が最初に割当てられているプログラムであることを示す。ＳＰ（０）＝２は、プログラム０と１は割当てが無く、プログラム２が最初に割当てられているプログラムであることを示す。
【００２１】
ＳＰ（ｂ）は、０〜３１の３２ページ分のページアドレスを表すため５ビットデータとする。上記８つのプログラムのそれぞれは、論理的に一連の処理を実行するひとかたまりのプログラムであるので「ブロック」と呼び、インデックスｂは「ブロックアドレス」と呼ぶことがある。なお、図３（ｃ）の右段に示すように、ＭＰメモリ２１４は全体で４０９６ステップ分の命令を格納する領域を持ち、１２８ステップ／ページ単位で３２ページ分のページ領域に分けられている。０〜３１のページアドレスでページを特定することができる。
【００２２】
図３（ｂ）は、ＰＡテーブル２１１の詳細な構造を示す。ページアドレスをｐ（ｐは０〜３１の整数）として、そのページｐに対応するＰＡ（ｐ）に、当該ページｐの次に実行すべきページアドレスを記憶する。ＰＡ（ｐ）は、０〜３１のページアドレスを表すため５ビットデータとする。ページｐが当該プログラムの最終ページであって、次に実行すべきページがないときは、ＰＡ（ｐ）＝０とする。なお、プログラムを複数ページに割当てる場合、若い番号で空いているページから順番に割当てるようにしているので、「次のページ」がページアドレス０のページになることはあり得ない。
【００２３】
図３（ｃ）は、ＳＰテーブル２１２及びＰＡテーブル２１１の格納値の具体例を示す。プログラム０に注目すると、まずＳＰ（０）＝０であるから当該プログラム０は、ＭＰメモリ２１４のページ０から開始することが分かる。次に、そのページ０に対応するＰＡテーブル２１１の要素ＰＡ（０）＝１であるので、次に実行するＭＰメモリ２１４内のページがページ１であることが分かる。同様にして、ＰＡ（１）＝２→ＰＡ（２）＝１１→ＰＡ（１１）＝１２→ＰＡ（１２）＝１３→ＰＡ（１３）＝０とリンクを辿ることができるので、要するに当該プログラム０はＭＰメモリ２１４のページ０→１→２→１１→１２→１３の順で実行すべきことが分かる。すなわち、ＤＳＰ１１０は、８つのプログラムの各々を、ＳＰテーブル２１２とＰＡテーブル２１１を用いてシーケンシャルに読み出しし、実行することができる。このＳＰテーブルとＰＡテーブルを用いた方式は、シーケンシャルアクセスには適しているが、ランダムアクセスには適さない。ここでは、ＤＳＰ１１０の実行するプログラムがシーケンシャルに読み出されるべきデータであることが確定しているので、この方式が採られている。なお、図３（ｃ）のＰＡテーブル中の「プログラム０−１」や「プログラム０−２」などの「プログラムｉ−ｊ」の記載は、その要素に対応するページがプログラムｉの第ｊ番目のページであることを示す。
【００２４】
再び図２に戻って、ステップ読出部２４０によるプログラムの読み出しを説明する。ステップ読出部２４０内の２４１と２４３は、ブロックアドレスｂとページアドレスｐを記憶するレジスタである。（なお、図中の丸付き数字は、ビット数を示している。）ステップ読出部２４０は、サンプリング周期毎に、レジスタ２４１の記憶するブロックアドレスｂを０〜７で順に変化させながら、各ブロックアドレスｂにおいて、まず、ＳＰテーブル２１２の記憶するプログラムｂの開始ページの番号ＳＰ（ｂ）をレジスタ２４３にロードし、続いて、ＰＡテーブル２１１が記憶する次ページの番号を、その値が「０」となるまで、レジスタ２４３に順次ロードする。それと平行して、その各時点におけるレジスタ２４３の示すページの命令コードを順次読出して制御信号発生部２５２に渡すことで、８つのブロックに対応する８つのプログラムを各サンプリング周期内に時分割実行する（後述する図７）。２４２のｃｎｔは、１ページ内の１２８ステップの命令を読出すために使用する７ビットのカウンタである。すなわち、ブロックアドレスｂとページアドレスｐが決定してＭＰメモリ２１４内の読出すべきページが確定したら、ｃｎｔを０〜１２７で変化させ、これを当該ページの先頭からの相対アドレスとして当該ページ内の１２８ステップ分の命令を順番に読出す。上記ではＭＰメモリ２１４のページ分けとアクセス方式を説明したが、係数メモリ２１３とアドレスメモリ２１５も同様に３２ページにページ分けされており、ＭＰメモリ２１４から読出した命令に対応する係数データとアドレスデータが読出されるように構成されている。
【００２５】
図４は、プログラムの実行途中で何れかのプログラムを削除し、新たなプログラムを設定して実行する場合の、ＳＰテーブル２１２及びＰＡテーブル２１１の例を示す。４１１と４２１は最初の状態、４１２と４２２はプログラム１を削除した状態、４１３と４２３は新規にプログラム１を登録した状態を示す。太線で囲んだ部分は有意なデータを示す。最初の状態のテーブル４１１，４２１では、ＭＰメモリ２１４において、プログラム０はページ０，１，２，１１，１２，１３の順に格納され、プログラム１はページ３，４の順に格納され、プログラム２は割当て無しで、プログラム３はページ９，１０の順に格納され、プログラム４はページ５，６，７，８，の順に格納されている。それ以降のプログラム５〜７の割当ても無い。従って、図２のステップ読出部２４０は、プログラム０の上記ページを順に辿って各ページから命令を読出して制御信号発生部２５２に渡し、次にプログラム１の上記ページを順に辿って各ページから命令を読出して制御信号発生部２５２に渡し、…と繰り返すことにより、一連のプログラムが実行される。
【００２６】
これらのプログラムの実行中に、斜線を付してあるプログラム１を削除する指示が来たとする。このとき、ＣＰＵ１０１は、プログラム１に対応するＳＰ（１）とそこから辿れるＰＡ（３），ＰＡ（４）とを全て０（当該ページが未使用であることを示す）とし、プログラム１が利用していたＭＰメモリ２１４と係数メモリ２１３とアドレスメモリ２１５内の当該ページを開放する。４１２と４２２はプログラム１を削除した後のＳＰテーブル２１２及びＰＡテーブル２１１を示す。ステップ読出部２４０はＳＰテーブル２１２を参照して各プログラムの先頭ページを認識するが、ＳＰ（１）＝０とされた段階でプログラム１が削除されたことは分かるので、プログラム１は実行されなくなる。その他のプログラムは引き続き実行中である。
【００２７】
次に、新たにプログラム１に割当てて実行したいプログラムが選択された場合、ＣＰＵ１０１は、新たに選択されたプログラムの容量を確認し、ＭＰメモリ２１４の何ページ分を使用するかを決定する。ここでは３ページ分を使用するものとする。図示しないが、ＲＡＭ１０３には、８つの各ブロックｂの使用状態ＢＳ（ｂ）（＝０：未使用、１：使用中）を記憶したＢＳテーブルと、３２の各ページｐの使用状態ＰＳ（ｐ）（＝０：未使用、１：使用中）を記憶したＰＳテーブルとが設けられており、ＣＰＵ１０１は、これらのテーブルを使用して新たに選択されたプログラムに対するブロックの割当てとページの割当てとを行う。例えば、ＣＰＵ１０１は、ＢＳ（１）＝０でブロック１が未使用（未割当て）の状態にあり、ＰＳ（３）＝０、ＰＳ（４）＝０、ＰＳ（１４）＝０でページアドレスが若い方からページ３、４、１４が未使用（未割当て）の状態であることを認識し、新たに選択されたプログラムに対してブロック１とページ３、４、１４とを割当て、このプログラムの３ページ分の命令コードをＭＰメモリ２１４の割当てたページ３、４、１４の領域に書き込むとともに（同時に係数メモリ２１３とアドレスメモリ２１５についても、このプログラムの係数データとアドレスデータを、それぞれ対応するページの領域に書き込む）、ＳＰテーブル２１２に割当てたブロックの開始ページＳＰ（１）＝３を設定し、ＰＡテーブル２１１に割当てたページのリンクＰＡ（３）＝４、ＰＡ（４）＝１４、ＰＡ（１４）＝０を設定する。これにより、ステップ読出部２４０は、ＳＰ（１）＝３からプログラム１を辿れるので、実行中のプログラムに加えて、新たに選択されたプログラム１についても実行が開始される。そして、ＣＰＵ１０１は、ＢＳテーブルにブロック１の使用中を示す要素（ＢＳ（１）＝１）を、ＰＳテーブルにページ３、４、１４の使用中を示す要素（ＰＳ（３）＝１、ＰＳ（４）＝１、ＰＳ（１４）＝１）を設定する。
【００２８】
上記方式を採っているため、ＤＳＰ１１０では、最大８つのプログラムの一部のプログラムを、残りのプログラムの実行中に、ＭＰメモリ内の各プログラムの配置状態に影響されることなく、自由に削除したり、新たに追加したりすることができる。この場合、削除したり追加するプログラム以外の実行中のプログラムを停止する必要はない。また、削除したり追加するプログラムの大きさが区々である場合にはページの断片化が発生することがあるが、断片化が発生しても問題なく動作が継続できる。
【００２９】
再び図２を参照して、遅延メモリ１１１のアクセスアドレスの生成方式について説明する。加算器２５４は、アドレスメモリ２１５からのアドレスデータ（２０ビット）とベースカウンタ２５３からのベースカウンタ値（２０ビット）とアドレスレジスタ２３２から読出したデータ（２０ビット）とを加算することにより、遅延メモリの仮想アドレス（２２ビット  ただし、範囲制限前のアドレス）を生成する。このＤＳＰ１１０では、各プログラムが利用する遅延用のメモリ領域が、遅延メモリ１１１上で複数の領域に分割されて配置されていたとしても、そのプログラムからは仮想的に１つの連続した領域（仮想遅延メモリと呼ぶ）に見えるよう、アドレス変換を行っている。仮想アドレスとは、各プログラムが、その利用する仮想遅延メモリ上でのアドレスを示すものである。アドレスレジスタ２３２から加算器２５４に出力されるアドレスデータはベースカウンタ値からのオフセットであり、説明の簡単化のためにまずこの値を０と仮定し、加算器２５４がアドレスメモリ２１５からのアドレスデータとベースカウンタ２５３からのベースカウンタ値とを加算する場合を説明する。ベースカウンタ２５３は、８つのブロックに対応する８つの独立したカウンタｂで構成されており、各ブロックｂのカウンタｂは、そのブロックｂのプログラムｂの実行期間に、そのプログラムｂに割当てられた仮想遅延メモリｂの最終アドレスを初期値として、サンプリングクロック毎に１つずつカウントダウンした値を出力する。そして、０（仮想遅延メモリｂの先頭アドレス）の次は、再びその最終アドレスに戻ってサンプリングクロック毎のカウントダウンを繰り返す。この最終アドレスは、後述する実遅延メモリ１１１の１ページのサイズと当該プログラムｂに割当てられたメモリサイズＢＭＳ（ｂ）とに基づいて、１ページのサイズ（＝２16）×ＢＭＳ（ｂ）−１の計算式により算出される。いま、プログラムｂ中のあるステップの書込み命令で、その命令に対応するアドレスメモリ２１５内のそのステップのアドレスデータの値が０であるとする。サンプリングクロックｔにおけるベースカウンタ値をＢＣ（ｔ）と表現すると、その時点で上記書込み命令で、仮想遅延メモリのアドレスＢＣ（ｔ）＋０の位置にデータが書込まれる。サンプリングクロックｔが１ずつ進むと、ＢＣ（ｔ）は１ずつカウントダウンされるので、アドレスが減少する方向でデータが書込まれていく（アドレス０の次は再び最終アドレスに戻るので、仮想遅延メモリをリングメモリとして使っていることになる）。仮想遅延メモリからデータを読出す場合は、要するに、あるクロックｔの時点では、ＢＣ（ｔ）＋１の位置に１サンプリングクロック前の値が存在し、ＢＣ（ｔ）＋２の位置に２サンプリングクロック前の値が存在し、…となる。従って、その時点で、読出し命令でｎサンプリングクロック前のデータを読出したければ、その読出し命令に対応するアドレスメモリ２１５内のアドレスデータの値をｎとすればよい。以上のようにして、遅延したデータを得ることができる。一般的に、プログラムｂの中で仮想遅延メモリによりデータをｎサンプリング周期だけ遅延したい場合には、そのデータが得られるステップで書込み命令によりアドレスデータｘの示すアドレスに書き込み、遅延されたデータが必要なステップで読出命令によりアドレスデータ（ｘ＋ｎ）の示すアドレスから読み出せばよい。ただし、仮想メモリにおける各データの遅延用の領域は、相互に重ならないように配置する必要がある。
【００３０】
上述したように、アドレスレジスタ２３２は、アドレスを変調するためのものである。例えば、楽音波形データにコーラス効果を付与したい場合、付番２２１〜２３１で説明した信号処理回路で低周波波形を生成し、その低周波波形のデータを内部バス２２９からアドレスレジスタ２３２に取り込み、そのデータを加算器２５４に入力して、遅延メモリの読出しアドレスを低周波波形で揺らす。これにより、読出しアドレスが変調され、楽音波形にコーラス効果を付与することができる。
【００３１】
遅延メモリ１１１のページ分けについて説明する。なお、遅延メモリのページ分けは、上述したＭＰメモリ２１４等のページ分けとは独立に行われる。実遅延メモリ１１１は６４Ｋｗｏｒｄ／ページ単位（正確に言えば２16＝６５５３６ｗｏｒｄ／ページ）で３２ページ分の領域に分けられている。各プログラムが利用できる仮想遅延メモリは最大１６ページの大きさである。この仮想遅延メモリのページは、仮想ページアドレスｖｐ＝０，１，…，１５で順に特定することができる。従って、加算器２５４の出力である２２ビットの仮想アドレス（範囲制限前）は、上位６ビットが仮想ページアドレスｖｐに相当し、下位１６ビットが仮想ページアドレスｖｐが示す仮想ページ内におけるアドレスａ１６に相当する。各プログラムｂの仮想アドレス（範囲制限前）は、範囲制限部２５５で、そのプログラムに割当てられたメモリサイズＢＭＳ（ｂ）に基づいて、仮想遅延メモリｂの範囲（０〜最終アドレス）に入るよう制限され、（正式な）仮想アドレスに変換されるが、その詳細については後述する。そして、範囲制限部２５５から出力される２０ビットの正式な仮想アドレスのうちの上位４ビットである仮想ページアドレスｖｐuがブロックページ（ＢＰ）テーブル２１７に供給され、実遅延メモリ１１１のページを示す５ビットの実ページアドレスｒｐに変換される。変換された実ページアドレスｒｐの下位に、範囲制限部２５５から出力される２０ビットの仮想アドレスのうちの下位１６ビットであるアドレスａ１６が付加され、実遅延メモリ１１１には、全２１ビットからなる実アドレスが供給される。
【００３２】
ここで、図５を参照して、ＢＭＳテーブル２１６とＢＰテーブル２１７の構造について説明する。
【００３３】
図５（ａ）は、ＢＭＳテーブル２１６の詳細な構造を示す。ＢＭＳテーブル２１６は、時分割実行する最大８つの各プログラムが使用する遅延メモリ１１１の領域サイズを記憶するテーブルである。ＢＭＳ（ｂ）には、プログラムｂが使用する仮想遅延メモリのメモリサイズ（実遅延メモリ１１１において当該プログラムｂに割当てられた領域のサイズでもある）として、そのページ数を格納する。このページ数分の各ページは、使用仮想ページアドレスｖｐuで特定できる。例えば、ＢＭＳ（ｂ）＝５であれば、当該プログラムは、使用仮想ページアドレスｖｐu＝０，１，２，３，４の５ページ分を使用するということである。図５（ｃ）の右段に示すように、実遅延メモリ１１１は６４ＫＷｏｒｄ／ページでページ分けされ、全体で３２ページ（ページアドレス０〜３１）ある。ＢＭＳ（ｂ）は、５ビットデータでページ数を表すが、上述したように１プログラムが利用する遅延メモリのページ数の最大値は１６ページであるので、ＢＭＳ（ｂ）は実際には０〜１６の値（０は遅延メモリを使用していないことを示す）を取る。なお、各プログラムｂの使用仮想ページアドレスｖｐuは、上述した範囲制限部２５５の動作により０〜ＢＭＳ（ｂ）−１の範囲に入るよう制限されている。
【００３４】
図５（ｂ）は、図２のＢＰテーブル２１７の詳細な構造を示す。ＢＰテーブル２１７は、各ブロック毎、すなわち各プログラム毎に１枚のＢＰテーブルを持つ。ＢＰ（ｖｐu）には、使用仮想ページアドレスｖｐuに対応する実ページアドレスを格納する。例えば、図５（ｃ）では、ＢＭＳ（０）＝５であるので、プログラム０が使用する仮想遅延メモリ（実遅延メモリ１１１）のページ数は５ページであり、対応するプログラム０用ＢＰテーブルでは要素ＢＰ（０）〜ＢＰ（４）が有効であることが分かる。また、例示したプログラム１用ＢＰテーブルではＢＰ（０）＝４、ＢＰ（１）＝５、ＢＰ（２）＝６であるので、当該プログラム１は、仮想遅延メモリの使用仮想ページアドレス０，１，２を順に実遅延メモリ１１１の実ページアドレス４，５，６にマッピングして利用していることが分かる。このＢＰテーブルを用いた方式では、仮想ページアドレスを順番に進める必要がなく、仮想アドレスによるランダムアクセスに適している。すなわち、ＤＳＰ１１０は、プログラムｂ中の各書込命令ないし読出命令に対応して供給される仮想アドレスが如何なるアドレスであっても、ＢＰテーブルで対応する実アドレスに直ちに変換して遅延メモリ１１１に供給することができる。
【００３５】
再び図２に戻って、ステップ読出部２４０がブロックアドレスｂをＢＭＳテーブル２１６とＢＰテーブル２１７に出力すると、ＢＭＳテーブル２１６からは当該ブロックアドレスに対応するプログラムｂが使用する遅延メモリのページ数ＢＭＳ（ｂ）が範囲制限部２５５とベースカウンタ２５３に出力され、ＢＰテーブル２１７ではそのプログラムｂに対応する１枚のＢＰテーブルが特定される。範囲制限部２５５は、加算器の出力である２２ビットデータ（上位６ビットは仮想ページアドレスｖｐ、下位１６ビットは当該仮想ページ内アドレスａ１６）と使用ページ数ＢＭＳ（ｂ）とを入力し、仮想ページアドレスｖｐが使用ページ数ＢＭＳ（ｂ）より小さければそのまま、大きければ使用ページ数ＢＭＳ（ｂ）を減算して、使用仮想ページアドレスｖｐu（４ビット）としてＢＰテーブルに出力するとともに、ページ内アドレスａ１６（１６ビット）を遅延メモリ１１１に実アドレスの下位１６ビットとして出力する。
【００３６】
ここで、範囲制限部２５５による範囲制限前の仮想アドレス（ｖｐ、ａ１６）から仮想アドレス（ｖｐu、ａ１６）への変換方式について詳しく説明する。加算器２５４には、ベースカウンタ２５３からのカウンタ値、アドレスメモリ２１５からのアドレスデータ、および、アドレスレジスタ２３２からのデータの３つが入力する。ここで、ベースカウンタ２５３からのカウンタ値は、各サンプリング周期のブロックアドレスがｂである期間に注目すると、ベースカウンタ２５３のカウンタｂから出力されるカウンタ値は、仮想遅延メモリｂの最終アドレス（２16×ＢＭＳ（ｂ）−１）から先頭アドレス（０）の間を、フリーランで、サンプリングクロック毎に１ずつカウントダウンしている。また、アドレスメモリ２１５からのアドレスデータは、プログラムｂ用であり、仮想遅延メモリｂの範囲内に設定された値となっている。そして、アドレスレジスタ２３２からのデータは、遅延メモリにおけるデータの遅延時間を変調するためのデータであり、通常、その値はページサイズ（２16）の１００分の１以下である。（遅延時間の変調は、フェイザー、フランジャー、コーラスなどの音響効果処理において使用される。）
【００３７】
これらを勘案すると、加算器２５４から出力される仮想アドレス（範囲制限前）ｖｐは、仮想遅延メモリｂの最終アドレスの２倍のアドレス（２17＋α）から先頭アドレス（０−α）の範囲で変化する（αは遅延時間変調の最大振幅）。範囲制限部２５５では、仮想アドレス（範囲制限前）が最終アドレスから先頭アドレスの範囲にあるとき、その仮想アドレス（範囲制限前）をそのまま出力し、最終アドレスより大きくなったとき、その仮想アドレス（範囲制限前）から仮想メモリのサイズ（２16×ＢＭＳ（ｂ））を減算した値を出力し、先頭アドレスより小さくなったとき（マイナス値となる）、その仮想アドレス（範囲制限前）に仮想メモリのサイズ（２16×ＢＭＳ（ｂ））を加算した値を出力することにより、２２ビットの仮想アドレス（ｖｐ、ａ１６）を２０ビットの仮想アドレス（ｖｐu、ａ１６）へと変換するようになっている。
【００３８】
なお、この実施例では、仮想メモリのサイズが２16×ＢＭＳ（ｂ）であり、下位１６ビットがオール０であることが保証されているので、上位６ビットについてのみ演算処理を行えばよい。具体的には、６ビットの仮想ページアドレスｖｐが、０〜ＢＭＳ（ｂ）−１の範囲内であればその下位４ビットを使用仮想ページアドレスｖｐuとして出力し、ＢＭＳ（ｂ）以上であればｖｐ−ＢＭＳ（ｂ）を算出してその下位４ビットをｖｐuとして出力し、マイナス値であればｖｐ＋ＢＭＳ（ｂ）を算出してその下位４ビットをｖｐuとして出力する。そして、ページ内アドレスａ１６については、変換を行うことなく、そのまま出力すればよい。
【００３９】
ＭＰメモリ２１４内の命令のうち遅延メモリにアクセスする命令を実行する場合、ステップ読出部２４０から出力されるブロックアドレスｂで、ＢＰテーブル２１７のうちの１枚が特定されている。従って、範囲制限部２５５から出力される上記使用仮想ページアドレスｖｐuをインデックスとして、当該ＢＰテーブルからＢＰ（ｖｐu）を読出すことで、実遅延メモリ１１１の実ページアドレスｒｐ（５ビット）を取得できる。さらに、範囲制限部２５５はページ内アドレスａ１６（１６ビット）を出力するので、これらを合わせて遅延メモリ１１１のアドレス端子に入力させることにより、実際のアクセスが実現される。
【００４０】
図６は、プログラムの実行途中に、プログラムの変更指示に応じて、何れかのプログラムを削除し、新たなプログラムを設定して実行する場合の、ＢＰテーブル２１７及び遅延メモリ１１１の使用状況の例を示す。６１１と６２１は最初の状態、６１２と６２２はプログラム１を削除した状態、６１３と６２３は新規にプログラム１を登録した状態を示す。太線で囲んだ部分は有意なデータを示す。最初の状態では、プログラム１に対応するＢＭＳ（１）＝３とする。従って、６１１に示すように、プログラム１用ＢＰテーブルは先頭から３ページ分の要素ＢＰ（０）〜ＢＰ（２）に有意な値が格納されている。ＢＰ（０）＝４は、プログラム１が使用する第１ページ目（使用仮想ページアドレスｖｐu＝０）が遅延メモリ１１１の実ページアドレス４のページに割当てられていることを示している。同様に、使用仮想ページ１は実ページ５に、使用仮想ページ２は実ページ６に、それぞれ割当てられている。従って、プログラム１は、これらの３ページを使用して、遅延したデータを取得する処理を行う。他のプログラムも同様であり、それぞれ割当てられた遅延メモリのページを使用して、遅延したデータを取得する処理を行う。上述したように、範囲制限部２５５により使用仮想ページアドレスｖｐuが遅延仮想メモリ内を示すように制限されているので、要素ＢＰ（３）〜ＢＰ（１５）の値は特に気にしなくて良い。
【００４１】
プログラムの実行中に、斜線を付してあるプログラム１を削除する指示が来たとする。このとき、ＣＰＵ１０１は、ＤＳＰ１１０の制御レジスタに、プログラム１に対応するＢＭＳ（１）＝０を設定するとともに、ＲＡＭ１０３に設けられているＭＳテーブル（図示せず）に、開放したページ４、５、６に対応するＭＳ（４）＝０、ＭＳ（５）＝０、ＭＳ（６）＝０を書込む。ここで、ＭＳテーブルは、遅延メモリ１１１の各実ページｒｐの使用状態ＭＳ（ｒｐ）（＝０：未使用、１：使用中）を記憶するテーブルである。これにより、６１２に示すようにプログラム１用ＢＰテーブルの全要素が開放され、６２２に示すように遅延メモリ１１１中でプログラム１が使用していたページが開放される。その他のプログラムは引き続き実行中であり、ＢＭＳテーブル２１６とＢＰテーブル２１７により遅延メモリ１１１の該当ページが使用されている。
【００４２】
次に、ブロック１で新たに実行すべきプログラム（新たなプログラム１）が指示された場合、ＣＰＵ１０１は、新たに選択されたプログラムで使用する遅延メモリ１１１のページ数を見積もるとともに、ＲＡＭ１０３上のＭＳテーブルを参照して（図８のステップ８１５）、その見積もったページ数だけ遅延メモリ１１１の空き状態のページを検出する。ここでは、５ページ分を使用するものとし、遅延メモリ１１１の実ページアドレスが若い方から実ページ４，５，６，９，１０が空き状態であることが検出される。そこで、ＣＰＵ１０１は、プログラム１に対応するＢＭＳ（１）＝５と設定し、プログラム１用のＢＰテーブルを６１３に示すように設定し、さらにＭＳテーブルにページ４、５、６、９、１０のＭＳ（ｒｐ）＝１を設定することにより、６２３の斜線に示すページの割当てを行う。これにより、実行中のプログラムに加えて、新たに選択されたプログラム１についても遅延メモリの割当てが為されて実行が開始される。
【００４３】
以上のようにして、プログラムの削除や追加や遅延量の変更などに伴う遅延メモリの領域割当ての変更を、他のプログラムの実行を止めることなく実施できる。この場合、遅延メモリ１１１中のページの断片化が発生することがあるが、断片化が発生しても問題なく動作が継続できる。
【００４４】
図７は、ＤＳＰ１１０が行う各種ハードウェア処理のうちの、ステップ読出部２４０の各レジスタに関連した処理の手順を示す。この処理は、サンプリングクロックＦｓの入力毎に実行される。ステップ７０１でブロックアドレスｂ（レジスタ２４１）に０を設定し、ステップ７０２でＳＰテーブル２１２からＳＰ（ｂ）を取得して０か否かを判定する。０（ＹＥＳ）なら、プログラム０の命令コードの読出しと実行を行うために、ステップ７０３でページアドレスｐ（レジスタ２４３）を０にリセットし、ステップ７０４で、ｃｎｔ（レジスタ２４２）を０から１２７までカウントアップし、ＭＰメモリ２１４のページアドレスｐのページから１２８ステップ分の命令コードを順次読出して実行する。ステップ７０５でＰＡテーブル２１１からＰＡ（ｐ）を取得して０か否かを判定し、０でないときは、プログラムｐには次のページがあるということであるから、ステップ７０６でｐ（レジスタ２４３）にＰＡ（ｐ）を代入して、ステップ７０４に戻り、次のページの実行に入る。ステップ７０５でＰＡ（ｐ）が０（ＹＥＳ）のときは、そのページがプログラムｂの最終ページであり、その実行が完了したということであるので、ステップ７０８に進む。
【００４５】
ステップ７０２でＳＰ（ｂ）が０でないときには（ただし、ｂ＝０）、ブロック０には何のプログラムも割当てられておらず、最初にプログラムが割当てられているブロックのアドレスがＳＰ（ｂ）であるということだから、ステップ７０７でｂ（レジスタ２４１）にＳＰ（ｂ）の値をセットし、ステップ７０９に進む。ステップ７０９で、ｂ（レジスタ２４１）が８か否かを判定し、８であるとき（ＹＥＳ）はそのサンプリング周期の処理を終了する。８でないとき（ＮＯ）は、ステップ７１０でＳＰテーブル２１２からＳＰ（ｂ）を取得して０か否かを判定し、０のとき（ＹＥＳ）は、ブロックｂは何れのプログラムにも割当てられていないということなので、ステップ７０８に戻り、ブロックアドレスｂをインクリメントし、ステップ７０９に進む。ステップ７１０でＳＰ（ｂ）が０でないとき（ＮＯ）は、ＳＰ（ｂ）はプログラムｂの開始ページを示しているので、ステップ７１１に進み、ページアドレスｐ（レジスタ２４３）にそのＳＰ（ｂ）の値をセットして、ステップ７０４に進む。
【００４６】
図８は、図１のＣＰＵ１０１の処理を示す。図８（ａ）は、ＤＳＰ１１０からのプログラムｂの信号処理の消去を指示する消去イベントが発生したときの処理である。ステップ８０１で、ＤＳＰ１１０にプログラムｂの出力のミュートを指示する。ミュートの完了後、ステップ８０２で、ＳＰテーブル２１２のＳＰ（ｂ）に０を書込んで当該プログラムの処理を停止する。なお、停止するのがプログラム０である場合、ＣＰＵ１０１は、ＳＰ（１），ＳＰ（２），…を順に参照し、次に割当てられているプログラムのブロックアドレスを求め、そのブロックアドレスをＳＰ（０）に書込む。また、ｂ≠０であるＳＰ（ｂ）に０を書込んだ場合も、ＳＰ（０）がそのｂの値と等しいかチェックし、等しい場合は、ＳＰ（ｂ＋１），ＳＰ（ｂ＋２），…を順に参照し、次に割当てられているプログラムのブロックアドレスを求め、そのブロックアドレスをＳＰ（０）に書込む。ステップ８０３では、ＰＡテーブル２１１に、プログラムｂが使用していた１ないし複数ページｐ（ステップ８０２で０を書込む前のＳＰ（ｂ）からリンクされていた全てのページ）について次のページにリンクしないためのＰＡ（ｐ）＝０を書込むが、このステップの処理は必須ではなくフェールセーフのためである。ステップ８０４では、ＲＡＭ１０３上のＢＳテーブルに、ブロックｂが何のプログラムにも割当てられていないこと（不使用）を示すＢＳ（ｂ）＝０を書込み、ステップ８０５では、ＲＡＭ１０３上のＰＳテーブルに、ＭＰメモリ２１４中のプログラムｂが使用していた１ないし複数ページｐが開放されたこと（不使用）を示すＰＳ（ｐ）＝０を書き込む。さらに、ステップ８０６では、ブロックｂのプログラムの使用する遅延メモリ１１１のページ数ＢＭＳ（ｂ）を０にするとともに、遅延メモリ１１１中のプログラムｂが使用していた１ないし複数ページｒｐが開放されたこと（不使用）を示すＭＳ（ｒｐ）＝０を書込む。ただし、プログラムｂの使用ページ数が０の場合もあり、その場合にはこのステップで何もしなくてよい。
【００４７】
なお、ＢＳテーブル、ＰＳテーブル、及びＭＳテーブルは、ＣＰＵ１０１側で状態管理するために使用するＲＡＭ１０３上のテーブルである。ブロックアドレスｂに対し、ＢＳ（ｂ）＝１のとき当該ブロックｂが既にプログラムに割当てられていること（使用中）を示し、ＢＳ（ｂ）＝０のとき当該ブロックｂが未だ割当てられていないこと（未使用）を示す。ページアドレスｐに対し、ＰＳ（ｐ）＝１のときＭＰメモリ２１４、係数メモリ２１３、およびアドレスメモリ２１５の各々の当該ページｐが既にプログラムに割当てられていること（使用中）を示し、ＰＳ（ｐ）＝０のとき当該ページｐが未だ割当てられていないこと（未使用）を示す。実ページアドレスｒｐに対し、ＭＳ（ｒｐ）＝１のとき遅延メモリ１１１の当該実ページｒｐが既にプログラムに割当てられていること（使用中）を示し、ＭＳ（ｒｐ）＝０のとき当該実ページｒｐが未だ割当てられていないこと（未使用）を示す。
【００４８】
図８（ｂ）は、未使用のブロックｂに新しく選択された信号処理の設定を指示する選択イベントが発生したときの処理である。この選択イベントは、ＣＰＵ１０１がＢＳテーブルを参照して、ブロックｂが空きであることが確認されている場合にのみ発行可能なイベントである。ステップ８１１では、選択された新信号処理のプログラムのサイズ（ＭＰメモリ２１４上のページ数）をレジスタＮＰＳに設定し、該プログラムが使用する遅延メモリのサイズ（遅延メモリ１１１上のページ数）をレジスタＮＭＳに設定する。
【００４９】
ステップ８１２では、ＰＳテーブルを参照して、レジスタＮＰＳの示すページ数だけＭＰメモリ上の空きページｐ（係数メモリとアドレスメモリの空きページでもある）を検出して新信号処理のプログラムに割当て、ＰＳテーブルに該ページｐが割当済みであることを示すＰＳ（ｐ）＝１を書込む。ステップ８１３では、ＰＡテーブル２１１に、割当てたページｐを順次リンクするようＰＡ（ｐ）を設定する。割当てたページをリンクする際の順番は任意でよいが、例えば、ページ番号の若い順にリンクするようにしてもよい。また、ＮＰＳが１のときは、当然ながらリンクは行われない。ステップ８１４で、新信号処理のプログラムの命令コードと係数データとアドレスデータを、それぞれ、ページサイズ（１２８ステップ）ずつに分割して、ＭＰメモリ２１４と係数メモリ２１３とアドレスメモリ２１５の前記リンクされた複数ページ（ないし前記１ページ）に順次書込む。
【００５０】
次に、ステップ８１５で、ＭＳテーブルを参照して、レジスタＮＭＳの示すページ数だけ遅延メモリ１１１上の空きページｒｐを検出して新信号処理のプログラムに割当て、ＭＳテーブルに該ページｒｐが割当済みであることを示すＭＳ（ｒｐ）＝１を書込む。ステップ８１６で、ＢＭＳテーブル２１６のＢＭＳ（ｂ）にページ数ＮＭＳを書込み、ブロックｂのＢＰテーブルのＢＰ（０）〜ＢＰ（ＮＭＳ−１）に割当てたページｒｐのページ番号を順次書込む。ステップ８１７で、遅延メモリ１１１の割当てたページｒｐの領域を全てゼロクリア（０を書込む）する。
【００５１】
ステップ８１８では、ＳＰテーブル２１２のＳＰ（ｂ）に、ステップ８１３でリンクされた複数ページのうちの先頭ページ（ただし、ＮＰＳが１のときはリンクされない１ページ）の番号を書込む。このＳＰテーブルへのＳＰ（ｂ）の設定によって、ＤＳＰ１１０内において、ブロックｂに設定されたプログラムｂのサンプリング周期毎の実行が開始される。ステップ８１９で、ＢＳテーブルにブロックｂに既にプログラムが割当てられていることを示すＢＳ（ｂ）＝１を設定し、ミュート（ブロックｂのプログラムの削除時にステップ８０１で設定したもの）を解除すると、ＤＳＰ１１０からの当該プログラムｂで処理された音響信号が出力される。
【００５２】
なお、上記実施形態では、遅延メモリのページ制御について、あるプログラムを削除して「新たなプログラム」をＭＰメモリに書込む例で説明したが、「新たなプログラム」を書込む場合に限定されるものではない。すなわち、「新たなプログラム」は、実行指示に先立ってＭＰメモリに書込まれているプログラムであってもよい。また、現在実行されているＭＰを、さらに「新たなプログラム」として実行指示し、複数回繰り返して実行させる場合も含む。
【００５３】
上記実施形態において、ユーザが、ユーザインターフェース（ディスプレイ１０７、マウス１０４、キーボード１０５等）を用いて、プラグインされているエフェクタを削除する操作を行ったときには、信号処理の消去イベントが生成され、図８（ａ）の処理が実行される。また、ユーザが、エフェクタラックのあるブロックで現在のエフェクタとは違うエフェクタを選択する操作を行ったときには、信号処理の消去イベントと選択イベントとが続けて生成され、図８（ａ）の処理と図８（ｂ）の処理とが続けて実行される。
【００５４】
上記実施形態では、ステップ数は４０９６、ブロック数は８、ページ数は３２、ページのサイズは１２８ステップであったが、それぞれ、任意の数値で設計することができる。
【００５５】
また、上記実施形態では、各ステップごとに遅延メモリ１１１の書込命令ないし読出命令を実行できるようになっていたが、遅延メモリ１１１のアクセス速度が遅い場合等に対応するために、数ステップに１回ずつ書込命令ないし読出命令が実行できるようにしてもよい。
【符号の説明】
【００５６】
１０１…ＣＰＵ、１０２…フラッシュメモリ、１０３…ＲＡＭ、１０４…マウス、１０５…キーボード、１０６…ハードディスク、１０７…ディスプレイ、１０８…その他Ｉ／Ｏ、１０９…波形入力部、１１０…ＤＳＰ、１１１…遅延メモリ、１１２…波形出力部、１１３…ＣＰＵバス、２０１…制御レジスタ、２１１…ページ配置（ＰＡ）テーブル、２１２…スタートページ（ＳＰ）テーブル、２１３…係数メモリ、２１４…マイクロプログラム（ＭＰ）メモリ、２１５…アドレスメモリ、２１６…ブロックメモリサイズ（ＢＭＳ）テーブル、２１７…ブロックページ（ＢＰ）テーブル、２４０…ステップ読出部、２５５…範囲制限部。
【図１】
2013140606.tif 000003
【図２】
2013140606.tif 000004
【図３】
2013140606.tif 000005
【図４】
2013140606.tif 000006
【図５】
2013140606.tif 000007
【図６】
2013140606.tif 000008
【図７】
2013140606.tif 000009
【図８】
2013140606.tif 000010