Mercurial > hg > Game > Atoc
diff kernel/convert @ 0:42f240cc4bc6
From: 太田 篤志 <atoc@namikilab.tuat.ac.jp>
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 08 Sep 2009 13:44:18 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel/convert Tue Sep 08 13:44:18 2009 +0900 @@ -0,0 +1,44 @@ +#!/usr/bin/php +<?php +$import_file_name = $argv[1]; +$export_file_name = $argv[2]; +$export_file_base = basename($export_file_name); + + +// raw バイナリを読み込んで 4 バイトごとに unsigned int 化 +$content = file_get_contents($import_file_name); +$unpacked = unpack('N*', $content); +foreach ($unpacked as $key => $val) +{ + $unpacked[$key] = sprintf('0x%08X', $val); +} + +// 各データ準備 +$kernel_size = strlen($content); +$kernel_uints = $kernel_size / 4; +$kernel_items = implode(', ', $unpacked); + +// C 言語のヘッダファイルを書き出す +$fp = fopen($export_file_name, 'wb') or die("Can't open {$export_file_base}."); + +$content = <<<EOH +/* [{$export_file_base}] This file has automatically generated by kernel/convert. So don't edit me. */ + +#ifndef KERNEL_H +#define KERNEL_H + + +#define SPE_KERNEL_SIZE {$kernel_size} +#define SPE_KERNEL_INITIAL_PC 0x10 +#define SPE_KERNEL_PROC_CONTEXT_OFFSET 0x70 +//#define SPE_KERNEL_PROGRAM_OFFSET 0x30 + +uint32_t spe_kernel_raw[{$kernel_uints}] = { {$kernel_items} }; + + +#endif /*KERNEL_H*/ + +EOH; + +fwrite($fp, $content); +fclose($fp);