/****************************** * 展開ルーチン * * 1995/04/05 * * Programmed By Melody-Yoshi * ******************************/ /* この関数の使い方 void slidstart(unsigned char *,unsigned char *); 最初の引数は圧縮データの先頭アドレス(align 4) 次の引数は展開されるデータの先頭アドレス example: slidstart(pressdata,decdata); pressdataを展開してdecdataに入れる。 */ .align 4 .text .globl slidec .ent slidec .set reorder /* ====== はじまるよん ====== [IN:R4=DATA OUT:R5=bz] */ slidec: lw $24,4($4) ## R24=出力サイズ lw $7,8($4) ## R7=POL offset lw $25,12($4) ## R25=DEF offset move $6,$0 ## flags=0 add $24,$5 add $7,$4 ## R7=POL アドレス add $25,$4 ## R25=DEF アドレス add $4,16 /* ====== SLI展開メイン ====== */ slidemain2: bne $6,$0,codecheck2 lw $8,($4) li $6,32 add $4,4 codecheck2: slt $9,$8,$0 ## MSBチェック beq $9,$0,pressdata2 lb $10,($25) add $25,1 sb $10,($5) add $5,1 b loopend2 pressdata2: lhu $10,($7) add $7,2 srl $11,$10,12 and $10,0xfff sub $9,$5,$10 add $11,3 pressloop2: lb $10,-1($9) sub $11,1 add $9,1 sb $10,($5) add $5,1 bne $11,$0,pressloop2 loopend2: sll $8,1 sub $6,1 bne $5,$24,slidemain2 jr $31 .end