(57)【特許請求の範囲】
【請求項１】
４バイト命令モードを有するＣＰＵが実行する機器制御用ファームウェアをデータ圧縮するために、コンピュータを、
前記機器制御用ファームウェアを保持するデータ保持手段、
前記機器制御用ファームウェアのデータ列のうち、現在データ圧縮処理の対象になっているデータ列（検索データ列）を順次保持するパターン検索バッファ、
前記機器制御用ファームウェアのデータ列のうち、既にデータ圧縮処理の対象になったデータ列の一部又は全部であるスライド辞書用のデータを保持するスライド辞書バッファ、
前記パターン検索バッファの検索データ列と一致する一致データ列を前記スライド辞書バッファ内のデータから検索するパターン検索手段、及び
前記パターン検索手段による検索結果を用いて、スライド辞書方式により前記制御機器用ファームウェアをデータ圧縮するデータ圧縮手段として機能させるためのデータ圧縮プログラムにおいて、
前記データ圧縮手段は、前記機器制御用ファームウェアのデータを、第１のデータ形式、第２のデータ形式、及び第３のデータ形式に変換し、
前記第１乃至第３の各データ形式は、データ形式識別用の識別データ領域を有し、
前記第１のデータ形式は、１ビットの識別データ領域に加えて、データを非圧縮で保持する８ビットのデータ領域を有し、
前記第２のデータ形式は、２ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す１０ビットの位置データ領域と、前記一致データ列のデータ長を示す２ビットのデータ長領域とを有し、
前記第３のデータ形式は、２ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す６ビットの位置データ領域と、前記一致データ列のデータ長を示す２ビットのデータ長領域とを有し、
前記データ圧縮手段は、
前記パターン検索手段を用いて、前記スライド辞書バッファ内のデータから前記パターン検索バッファの検索データ列と一致するデータ列を全て検索して、
前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から２バイトのデータ列と一致するデータ列がない場合には、前記検索データ列のうちの先頭のバイトのデータに基いて、前記第１のデータ形式でデータを生成し、
前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から２バイトのデータ列と一致するデータ列がある場合には、前記一致データ列のうち最長のデータ列について、現在の検索位置からの相対位置が４の倍数となる位置にあるものが存在するか否かを判定して、
前記判定の結果、存在するときは、前記最長の一致データ列に基いて、前記第３のデータ形式でデータを生成し、
前記判定の結果、存在しないときには、前記最長の一致データ列に基いて、前記第２のデータ形式でデータを生成して、
順次、前記機器制御用ファームウェア内のデータの圧縮処理を行うことを特徴とするデータ圧縮プログラム。
【請求項２】
４バイト命令モードを有するＣＰＵが実行する機器制御用ファームウェアをデータ圧縮するために、コンピュータを、
前記機器制御用ファームウェアを保持するデータ保持手段、
前記機器制御用ファームウェアのデータ列のうち、現在データ圧縮処理の対象になっているデータ列（検索データ列）を順次保持するパターン検索バッファ、
前記機器制御用ファームウェアのデータ列のうち、既にデータ圧縮処理の対象になったデータ列の一部又は全部であるスライド辞書用のデータを保持するスライド辞書バッファ、
前記パターン検索バッファの検索データ列と一致する一致データ列を前記スライド辞書バッファ内のデータから検索するパターン検索手段、及び
前記パターン検索手段による検索結果を用いて、スライド辞書方式により前記制御機器用ファームウェアをデータ圧縮するデータ圧縮手段として機能させるためのデータ圧縮プログラムにおいて、
前記データ圧縮手段は、前記機器制御用ファームウェアのデータを、第１のデータ形式、第２のデータ形式、及び第３のデータ形式に変換し、
前記第１乃至第３の各データ形式は、データ形式識別用の識別データ領域を有し、
前記第１のデータ形式は、１ビットの識別データ領域に加えて、データを非圧縮で保持する８ビットのデータ領域を有し、
前記第２のデータ形式は、２ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す１０ビットの位置データ領域と、前記一致データ列のデータ長を示すデータ長領域とを有し、
前記第３のデータ形式は、２ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す６ビットの位置データ領域と、前記一致データ列のデータ長を示すデータ長領域とを有し、
前記第３のデータ形式のデータサイズは、前記第２のデータ形式のデータサイズよりも小さく、
前記データ圧縮手段は、
前記パターン検索手段を用いて、前記スライド辞書バッファ内のデータから前記パターン検索バッファの検索データ列と一致するデータ列を全て検索して、
前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から２バイトのデータ列と一致するデータ列がない場合には、前記検索データ列のうちの先頭のバイトのデータに基いて、前記第１のデータ形式でデータを生成し、
前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から２バイトのデータ列と一致するデータ列がある場合には、前記一致データ列のうち最長のデータ列について、現在の検索位置からの相対位置が４の倍数となる位置にあるものが存在するか否かを判定して、
前記判定の結果、存在するときは、前記最長の一致データ列に基いて、前記第３のデータ形式でデータを生成し、
前記判定の結果、存在しないときには、前記最長の一致データ列に基いて、前記第２のデータ形式でデータを生成して、
順次、前記機器制御用ファームウェア内のデータの圧縮処理を行うことを特徴とするデータ圧縮プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子機器等に搭載されるファームウェア等のデータをデータ圧縮するためのプログラムに関する。
【背景技術】
【０００２】
現在、電子機器の多くは、ＣＰＵ、メモリ（ＲＯＭ、ＲＡＭなど）等を含むマイコンを搭載しており、電源投入時に各種デバイスの設定、状態チェック等の初期化処理などの所定の処理を行って、一連の処理完了後に使用可能状態になるようになっている。この際、予めＲＯＭ等に格納されている初期化プログラムが、ＲＡＭ等の主記憶装置上にロードされ、この初期化プログラムがＣＰＵによって実行されることにより、電子機器を構成する各種デバイスの初期化がなされる。
【０００３】
図８（ａ）は、従来の電子機器の制御部の構成を、（ｂ）は、従来の電子機器に組み込まれるファームウェアの格納状態を示す。従来の電子機器の制御部は、ＣＰＵ１００、ＲＡＭ２００、ＲＯＭ３００及びこれらを結ぶバス４００等からなり、予めＲＯＭ３００等に格納された初期化プログラムや動作プログラムに基いて、バス４００やＩ／Ｏポート（不図示）等のインターフェースを介して、各種デバイス（不図示）と相互にデータの授受を行い、それぞれのデバイスに動作指令したり、状態監視等を行ったりしつつ、電子機器全体の制御を行うようになっている。
【０００４】
また、こうした電子機器の多くは補助記憶装置を持たないので、予めＲＯＭ３００にＩＰＬ（イニシャルプログラムローダ）３１０とファームウェア３１１が一体として格納されている。ＩＰＬ３１０は、起動時にＣＰＵ１００が最初に自動的に実行する領域に設けられているので、電子機器の電源が投入されると、まずＩＰＬ３１０が実行されて、ＩＰＬ３１０内のロードプログラム３１２によりＲＯＭ３００上に格納されたファームウェア３１１は、ＲＡＭ２００上にロードされる。そして、ＲＡＭ２００上にロードされたファームウェア３１１は、ＣＰＵ１００によって実行されて機器の起動処理や動作制御が行われる。
【０００５】
一般的に、ＲＯＭは、ＲＡＭと比較して、容量あたりの価格が高く、また速度も遅いという欠点がある。また、近年では、電子機器の高機能化に伴い、機器を制御するファームウェア等のプログラムが大規模化し、プログラムサイズが大きくなる傾向がある。サイズの大きいプログラムをそのままＲＯＭ上に置くことは、高価なＲＯＭを大量に使うことになるため、機器のコストアップに繋がるという問題があった。こうした問題に対して、予めプログラムをデータ圧縮し、圧縮済プログラムをＲＯＭ上に格納しておき、圧縮済プログラムをデータ展開するルーチンを備えたＩＰＬによって、起動時に圧縮済プログラムを展開してＲＡＭ上に配置して、プログラムを起動・実行するという手法がとられるようになっている。
【０００６】
しかし、この一方で、プログラムをデータ圧縮することにより、機器の起動時にＲＯＭ上に格納された圧縮済プログラムをＲＡＭ上にデータ展開するのに必要な処理時間が長くなり、機器の起動が遅くなってしまうという問題があった。
【０００７】
電子機器等に搭載するプログラムにおけるこれらの問題の改善にあたって、例えば特許文献１では、プログラムの展開速度を高めるために、予めＲＯＭに格納した圧縮済システムプログラムを装置起動時にＣＰＵ及びデータ展開ハードウェア（ＣＯＤＥＣ）を用いて展開し、ＲＡＭ上に配置する構成としている。また、特許文献２では、ＣＰＵのマシンコードを、コードが意味する命令の性質によって複数のタイプに区分し、タイプ毎に異なる圧縮アルゴリズムを使用してマシンコードを圧縮して、ＲＯＭに保存するプログラムの圧縮率を高めている。この他に、プログラムコードの圧縮率を高める手法として、漢字コードやカラーコード等の入力データ長の規則性を柔軟に取込んで、複数バイト長のデータを効率よく圧縮する手法（特許文献３）、ＲＩＳＣ  ＣＰＵにおいて、拡張命令コードで置換することにより、コードの冗長フィールドを除去したうえで、プログラムを圧縮する手法（特許文献４）、プログラムのコードを並べ替えることによって、プログラム境界の圧縮率の低下を抑える手法（特許文献５）等が、知られている。
【特許文献１】特開２００２−３６６３６２号公報
【特許文献２】特開平１０−３２０１７２号公報
【特許文献３】特開平０５−１２８１００号公報
【特許文献４】特開２０００−２２２２０３号公報
【特許文献５】特開２００４−３２８０９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
これらのプログラムが搭載される電子機器において、プログラムのＲＯＭ上の容量、及び起動時のＲＡＭ上へのデータ展開速度は、いずれも機器のコストや性能に重要な影響を与えるものであり、トレードオフの関係にある両者を総合的な観点からバランスよく構成することが重要である。特許文献１及び２〜５に例示した手法は、いずれか一方に重点が置かれているもので、専用ハードウェアを用いることによってデータ展開処理速度の向上と引き換えにコスト上昇を招いたり、複雑なルールによりプログラムコードの圧縮率を高めたために、データ展開プログラムが複雑化し、データ展開に時間がかかったりして、コストと性能（データ展開速度）をバランスよく構成することが困難であった。
【０００９】
本発明は、上記の点に鑑みてなされたもので、電子機器に搭載されるマイコンのファームウェア等のプログラムコードをデータ圧縮するデータ圧縮プログラムにおいて、プログラムコードを搭載する機器のＣＰＵの命令コード長の特徴を利用して、従来のスライド辞書方式のデータ圧縮処理よりも高いデータ圧縮率を実現すると共に、単純なデータ展開処理により、高速にデータ展開可能な圧縮コードを生成することが可能なデータ圧縮プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために請求項１の発明は、４バイト命令モードを有するＣＰＵが実行する機器制御用ファームウェアをデータ圧縮するために、コンピュータを、前記機器制御用ファームウェアを保持するデータ保持手段、前記機器制御用ファームウェアのデータ列のうち、現在データ圧縮処理の対象になっているデータ列（検索データ列）の一部を順次保持するパターン検索バッファ、前記機器制御用ファームウェアのデータ列のうち、既にデータ圧縮処理の対象になったデータ列の一部又は全部であるスライド辞書用のデータを保持するスライド辞書バッファ、前記パターン検索バッファの検索データ列と一致する一致データ列を前記スライド辞書バッファ内のデータから検索するパターン検索手段、及び前記パターン検索手段による検索結果を用いて、スライド辞書方式により前記制御機器用ファームウェアをデータ圧縮するデータ圧縮手段として機能させるためのデータ圧縮プログラムにおいて、前記データ圧縮手段は、前記機器制御用ファームウェアのデータを、第１のデータ形式、第２のデータ形式、及び第３のデータ形式に変換し、前記第１乃至第３の各データ形式は、データ形式識別用の識別データ領域を有し、前記第１のデータ形式は、１ビットの識別データ領域に加えて、データを非圧縮で保持する８ビットのデータ領域を有し、前記第２のデータ形式は、２ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す１０ビットの位置データ領域と、前記一致データ列のデータ長を示す２ビットのデータ長領域とを有し、前記第３のデータ形式は、２ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す６ビットの位置データ領域と、前記一致データ列のデータ長を示す２ビットのデータ長領域とを有し、前記データ圧縮手段は、前記パターン検索手段を用いて、前記スライド辞書バッファ内のデータから前記パターン検索バッファの検索データ列と一致するデータ列を全て検索して、前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から２バイトのデータ列と一致するデータ列がない場合には、前記検索データ列のうちの先頭のバイトのデータに基いて、前記第１のデータ形式でデータを生成し、前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から２バイトのデータ列と一致するデータ列がある場合には、前記一致データ列のうち最長のデータ列について、現在の検索位置からの相対位置が４の倍数となる位置にあるものが存在するか否かを判定して、前記判定の結果、存在するときは、前記最長の一致データ列に基いて、前記第３のデータ形式でデータを生成し、前記判定の結果、存在しないときには、前記最長の一致データ列に基いて、前記第２のデータ形式でデータを生成して、順次、前記機器制御用ファームウェア内のデータの圧縮処理を行うこととした。
【００１１】
請求項２の発明は、４バイト命令モードを有するＣＰＵが実行する機器制御用ファームウェアをデータ圧縮するために、コンピュータを、前記機器制御用ファームウェアを保持するデータ保持手段、前記機器制御用ファームウェアのデータ列のうち、現在データ圧縮処理の対象になっているデータ列（検索データ列）を順次保持するパターン検索バッファ、前記機器制御用ファームウェアのデータ列のうち、既にデータ圧縮処理の対象になったデータ列の一部又は全部であるスライド辞書用のデータを保持するスライド辞書バッファ、前記パターン検索バッファの検索データ列と一致する一致データ列を前記スライド辞書バッファ内のデータから検索するパターン検索手段、及び前記パターン検索手段による検索結果を用いて、スライド辞書方式により前記制御機器用ファームウェアをデータ圧縮するデータ圧縮手段として機能させるためのデータ圧縮プログラムにおいて、前記データ圧縮手段は、前記機器制御用ファームウェアのデータを、第１のデータ形式、第２のデータ形式、及び第３のデータ形式に変換し、前記第１乃至第３の各データ形式は、データ形式識別用の識別データ領域を有し、前記第１のデータ形式は、１ビットの識別データ領域に加えて、データを非圧縮で保持する８ビットのデータ領域を有し、前記第２のデータ形式は、２ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す１０ビットの位置データ領域と、前記一致データ列のデータ長を示すデータ長領域とを有し、前記第３のデータ形式は、２ビットの識別データ領域に加えて、前記一致データ列の相対位置を示す６ビットの位置データ領域と、前記一致データ列のデータ長を示すデータ長領域とを有し、前記第３のデータ形式のデータサイズは、前記第２のデータ形式のデータサイズよりも小さく、前記データ圧縮手段は、前記パターン検索手段を用いて、前記スライド辞書バッファ内のデータから前記パターン検索バッファの検索データ列と一致するデータ列を全て検索して、前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から２バイトのデータ列と一致するデータ列がない場合には、前記検索データ列のうちの先頭のバイトのデータに基いて、前記第１のデータ形式でデータを生成し、前記検索の結果、前記スライド辞書バッファ内のデータの中に、前記検索データ列の先頭から２バイトのデータ列と一致するデータ列がある場合には、前記一致データ列のうち最長のデータ列について、現在の検索位置からの相対位置が４の倍数となる位置にあるものが存在するか否かを判定して、前記判定の結果、存在するときは、前記最長の一致データ列に基いて、前記第３のデータ形式でデータを生成し、前記判定の結果、存在しないときには、前記最長の一致データ列に基いて、前記第２のデータ形式でデータを生成して、順次、前記機器制御用ファームウェア内のデータの圧縮処理を行うこととした。
【発明の効果】
【００１２】
請求項１及び２の発明によれば、高速処理が可能なスライド辞書方式のデータ圧縮処理において、４バイト命令モードを有するＣＰＵが実行するプログラム中に４バイト間隔で出現する割合が高いデータ列について、データサイズが小さい圧縮データ形式（第３のデータ形式）を用いて高いデータ圧縮率で符号化し、その他のデータ列でデータ圧縮可能なものについては、従来のスライド辞書方式と同様な圧縮データ形式（第２のデータ形式）でデータ圧縮するようにした。これにより従来のスライド辞書方式のデータ圧縮処理よりも高いデータ圧縮率を実現することができる。また、圧縮コードの構成を３種類のデータ形式からなる単純なものとしたので、単純なデータ展開処理により、高速なデータ展開処理が可能となる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の一実施の形態に係る機器制御用ファームウェアのデータ圧縮を行うデータ圧縮プログラムについて、図１乃至図７を参照して説明する。まず、データ圧縮プログラムを動作させる装置、及びデータ圧縮された圧縮済ファームウェア５を搭載する電子機器の構成について図１を用いて説明する。図１（ａ）は、データ圧縮プログラム３を動作させるコンピュータ１の構成である。図１（ｂ）は、コンピュータ１において生成された圧縮済ファームウェア５を搭載する電子機器８の制御部の構成である。
【００１５】
コンピュータ１は、演算処理を行うＣＰＵ２と、ＨＤＤ（ハードディスク）６とを備えている。このＨＤＤ６には、ＣＰＵ２が実行するデータ圧縮プログラム３、データ圧縮の対象となる機器制御用ファームウェアとしてのファームウェア４、及び作成される圧縮済ファームウェア５が格納される。また、コンピュータ１は、処理中のデータを一時的に保存し、実行時にデータ圧縮プログラムがロードされるＲＡＭ７（データ保持手段）を備える。
【００１６】
データ圧縮プログラム３により生成された圧縮済ファームウェア５は、電子機器８の制御部において、電子機器８のＲＯＭ９にＩＰＬ１０と共に格納され、起動時に電子機器８に搭載されたＡＲＭ  ＣＰＵ１１によって、ＲＡＭ１２上にデータ展開されて、実行処理されるようになっている。なお、ＡＲＭ  ＣＰＵ１１は、ＡＲＭ  Ｍｏｄｅ命令とＴｈｕｍｂ  Ｍｏｄｅ命令の２種類の命令モードを有しており、ＡＲＭ  Ｍｏｄｅ命令は、４バイト命令であり、この命令モードによるプログラムは、プログラムデータ中に４バイト毎に同一のデータ列が現れることが多くなるという特徴がある。
【００１７】
データ圧縮プログラム３は、実行時にＨＤＤ６からＲＡＭ７上にロードされる。データ圧縮プログラム３により使用されるＲＡＭ７上のメモリ空間には、データ圧縮処理の対象となるファームウェア４を格納するためのファームウェア格納領域７ａ、パターン検索バッファ７ｂ、スライド辞書バッファ７ｃ、圧縮済ファームウェア格納領域７ｄが配され、ファームウェア４は、ＨＤＤ６からファームウェア格納領域７ａにロードされる。
【００１８】
なお、データ圧縮プログラム３は、データ圧縮手法として、スライド辞書方式を採用している。このデータ圧縮プログラム３とＣＰＵ２とは、請求項におけるデータ圧縮手段及びパターン検索手段に相当する。
【００１９】
次に、本実施形態におけるスライド辞書方式によるデータ圧縮について図２を参照して説明する。図２は、データ圧縮対象となるファームウェア４と、スライド辞書方式に用いるデータの関係及び構成を示す。スライド辞書方式によるデータ圧縮は、ファームウェア４の一部をスライド辞書領域４ａとし、スライド辞書領域の後ろに続く一部の領域をデータ圧縮処理対象領域４ｂとして、データ圧縮処理対象領域４ｂの検索データ列１３と同一のデータ列をスライド辞書領域４ａから検索し、一致データ列１４が見つかった場合は、一致データ列１４の相対位置（データ圧縮処理対象領域４ｂの先頭から一致データ列１４の先頭までのバイト数）と、一致データ列１４のデータ長を所定のデータ形式に変換し、検索データ列１３の単位圧縮データとするもので、スライド辞書領域４ａ及びデータ圧縮処理対象領域４ｂを、順次後方に移動させて、ファームウェア４全体についてデータ圧縮処理を行い、圧縮済ファームウェア５を生成する。
【００２０】
本実施形態では、スライド辞書領域４ａをスライド辞書バッファ７ｃに、データ圧縮処理対象領域４ｂをパターン検索バッファ７ｂに、それぞれセットして処理を行う。なお、スライド辞書領域４ａは、領域サイズが２バイト〜１０２４バイトで、ＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）方式としており、処理開始時には、領域サイズが２バイトで、処理の進行に伴い、最終的には１０２４バイトとなり、それ以後は、最初のデータが順次押し出されるようになっている。
【００２１】
次に、第１〜第３のデータ形式１５ａ、１５ｂ、１５ｃについて、図３を参照して説明する。図３（ａ）、（ｂ）、（ｃ）は各々、データ圧縮処理において検索データ列１３が変換される３種類のデータ形式の構造をあらわす。データ圧縮処理においては、検索データ列１３を第１〜第３のデータ形式への変換し、単位圧縮データを生成する処理をデータ処理単位としており、単位圧縮データ毎の処理を繰返して、ファームウェア４全体のデータ圧縮を行っている。
【００２２】
各々のデータ形式１５ａ〜１５ｃは、それぞれのデータ形式を識別するための識別データ領域ＩＤを有している。第１のデータ形式としての非圧縮データ形式１５ａは、全体で９ビットのデータ領域を有し、データ領域の先頭から順に、１ビットの識別データ領域ＩＤと、ファームウェア４を非圧縮で格納する８ビットのコピーデータ領域ＣＰとを有する。
【００２３】
非圧縮データ形式１５ａの識別データ領域ＩＤは常に「０」がセットされており、この後のコピーデータ領域ＣＰにファームウェア４内の１バイト（８ビット）のデータがそのまま格納されるようになっている。
【００２４】
第２のデータ形式としての第1圧縮データ形式１５ｂは、全体で１４ビットのデータ領域を有し、データ領域の先頭から順に、２ビットの識別データ領域ＩＤと、最長の一致データ列１４の相対位置を示す１０ビットの位置データ領域ＰＯＳと、そのデータ長を示す２ビットのデータ長領域ＬＮとを有する。第１圧縮データ形式１５ｂの識別データ領域ＩＤは、常に「１０」がセットされる。位置データ領域ＰＯＳには、最長の一致データ列１４の相対位置、すなわち検索データ列１３の先頭から、最長の一致データ先頭位置までのバイト数が相対位置データとして格納される。なお、位置データ領域ＰＯＳを１０ビットとしているので、最小値を１バイト（「００００００００００」）として、最大１０２４バイト（「１１１１１１１１１１」）までの相対位置を格納することができる。データ長領域ＬＮは、２ビットであるので、最長の一致データ列１４のデータ長を２バイト（「００」）〜５バイト（「１１」）の範囲で保持できるようになっている。従って、第１圧縮データ形式１５ｂでは、最長の一致データ列１４のデータ長に応じて、１４／１６〜１４／４０の範囲のデータ圧縮率を得ることができる。
【００２５】
第３のデータ形式としての第２圧縮データ形式１５ｃは、全体で１０ビットのデータ領域を有し、データ領域の先頭から順に、２ビットの識別データ領域ＩＤと、最長の一致データ列１４の相対位置を示す６ビットの位置データ領域ＰＯＳと、そのデータ長を示す２ビット長のデータ長領域ＬＮとを有する。第２圧縮データ形式１５ｃの識別データ領域ＩＤは、常に「１１」がセットされる。位置データ領域ＰＯＳには、最長の一致データ列１４の相対位置、すなわち検索データ列１３の先頭から、最長の一致データ列１４の先頭位置までのバイト数が相対位置データとして格納される。なお、第２圧縮データ形式１５ｃは、検索データ列１３の先頭からの最長の一致データ列１４の相対位置が４、８、１２、…、２５６バイトのように４の倍数となっている場合にのみ用いられる。従って、位置データ領域ＰＯＳ内の６ビットの位置データは、最小値を４バイト（「００００００」）として、４バイト刻みに最大値２５６バイト（「１１１１１１」）までの相対位置データを格納することができる。データ長領域ＬＮは、２ビットであるので、最長の一致データ列１４のデータ長を２バイト（「００」）〜5バイト（「１１」）の範囲で保持できるようになっている。従って、このデータ形式では、最長の一致データ列１４のデータ長に応じて、１０／１６〜１０／４０の範囲の圧縮率を得ることができる。
【００２６】
次に、データ圧縮プログラム３の処理の全体の流れについて、図４を参照して説明する。以下の処理は、データ圧縮プログラム３に基いてＣＰＵ２が実行する。
【００２７】
まず、Ｓ１における初期化処理として、ＣＰＵ２は、スライド辞書バッファ７ｃ及びパターン検索バッファ７ｂ等の初期化を行う。データ圧縮処理は２バイト以上の最長の一致データ列１４を対象として行うので、最初のスライド辞書領域４ａは、ファームウェア４の先頭から２バイトの領域となる。そしてこのスライド辞書領域４ａの直後に続く５バイトの領域が最初のデータ圧縮処理対象領域４ｂとなり、それぞれの領域のデータが、スライド辞書バッファ７ｃ及びパターン検索バッファ７ｂにセットされる。
【００２８】
次に、ＣＰＵ２は、Ｓ２に示される一致データ列（一致バイト列）検出処理を行う。具体的には、ＣＰＵ２は、パターン検索バッファ７ｂの先頭２バイトの検索データ列１３と、スライド辞書バッファ７ｃ内のデータ列を順次比較して一致データ列１４の検出を行う。一致データ列１４が検出された場合、引き続き順次検索データ列１３を、パターン検索バッファ７ｂの先頭から最大５バイトまで１バイトずつ増やし、最長の一致データ列１４を全て検索し、抽出する。この処理によって、最長の一致データ列１４の相対位置と、データ長が得られる。
【００２９】
次に、ＣＰＵ２は、Ｓ３に示されるように、上記の検出処理で得られた結果から、上記の検出処理が完了した検索データ列１３を変換するデータ形式を選択し、選択されたデータ形式に変換された単位圧縮データを圧縮済ファームウェア格納領域７ｄの最後尾に追加する。そして、ＣＰＵ２は、スライド辞書領域４ａの最後尾を処理が完了したデータ圧縮処理対象領域４ｂの検索データ列末部まで移動させ、スライド辞書バッファ７ｃの内容をこのスライド辞書領域４ａに対応した内容に更新する。
【００３０】
次に、ＣＰＵ２は、Ｓ４に示されるパターン検索バッファ更新処理を実行する。具体的には、次の一致データ列検出処理におけるデータ圧縮処理対象領域４ｂは、パターン検索処理が完了した検索データ列１３の直後から５バイトの領域となるので、パターン検索バッファ７ｂに検索データ列１３の直後から５バイトの領域の内容がセットされる。
【００３１】
そして、ＣＰＵ２は、ファームウェア４の最後までデータ圧縮処理が完了すると（Ｓ５でＹＥＳ）、データ圧縮処理を終了し、そうでない場合は（Ｓ５でＮＯ）、Ｓ２の処理に戻る。
【００３２】
以後、Ｓ２〜Ｓ５の処理を繰返し、圧縮済ファームウェア５が、圧縮済ファームウェア格納領域７ｄに生成される。
【００３３】
次に、上記Ｓ２における一致データ列１４の検出処理について再度図２を参照して説明する。ＣＰＵ２は、スライド辞書バッファ７ｃ内にパターン検索バッファ７ｂの検索データ列１３と一致する一致データ列１４があるかどうかを検索し、検索結果を所定の形式に従って出力する。一致データ列１４の検索においては、パターン検索バッファ７ｂ中の検索データ列１３について最長となる一致データ列１４を全て検索する。この場合において、検索データ列１３は、常にパターン検索バッファ７ｂの先頭データから始まるデータ列としている。なお、最長の一致データ列１４が複数検出された場合、その相対位置が２５６バイト以下のときには、相対位置が４の倍数となるものが優先的に選択される。
【００３４】
次に、上記Ｓ３に示されるデータ圧縮処理とスライド辞書更新処理の流れについて、図５を参照して説明する。図５は、データ圧縮処理を行って単位圧縮データを生成し、スライド辞書更新する工程を示す。
【００３５】
まず、ＣＰＵ２は、上記一致データ列検出処理の結果、一致データ列１４のデータ長が、２バイト以上であるかどうかにより、データを圧縮処理するかどうかの判定を行う。ＣＰＵ２は、上記一致データ列検出処理の結果、一致データ列１４のデータ長が２バイト未満の場合は（Ｓ１１でＮＯ）、検索データ列１３の先頭バイトのデータを非圧縮データ形式１５ａに変換し（Ｓ１３）、データ長が２バイト以上の場合は（Ｓ１１でＹＥＳ）、第１圧縮データ形式１５ｂ又は第２圧縮データ形式１５ｃへ変換する（Ｓ１２）。
【００３６】
第１圧縮データ形式１５ｂ又は第２圧縮データ形式１５ｃに変換する場合、上記一致データ列検出処理で検出された最長の一致データ列１４の相対位置によって、いずれかの圧縮データ形式が選択される。すなわち、ＣＰＵ２は、最長の一致データ列１４の相対位置が、４の倍数であり、かつ２５６バイト以下である場合は（Ｓ１２でＹＥＳ）、第２圧縮データ形式１５ｃの圧縮データ形式を選択し（Ｓ１５）、これ以外の場合は（Ｓ１２でＮＯ）、第１圧縮データ形式１５ｂの圧縮データ形式を選択する（Ｓ１４）。
【００３７】
非圧縮データ形式１５ａが選択された場合、ＣＰＵ２は、パターン検索バッファ７ｂの先頭の１バイトを、非圧縮データ形式１５ａのコピーデータ領域ＣＰにセットし、生成した単位圧縮データを圧縮済ファームウェア格納領域７ｄの最後尾に追加する。
【００３８】
第１圧縮データ形式１５ｂが選択された場合、ＣＰＵ２は、最長の一致データ列１４の相対位置及びデータ長を、それぞれ位置データ領域ＰＯＳ及びデータ長領域ＬＮにセットし、生成した単位圧縮データを圧縮済ファームウェア格納領域７ｄの最後尾に追加する。
【００３９】
第２圧縮データ形式１５ｃが選択された場合、ＣＰＵ２は、最長の一致データ列１４の相対位置及びデータ長を、それぞれ位置データ領域ＰＯＳ及びデータ長領域ＬＮにセットし、生成した単位圧縮データを圧縮済ファームウェア格納領域７ｄの最後尾に追加する。
【００４０】
最後に、ＣＰＵ２は、スライド辞書領域４ａを後方にスライドさせて、スライド辞書領域４ａの最後尾を処理が完了したデータ圧縮処理対象領域４ｂの検索データ列１３の末部に移し、スライド辞書バッファ７ｃの内容をこれに合わせて更新する（Ｓ１６）。
【００４１】
次に、上記のデータ圧縮プログラム３により生成され、図１（ｂ）に示す電子機器のＲＯＭ９上に搭載された圧縮済ファームウェア５のＲＡＭ１２へのデータ展開処理の流れについて、図６、図７を参照して説明する。図６は、圧縮済ファームウェア５のデータ展開の処理の流れを示す。図７（ａ）〜（ｃ）は、圧縮済ファームウェア５の単位圧縮データのデータ展開処理について、展開データの対応付けをデータ形式毎に示す。
【００４２】
圧縮済ファームウェア５のデータ展開処理は、圧縮済ファームウェア５の先頭から最後まで、順に単位圧縮データ毎に処理される。なお、以下の処理は、ＩＰＬ１０内のデータ展開処理プログラムに基き、ＡＲＭ  ＣＰＵ１１が実行する。
【００４３】
まず、ＡＲＭ  ＣＰＵ１１は、初期化処理として、現在の処理位置を示すリードポインタの初期値のセット、データ展開後のファームウェア４のサイズ等を取得する（Ｓ２１）。
【００４４】
次に、ＡＲＭ  ＣＰＵ１１は、リードポインタが指し示す単位圧縮データの第１ビットが「０」であるか否かを判定し、第１ビットが「０」である場合（Ｓ２２でＹＥＳ）、単位圧縮データが非圧縮データ形式１５ａであると判定して、非圧縮データ展開処理（Ｓ２４）に移り、第１ビットが「０」でない場合は（Ｓ２２でＮＯ）、次の判定処理を行う（Ｓ２３）。
【００４５】
更にＡＲＭ  ＣＰＵ１１は、この単位圧縮データについて、第２ビットが「０」であるか否かを判定し、第２ビットが「０」である場合（Ｓ２３でＹＥＳ）、単位圧縮データが、第１圧縮データ形式１５ｂであると判定し、第１圧縮データ展開処理（Ｓ２５）に移り、第２ビットが「０」でない場合（Ｓ２３でＮＯ）、単位圧縮データが、第２圧縮データ形式１５ｃであると判定し、第２圧縮データ展開処理（Ｓ２６）に移る。
【００４６】
上記Ｓ２４の処理において、ＡＲＭ  ＣＰＵ１１は、非圧縮データ形式１５ａのデータについては、図７（ａ）に示すように、単位圧縮データ中のコピーデータ領域ＣＰから非圧縮データのみを抽出し、このデータ列Ｄ０をＲＡＭ１２上のファームウェア格納領域１２ａの最後尾に追加する。
【００４７】
上記Ｓ２５の処理において、ＡＲＭ  ＣＰＵ１１は、第１圧縮データ形式１５ｂのデータについては、以下のように展開処理を行う。すなわち、図７（ｂ）に示すように、ファームウェア格納領域１２ａにおいて、現在処理中の単位圧縮データ（図中の１５ｂのデータ）中の位置データ領域ＰＯＳ及びデータ長領域ＬＮに格納された相対位置、データ長に基き、データ展開済のデータの最後尾を起点として、（相対位置＋１）バイト分手前の位置を先頭とし、（データ長＋２）バイト分のデータ列Ｄ１を抽出して、抽出されたデータ列Ｄ１をファームウェア格納領域１２ａの最後尾に追加する。
【００４８】
上記Ｓ２６の処理において、ＡＲＭ  ＣＰＵ１１は、第２圧縮データ形式１５ｃのデータについては、以下のように展開処理を行う。すなわち、図７（ｃ）に示すように、ファームウェア格納領域１２ａにおいて、現在処理中の単位圧縮データ（図中の１５ｃのデータ）中の位置データ領域ＰＯＳ及びデータ長領域ＬＮに格納された相対位置、データ長に基き、データ展開済のデータの最後尾を起点として、［４×（相対位置＋１）］バイト分手前の位置を先頭とし、（データ長＋２）バイト分のデータ列Ｄ２を抽出して、抽出されたデータ列Ｄ２をファームウェア格納領域１２ａの最後尾に追加する。
【００４９】
現在処理中の単位圧縮データのデータ展開処理が完了すると、圧縮済ファームウェア５の最後までデータ展開処理が完了したかを判定し（Ｓ２７）、最後まで完了していない場合は（Ｓ２７でＮＯ）、リードポインタを次の単位圧縮データに更新し、Ｓ２２に戻る。
【００５０】
そして、ＡＲＭ  ＣＰＵ１１は、圧縮済ファームウェア５の最後に至るまで順次単位圧縮データのデータ展開処理を行い、圧縮済ファームウェア５の最後まで到達した時点で（Ｓ２７でＹＥＳ）、データ展開処理を終了する。このようにして、ＡＲＭ  ＣＰＵ１１は、ＲＯＭ９上にデータ圧縮されて格納されていた圧縮済ファームウェア５を、ＲＡＭ１２上にデータ展開する。データ展開されたファームウェア４がＡＲＭ  ＣＰＵ１１によって実行されることにより、電子機器８の初期化等が行われ、使用可能状態となる。
【００５１】
以上のようにして、本発明に係るデータ圧縮プログラム３によって、ファームウェア４をデータ圧縮することにより、次のような効果を得ることができる。すなわち、電子機器８の制御部に搭載されたＡＲＭ  ＣＰＵ１１の有する命令モード（４バイトのＡＲＭ  Ｍｏｄｅ命令）の特徴により、ＡＲＭ  ＣＰＵ１１が実行するプログラムコード中には、４バイト単位に同じデータが出現する割合が高いので、相対位置を４ビット単位とする位置データ領域を持つ第２圧縮データ形式１５ｃを用いることにより、位置データ領域のデータ量（ビット数）を少なく抑えることができると共に、データ圧縮率を高めることができる。また、ＡＲＭ  ＣＰＵ１１が実行する命令コードでは、Ｃｏｎｄｉｔｉｏｎビットやオペコード固有のビット列は、上位側のビットに集中しているため、４バイト単位のデータの出現頻度は更に高まり、データ圧縮率を更に高めることができる。そして、出現頻度の低い命令その他のコードについては、従来のスライド辞書方式と同様な第１圧縮データ形式１５ｂを用いてデータ圧縮することとしているので、全体として従来のスライド辞書方式のデータ圧縮処理よりも高いデータ圧縮率（約６３％）を実現することができる。
【００５２】
しかも、データ圧縮に用いるデータ形式はこれら２個の圧縮データ形式１５ｂ、１５ｃに加えて、非圧縮データ形式１５ａの３データ形式として、データ形式数を限定し、生成される圧縮コードは単純な構造となるように構成されているので、データ展開処理を行うに際しても簡単なアルゴリズムの処理ルーチンにより展開処理することができるので、高速なデータ展開処理を行うことができる。
【００５３】
また、ＡＲＭ  ＣＰＵ１１の４バイト命令モードによらず、複数種類の命令モードや処理単位を有するＣＰＵの処理特徴によって、プログラムコード中に所定間隔で出現する割合が高いデータ列に対して、現在の検索位置からの相対位置に応じた複数の圧縮データ形式を設定し、これらの圧縮データ形式を用いてプログラムをデータ圧縮することにより、圧縮コードの構成が単純な構成となり、従来と同等以上のデータ圧縮率を実現すると共に、簡単なアルゴリズムの処理ルーチンにより展開処理することができるので、高速なデータ展開処理を行うことができる。
【００５４】
なお、本発明は、上記各実施形態の構成に限られず、発明の趣旨を変更しない範囲で種々の変形が可能である。
【図面の簡単な説明】
【００５５】
【図１】（ａ）は、本発明の実施形態に係るデータ圧縮プログラムを動作させるコンピュータの構成図、（ｂ）は、同コンピュータにおいて生成された圧縮済ファームウェアを搭載する電子機器の制御部の構成図。
【図２】データ圧縮対象であるファームウェアと、スライド辞書方式に用いるデータの関係及び構成を示す図。
【図３】（ａ）は、データ圧縮処理で使用する非圧縮データ形式のデータ構造を示す図、（ｂ）は、同第１圧縮データ形式のデータ構造を示す図、（ｃ）は、同第２圧縮データ形式のデータ構造を示す図。
【図４】データ圧縮プログラムによるデータ圧縮処理の流れを示すフローチャート。
【図５】データ圧縮処理、及びスライド辞書更新処理のフローチャート。
【図６】圧縮済ファームウェアのデータ展開処理のフローチャート。
【図７】（ａ）は、非圧縮データ形式のデータ展開における展開データとの対応付けを示す図、（ｂ）は、第１圧縮データ形式の同対応付けを示す図、（ｃ）は、第２圧縮データ形式の同対応付けを示す図。
【図８】（ａ）は、従来の電子機器の制御部の構成図、（ｂ）は、従来の組込み機器のファームウェアの格納状態を示す図。
【符号の説明】
【００５６】
１  コンピュータ
２  ＣＰＵ
３  データ圧縮プログラム
４  ファームウェア（機器制御用ファームウェア）
４ａ  スライド辞書領域
４ｂ  データ圧縮処理対象領域
５  圧縮済ファームウェア
７ａ  ファームウェア格納領域
７ｂ  パターン検索バッファ
７ｃ  スライド辞書バッファ
８  電子機器
１３  検索データ列
１４  一致データ列
１５ａ  非圧縮データ形式（第１のデータ形式）
１５ｂ  第１圧縮データ形式（第２のデータ形式）
１５ｃ  第２圧縮データ形式（第３のデータ形式）
ＩＤ  識別データ領域
ＣＰ  コピーデータ領域
ＰＯＳ  位置データ領域
ＬＮ  データ長領域
【図１】
0004600342.tif 000002
【図２】
0004600342.tif 000003
【図３】
0004600342.tif 000004
【図４】
0004600342.tif 000005
【図５】
0004600342.tif 000006
【図６】
0004600342.tif 000007
【図７】
0004600342.tif 000008
【図８】
0004600342.tif 000009