非圧縮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のクロック | トップページ | 曲の選択 »
「お仕事」カテゴリの記事
- ボツ写真(2018.01.29)
- イベント3日目(2018.01.27)
- Yahoo!を確定申告(2018.01.23)
- イベント初日(2018.01.13)
- 年賀状2018(2017.12.27)
トラックバック
この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/24707/63394431
この記事へのトラックバック一覧です: 非圧縮zip:
« I2Cのクロック | トップページ | 曲の選択 »
コメント