« I2Cのクロック | トップページ | 曲の選択 »

2016年1月 5日 (火)

非圧縮zip

曲データ(mdxファイル)は、非圧縮zipとしてアーカイブし、そのままEEPROMに書き込むことにする。
ファイルはフォルダにまとめて放り込み、フォルダごと圧縮すると作業が楽になる。
指定番号のmdxデータの先頭アドレスを返す関数を、Windows上で書いて検証する。

//	------------------------------------------------------------
//	非圧縮zipに格納された指定ファイルのoffsetを返す
//	------------------------------------------------------------
int zipGetFileOffset(int num) {
	int len;			// ファイル名の長さ
	int size = 0;		// ファイルサイズ
	int offset = zipHeaderSkip();			// zipファイルのヘッダをスキップ
	printf( "offset = %04x\n", offset );

	for ( int i=0; i<=num; i++ ) {
		printf( "mdx(%d) info ---------->\n", i );
		size = eepromRead16i( offset+0x0016 );		// ファイルサイズ
		len = eepromRead16i( offset+0x001a );		// ファイル名の長さ
		printf( "fileSize = %d\n", size );
		printf( "filenameLength = %d\n", len );
		fseek(fp, offset+0x001e, SEEK_SET);			// ファイル名へ
		fread( name, 1, len, fp );
		name[len] = '\0';
		printf( "name = %s\n", name );
		offset += 0x1e + len + size;
	}
	offset -= size;
	return offset;
}

//	------------------------------------------------------------
//	フォルダごと非圧縮zipでアーカイブされたファイルの
//	先頭部分をスキップする
//	------------------------------------------------------------
int zipHeaderSkip() {
	int len = eepromRead16i( 0x001a );
	printf( "filenameLength = %d\n", len );
    fseek(fp, 0x001e, SEEK_SET);			// filename length
	fread( name, 1, len, fp );
	name[len] = '\0';
	printf( "name = %s\n", name );
	return ( 0x001a + 2 + 2 + len );
}

コツコツと作るだけだ。バグが出るような場所はない。
eepromRead16i()という関数は、ディスクからファイルを読み込む処理を、EEPROMからの読み出し処理に似せたものだ。
MDXはX68000の音楽データだから、2バイトデータはすべてビッグエンディアンである。
よって、ビッグエンディアンのeepromRead16()に対して、リトルエンディアンのeepromReadi()を用意した。
この関数の出力結果はこんな感じになった。

ファイル名=mdxLib.zipをテストします
filenameLength = 5
name = test/
offset = 0023
mdx(0) info ---------->
fileSize = 15240
filenameLength = 13
name = test/DS04.mdx
mdx(1) info ---------->
fileSize = 6850
filenameLength = 19
name = test/dTwinbee17.mdx
target offset = 3c07

出力された3c07番地は、たしかに曲データの先頭だった。特に問題はなさそうだ。
そのまま演奏システムに組み込んだが、特に問題なく動作した。

« I2Cのクロック | トップページ | 曲の選択 »

お仕事」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/24707/63394431

この記事へのトラックバック一覧です: 非圧縮zip:

« I2Cのクロック | トップページ | 曲の選択 »

最近のトラックバック