ページへ戻る
印刷
tek/rjc
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:tek/rjc をテンプレートにして作成
開始行:
TITLE:x
* tek圧縮でよく使われるrjcについて
-(by [[K]], 2008.12.09)
*** (0)
-まずは祝tek普及~!・・・NWSOSの開発が再開されてしかもte...
~
~
-(2008.12.09時点での)tek圧縮普及リスト:
--旧OSASK、OSASK-HBのOSやアプリおよびデータファイル (tek...
--Susieプラグイン(tek1/tek2/tek5)
--sarアーカイブ(tek1/tek2/tek5)
--「はりぼてOS」およびその発展型OS(tek1/tek2/tek5)
--MonaOSでのtek5圧縮のアプリ
--おれんじぺこでのtek1圧縮のアプリ、おれんじぺこでの(正...
--次期NWSOSでのOS本体のtek5圧縮(予定)
~
~
-これでOSASKがもしOSとしての競争に敗北し絶滅してしまった...
*** (1)
-さてそのtek圧縮ですが、実はOSASK以外のOSではtek圧縮だけ...
-またrjcに相当するフィルタは、LZMA(7z)やUPXでも当然のよう...
-rjcを使わずにtek5した場合と、rjcしてからtek5した場合のサ...
-rjcは極めて処理時間が短く、コードもとても小さい簡単なフ...
*** (2)
-rjcは以下のような簡単な関数で、エンコード・デコードでき...
int rjc(int size, UCHAR *p0, int mode)
/* mode: 0:decode, 1:encode */
{
UCHAR *p = p0, *p1 = p0 + size, *pp = p0 - 4;
int ofs0 = 0, ofs = 0, ofs1 = size;
int i, j, k, m = 0;
while (p < p1) {
if (0xe8 <= *p && *p <= 0xe9 && &p[4] < p1) { /...
r32:
p++;
if (p - pp < 4)
continue;
i = p[0] | p[1] << 8 | p[2] << 16 | p[3] << ...
k = i;
j = (p - p0) + ofs + 4; /* 相対アドレス基点 */
pp = p;
if (i == 0 || i == 0x80808080)
i ^= 0x80808080;
if (mode) { /* encode */
if (ofs0 - j <= i && i < ofs1 - j)
i += j;
else if (ofs1 - j <= i && i < ofs1)
i -= ofs1 - ofs0;
} else { /* decode */
if (ofs0 <= i && i < ofs1)
i -= j;
else if (ofs0 - j <= i && i < ofs0)
i += ofs1 - ofs0;
}
if (i == 0 || i == 0x80808080)
i ^= 0x80808080;
if (i != k) {
p[0] = i & 0xff;
p[1] = (i >> 8) & 0xff;
p[2] = (i >> 16) & 0xff;
p[3] = (i >> 24) & 0xff;
p += 4;
m++;
}
continue;
}
p++;
if (p[-1] == 0x0f && &p[4] < p1 && (p[0] & 0xf0)...
goto r32;
}
return m;
}
-このフィルタを実行ファイル全体にかけても十分に効果は出ま...
*** (3)
-参考までに、NWSOS0034-IMG内のNWSA.EXEとNWSC.EXEについてr...
| |圧縮なし |tek5だけ |最高パラメタtek5だけ...
|NWSA.EXE|RIGHT:121,040|RIGHT:50,041|RIGHT:49,414 ...
|NWSC.EXE|RIGHT:152,512|RIGHT:71,174|RIGHT:70,230 ...
* こめんと欄
- 補足:(0)でNWSOSのtek圧縮の採用を歓迎したが、[[GUIGUI01...
#comment
終了行:
TITLE:x
* tek圧縮でよく使われるrjcについて
-(by [[K]], 2008.12.09)
*** (0)
-まずは祝tek普及~!・・・NWSOSの開発が再開されてしかもte...
~
~
-(2008.12.09時点での)tek圧縮普及リスト:
--旧OSASK、OSASK-HBのOSやアプリおよびデータファイル (tek...
--Susieプラグイン(tek1/tek2/tek5)
--sarアーカイブ(tek1/tek2/tek5)
--「はりぼてOS」およびその発展型OS(tek1/tek2/tek5)
--MonaOSでのtek5圧縮のアプリ
--おれんじぺこでのtek1圧縮のアプリ、おれんじぺこでの(正...
--次期NWSOSでのOS本体のtek5圧縮(予定)
~
~
-これでOSASKがもしOSとしての競争に敗北し絶滅してしまった...
*** (1)
-さてそのtek圧縮ですが、実はOSASK以外のOSではtek圧縮だけ...
-またrjcに相当するフィルタは、LZMA(7z)やUPXでも当然のよう...
-rjcを使わずにtek5した場合と、rjcしてからtek5した場合のサ...
-rjcは極めて処理時間が短く、コードもとても小さい簡単なフ...
*** (2)
-rjcは以下のような簡単な関数で、エンコード・デコードでき...
int rjc(int size, UCHAR *p0, int mode)
/* mode: 0:decode, 1:encode */
{
UCHAR *p = p0, *p1 = p0 + size, *pp = p0 - 4;
int ofs0 = 0, ofs = 0, ofs1 = size;
int i, j, k, m = 0;
while (p < p1) {
if (0xe8 <= *p && *p <= 0xe9 && &p[4] < p1) { /...
r32:
p++;
if (p - pp < 4)
continue;
i = p[0] | p[1] << 8 | p[2] << 16 | p[3] << ...
k = i;
j = (p - p0) + ofs + 4; /* 相対アドレス基点 */
pp = p;
if (i == 0 || i == 0x80808080)
i ^= 0x80808080;
if (mode) { /* encode */
if (ofs0 - j <= i && i < ofs1 - j)
i += j;
else if (ofs1 - j <= i && i < ofs1)
i -= ofs1 - ofs0;
} else { /* decode */
if (ofs0 <= i && i < ofs1)
i -= j;
else if (ofs0 - j <= i && i < ofs0)
i += ofs1 - ofs0;
}
if (i == 0 || i == 0x80808080)
i ^= 0x80808080;
if (i != k) {
p[0] = i & 0xff;
p[1] = (i >> 8) & 0xff;
p[2] = (i >> 16) & 0xff;
p[3] = (i >> 24) & 0xff;
p += 4;
m++;
}
continue;
}
p++;
if (p[-1] == 0x0f && &p[4] < p1 && (p[0] & 0xf0)...
goto r32;
}
return m;
}
-このフィルタを実行ファイル全体にかけても十分に効果は出ま...
*** (3)
-参考までに、NWSOS0034-IMG内のNWSA.EXEとNWSC.EXEについてr...
| |圧縮なし |tek5だけ |最高パラメタtek5だけ...
|NWSA.EXE|RIGHT:121,040|RIGHT:50,041|RIGHT:49,414 ...
|NWSC.EXE|RIGHT:152,512|RIGHT:71,174|RIGHT:70,230 ...
* こめんと欄
- 補足:(0)でNWSOSのtek圧縮の採用を歓迎したが、[[GUIGUI01...
#comment
ページ名: