元の数値がいくつなのかを
どこかで判別しなければいけないはずですが。。。
元のソースのように数値が2つで固定されているのならば
dim data, 2; // 戻したデータを代入する配列
data_pre = 2048; // 圧縮(?)されたデータ
// 1つ目の数値
data(0) = (data_pre & 0x7F) | 0x80 | 0xFFFFFF00; // 8ビット変数ならば0x80まで、『 | 0xFFFFFF00』は32ビットに合わせる場合
// 上記を省略して『data(0) = data_pre & 0x7F | 0xFFFFFF80』と書いても可
// 2つ目の数値
data(1) = (data_pre >> 7) & 0x7F;
理屈上ではこんな感じになります。
このくらいなら#defineでマクロにも出来そうですが、
元の数値が2つとは限らない場合は上記のソースを応用して
#module
// 圧縮(?)データを元に戻す
// data = 戻したデータを代入する配列変数
// data_pre = 圧縮されたデータ
// num = 元の数値の数
#deffunc return_vu array data, int data_pre, int num
_at = 0;
repeat num - 1
data(cnt) = (data_pre >> _at) & 0x7F | 0xFFFFFF80;
_at += 7;
loop
data(num - 1) = (data_pre >> _at) & 0x7F;
return;
#global
dim data, 2;
data_pre = 2048;
return_vu data, data_pre, 2;
このようにモジュール化も出来ます。