www.pudn.com > jpeg1.zip > IDCT.ASM


.8086 
include 	MACROS.ASM 
;====================================== 
_JPEG_TEXT	segment	para public 'CODE' 
DGROUP		group	_DATA,_BSS 
		assume	cs:_JPEG_TEXT,ds:DGROUP 
_JPEG_TEXT	ends 
_DATA		segment word public 'DATA' 
d@		label	byte 
d@w		label	word 
_DATA		ends 
_BSS		segment word public 'BSS' 
b@		label	byte 
b@w		label	word 
_BSS		ends 
_DATA 		SEGMENT WORD PUBLIC 'DATA' 
s@		label	byte 
X1		DD	64 DUP ( ? ) 
X2		DD	64 DUP ( ? ) 
LH_DENIST 	DW	64 DUP ( ? ) 
 
COUNTOR1 	DW	? 
COUNT2	 	DW	? 
COUNT3	 	DW	? 
STEP		DW	? 
DIMENSION_X	DW	? 
DIMENSION_Y	DW	? 
DC_BASE  	DW	0 
DC_Y		DW	? 
DC_CR		DW	? 
DC_CB		DW	? 
COLOR_Y		DW	? 
COLOR_CR	DW	? 
COLOR_CB	DW	? 
LOC_Y		DW	? 
LOC_CR		DW	? 
LOC_CB		DW	? 
LOCATION	DW	0 
CODE_BUFF       DW	? 
SOURCE          DW	? 
IDCT_SUB	DW      IDCT_2D 
IDCT_87		DW	IDCT_2D_87 
SCRATCH		DW	? 
NUM 		DW 	10000 
MUL_TEMP	DB 	6 DUP ( ?) 
TMP0 		DD   	? 
TMP1 		DD   	? 
TMP2 		DD   	? 
TMP3 		DD   	? 
CONST01  	DD  	1.96157056080646 
CONST11  	DD  	1.662939222460509 
CONST22  	DD  	0.390180644032257 
CONST33	 	DD  	1.1111404660392 
CONST44  	DD  	1.84775906502257 
CONST55  	DD  	0.76536686473018 
CONST66	 	DD  	1.41421356237309504880 
CONST77  	DD  	2.82842712474619009760 
INT_4 		DW  	4 
INT_2 		DW  	2 
INT_64 		DW 	64 
INT_32 		DW 	32 
CONST0  	DD  	7F7B14BEH	;1.96157056080646 
CONST1  	DD  	7F54DB31H	;1.662939222460509 
CONST2  	DD  	7D47C5C1H	;0.390180644032257 
CONST3 	 	DD  	7F0E39D9H	;1.1111404660392 
CONST4  	DD  	7F6C835EH	;1.84775906502257 
CONST5  	DD  	7E43EF15H	;0.76536686473018 
CONST6 	 	DD  	7F3504F3H	;1.41421356237309504880 
CONST7  	DD  	803504F3H	;2.82842712474619009760 
NEWS   		DD 	2 DUP(?) 
EOB		EQU 	0FFH 
DECODE_CURRENT_LOCATION DB 32 
DECODE_LOCATION DW 	1 
CURRENT_CODE	DD	? 
 
IDC_TABLE 	DB 64 DUP (0FFH,0FFH,00H,00H,05H,03H,00H,00H) 
		DB 32 DUP (0FFH,0FFH,00H,00H,03H,00H,00H,00H) 
		DB 32 DUP (0FFH,0FFH,00H,00H,04H,01H,00H,00H) 
		DB 32 DUP (0FFH,0FFH,00H,00H,05H,02H,00H,00H) 
		DB 32 DUP (0FFH,0FFH,00H,00H,07H,04H,00H,00H) 
		DB 32 DUP (0FFH,0FFH,00H,00H,08H,05H,00H,00H) 
		DB 16 DUP (0FFH,0FFH,00H,00H,0AH,06H,06H,00H) 
		DB 08 DUP (0FFH,0FFH,00H,00H,0CH,07H,00H,00H) 
		DB 04 DUP (0FFH,0FFH,00H,00H,0EH,08H,00H,00H) 
		DB 02 DUP (0FFH,0FFH,00H,00H,10H,09H,00H,00H) 
		DB 01 DUP (0FFH,0FFH,00H,00H,12H,0AH,00H,00H) 
		DB 01 DUP (000H,0FFH,00H,00H,14H,0BH,00H,00H) 
 
IDC_CHRO 	DB 64 DUP (0FFH,0FFH,00H,00H,02H,00H,00H,00H) 
		DB 64 DUP (0FFH,0FFH,00H,00H,03H,01H,00H,00H) 
		DB 64 DUP (0FFH,0FFH,00H,00H,04H,02H,00H,00H) 
		DB 32 DUP (0FFH,0FFH,00H,00H,06H,03H,00H,00H) 
		DB 16 DUP (0FFH,0FFH,00H,00H,08H,04H,00H,00H) 
		DB 08 DUP (0FFH,0FFH,00H,00H,0AH,05H,00H,00H) 
		DB 04 DUP (0FFH,0FFH,00H,00H,0CH,06H,00H,00H) 
		DB 02 DUP (0FFH,0FFH,00H,00H,0EH,07H,00H,00H) 
		DB 01 DUP (0FFH,0FFH,00H,00H,10H,08H,00H,00H) 
		DW 01 DUP (0FFH,IDC_CHRO_2,0FFH,0FFH) 
 
IDC_CHRO_2	DB 128 DUP (0FFH,0FFH,00H,00H,12H,09H,00H,00H) 
		DB  64 DUP (0FFH,0FFH,00H,00H,14H,0AH,00H,00H) 
		DB  32 DUP (0FFH,0FFH,00H,00H,16H,0BH,00H,00H) 
 
DECODE_TABLE 	DB 64 DUP (0FFH,0FFH,0H,1H,3H,1H,0H,0H);0/1 
		DB 64 DUP (0FFH,0FFH,0H,2H,4H,2H,0H,0H);0/2 
		DB 32 DUP (0FFH,0FFH,0H,3H,6H,3H,0H,0H);0/3 
		DB 16 DUP (000H,000H,0H,0H,4H,0H,0H,0H);0/0 
		DB 16 DUP (0FFH,0FFH,0H,4H,8H,4H,0H,0H);0/4 
		DB 16 DUP (0FFH,0FFH,1H,1H,5H,1H,0H,0H);1/1 
		DB 08 DUP (0FFH,0FFH,0H,5H,0AH,5H,0H,0H);0/5 
		DB 08 DUP (0FFH,0FFH,2H,1H,6H,1H,0H,0H);2/1 
		DB 04 DUP (0FFH,0FFH,0H,6H,0CH,6H,0H,0H);0/6 
		DB 04 DUP (0FFH,0FFH,1H,2H,8H,2H,0H,0H);1/2 
		DB 04 DUP (0FFH,0FFH,3H,1H,7H,1H,0H,0H);3/1 
		DB 04 DUP (0FFH,0FFH,4H,1H,7H,1H,0H,0H);4/1 
		DB 02 DUP (0FFH,0FFH,0H,7H,0EH,7H,0H,0H);0/7 
		DB 02 DUP (0FFH,0FFH,1H,3H,0AH,3H,0H,0H);1/3 
		DB 02 DUP (0FFH,0FFH,5H,1H,8H,1H,0H,0H);5/1 
		DB 02 DUP (0FFH,0FFH,6H,1H,8H,1H,0H,0H);6/1 
		DB 01 DUP (0FFH,0FFH,2H,2H,0AH,2H,0H,0H);2/2 
		DB 01 DUP (0FFH,0FFH,7H,1H,9H,1H,0H,0H);7/1 
		DB 01 DUP (0FFH,0FFH,8H,1H,9H,1H,0H,0H);8/1 
;-1-1--1-1-11-1--11--1-1-1-1-11--1-1-1 
		DW 0FFH,A1,0,0;1/4 
		DW 0FFH,A2,0,0;9/1 
		DW 0FFH,A3,0,0;0/8 
		DW 0FFH,A4,0,0;1/5 
		DW 0FFH,A5,0,0;0/9 
;-------------------- 1 LEVEL --------------------- 
;1111'1011 
A1      	DB 128 DUP (0FFH,0FFH,1H,4H,0DH,4H,0H,0H);1/4 
		DB 128 DUP (0FFH,0FFH,3H,2H,0BH,2H,0H,0H);3/2 
;1111'1100 
A2      	DB 128 DUP (0FFH,0FFH,9H,1H,0AH,1H,0H,0H);9/1 
		DB 128 DUP (0FFH,0FFH,0AH,1H,0AH,1H,0H,0H);A/1 
;1111'1101 
A3           	DB 128 DUP (0FFH,0FFH,0BH,1H,0AH,1H,0H,0H);B/1 
		DB  64 DUP (0FFH,0FFH,0H,8H,12H,8H,0H,0H);0/8 
		DB  64 DUP (0FFH,0FFH,2H,3H,0DH,3H,0H,0H);2/3 
;1111'1110 
A4           	DB 64 DUP (0FFH,0FFH,4H,2H,0CH,2H,0H,0H);4/2 
		DB 64 DUP (0FFH,0FFH,5H,2H,0CH,2H,0H,0H);5/2 
		DB 64 DUP (0FFH,0FFH,0CH,1H,0BH,1H,0H,0H);C/1 
		DB 32 DUP (0FFH,0FFH,1H,5H,10H,5H,0H,0H);1/5 
		DB 32 DUP (0FFH,0FFH,3H,3H,0EH,3H,0H,0H);3/3 
;1111'1111 
A5           	DB 32 DUP (0FFH,0FFH,6H,2H,0DH,2H,0H,0H);6/2 
		DB 32 DUP (0FFH,0FFH,7H,2H,0DH,2H,0H,0H);7/2 
		DB 32 DUP (0FFH,0FFH,0DH,1H,0CH,1H,0H,0H);D/1 
		DB 16 DUP (0FFH,0FFH,0EH,1H,0DH,1H,0H,0H);E/1 
		DB 16 DUP (0FFH,0FFH,0FH,0H,0CH,0H,0H,0H);F/0 
		DB 02 DUP (0FFH,0FFH,8H,2H,11H,2H,0H,0H);8/2 
		DB 01 DUP (0FFH,0FFH,0H,9H,19H,9H,0H,0H);0/9 
		DB 01 DUP (0FFH,0FFH,0H,0AH,1AH,0AH,0H,0H);0/A 
		DB 01 DUP (0FFH,0FFH,1H,6H,16H,6H,0H,0H);1/6 
		DB 01 DUP (0FFH,0FFH,1H,7H,17H,7H,0H,0H);1/7 
		DB 01 DUP (0FFH,0FFH,1H,8H,18H,8H,0H,0H);1/8 
		DB 01 DUP (0FFH,0FFH,1H,9H,19H,9H,0H,0H);1/9 
		DB 01 DUP (0FFH,0FFH,1H,0AH,1AH,0AH,0H,0H);1/A 
		DB 01 DUP (0FFH,0FFH,2H,4H,14H,4H,0H,0H);2/4 
		DB 01 DUP (0FFH,0FFH,2H,5H,15H,5H,0H,0H);2/5 
		DB 01 DUP (0FFH,0FFH,2H,6H,16H,6H,0H,0H);2/6 
		DB 01 DUP (0FFH,0FFH,2H,7H,17H,7H,0H,0H);2/7 
		DB 01 DUP (0FFH,0FFH,2H,8H,18H,8H,0H,0H);2/8 
		DB 01 DUP (0FFH,0FFH,2H,9H,19H,9H,0H,0H);2/9 
		DB 01 DUP (0FFH,0FFH,2H,0AH,1AH,0AH,0H,0H);2/A 
		DB 01 DUP (0FFH,0FFH,3H,4H,14H,4H,0H,0H);3/4 
		DB 01 DUP (0FFH,0FFH,3H,5H,15H,5H,0H,0H);3/5 
		DB 01 DUP (0FFH,0FFH,3H,6H,16H,6H,0H,0H);3/6 
		DB 01 DUP (0FFH,0FFH,3H,7H,17H,7H,0H,0H);3/7 
		DB 01 DUP (0FFH,0FFH,3H,8H,18H,8H,0H,0H);3/8 
		DB 01 DUP (0FFH,0FFH,3H,9H,19H,9H,0H,0H);3/9 
		DB 01 DUP (0FFH,0FFH,3H,0AH,1AH,0AH,0H,0H);3/A 
		DB 01 DUP (0FFH,0FFH,4H,3H,13H,3H,0H,0H);4/3 
		DB 01 DUP (0FFH,0FFH,4H,4H,14H,4H,0H,0H);4/4 
		DB 01 DUP (0FFH,0FFH,4H,5H,15H,5H,0H,0H);4/5 
		DB 01 DUP (0FFH,0FFH,4H,6H,16H,6H,0H,0H);4/6 
		DB 01 DUP (0FFH,0FFH,4H,7H,17H,7H,0H,0H);4/7 
		DB 01 DUP (0FFH,0FFH,4H,8H,18H,8H,0H,0H);4/8 
		DB 01 DUP (0FFH,0FFH,4H,9H,19H,9H,0H,0H);4/9 
		DB 01 DUP (0FFH,0FFH,4H,0AH,1AH,0AH,0H,0H);4/A 
		DB 01 DUP (0FFH,0FFH,5H,3H,13H,3H,0H,0H);5/3 
		DB 01 DUP (0FFH,0FFH,5H,4H,14H,4H,0H,0H);5/4 
		DB 01 DUP (0FFH,0FFH,5H,5H,15H,5H,0H,0H);5/5 
		DB 01 DUP (0FFH,0FFH,5H,6H,16H,6H,0H,0H);5/6 
		DB 01 DUP (0FFH,0FFH,5H,7H,17H,7H,0H,0H);5/7 
		DB 01 DUP (0FFH,0FFH,5H,8H,18H,8H,0H,0H);5/8 
		DB 01 DUP (0FFH,0FFH,5H,9H,19H,9H,0H,0H);5/9 
		DB 01 DUP (0FFH,0FFH,5H,0AH,1AH,0AH,0H,0H);5/A 
		DB 01 DUP (0FFH,0FFH,6H,3H,13H,3H,0H,0H);6/3 
		DB 01 DUP (0FFH,0FFH,6H,4H,14H,4H,0H,0H);6/4 
		DB 01 DUP (0FFH,0FFH,6H,5H,15H,5H,0H,0H);6/5 
		DB 01 DUP (0FFH,0FFH,6H,6H,16H,6H,0H,0H);6/6 
		DB 01 DUP (0FFH,0FFH,6H,7H,17H,7H,0H,0H);6/7 
		DB 01 DUP (0FFH,0FFH,6H,8H,18H,8H,0H,0H);6/8 
		DB 01 DUP (0FFH,0FFH,6H,9H,19H,9H,0H,0H);6/9 
		DB 01 DUP (0FFH,0FFH,6H,0AH,1AH,0AH,0H,0H);6/A 
		DB 01 DUP (0FFH,0FFH,7H,3H,13H,3H,0H,0H);7/3 
		DB 01 DUP (0FFH,0FFH,7H,4H,14H,4H,0H,0H);7/4 
		DB 01 DUP (0FFH,0FFH,7H,5H,15H,5H,0H,0H);7/5 
		DB 01 DUP (0FFH,0FFH,7H,6H,16H,6H,0H,0H);7/6 
		DB 01 DUP (0FFH,0FFH,7H,7H,17H,7H,0H,0H);7/7 
		DB 01 DUP (0FFH,0FFH,7H,8H,18H,8H,0H,0H);7/8 
		DB 01 DUP (0FFH,0FFH,7H,9H,19H,9H,0H,0H);7/9 
		DB 01 DUP (0FFH,0FFH,7H,0AH,1AH,0AH,0H,0H);7/A 
		DB 01 DUP (0FFH,0FFH,8H,3H,13H,3H,0H,0H);8/3 
		DB 01 DUP (0FFH,0FFH,8H,4H,14H,4H,0H,0H);8/4 
		DB 01 DUP (0FFH,0FFH,8H,5H,15H,5H,0H,0H);8/5 
		DB 01 DUP (0FFH,0FFH,8H,6H,16H,6H,0H,0H);8/6 
		DB 01 DUP (0FFH,0FFH,8H,7H,17H,7H,0H,0H);8/7 
		DB 01 DUP (0FFH,0FFH,8H,8H,18H,8H,0H,0H);8/8 
		DB 01 DUP (0FFH,0FFH,8H,9H,19H,9H,0H,0H);8/9 
		DB 01 DUP (0FFH,0FFH,8H,0AH,1AH,0AH,0H,0H);8/A 
		DB 01 DUP (0FFH,0FFH,9H,2H,12H,2H,0H,0H);9/2 
		DB 01 DUP (0FFH,0FFH,9H,3H,13H,3H,0H,0H);9/3 
		DB 01 DUP (0FFH,0FFH,9H,4H,14H,4H,0H,0H);9/4 
		DB 01 DUP (0FFH,0FFH,9H,5H,15H,5H,0H,0H);9/5 
		DB 01 DUP (0FFH,0FFH,9H,6H,16H,6H,0H,0H);9/6 
		DB 01 DUP (0FFH,0FFH,9H,7H,17H,7H,0H,0H);9/7 
		DB 01 DUP (0FFH,0FFH,9H,8H,18H,8H,0H,0H);9/8 
		DB 01 DUP (0FFH,0FFH,9H,9H,19H,9H,0H,0H);9/9 
		DB 01 DUP (0FFH,0FFH,9H,0AH,1AH,0AH,0H,0H);9/A 
		DB 01 DUP (0FFH,0FFH,0AH,2H,12H,2H,0H,0H);A/2 
		DB 01 DUP (0FFH,0FFH,0AH,3H,13H,3H,0H,0H);A/3 
		DB 01 DUP (0FFH,0FFH,0AH,4H,14H,4H,0H,0H);A/4 
		DB 01 DUP (0FFH,0FFH,0AH,5H,15H,5H,0H,0H);A/5 
		DB 01 DUP (0FFH,0FFH,0AH,6H,16H,6H,0H,0H);A/6 
		DB 01 DUP (0FFH,0FFH,0AH,7H,17H,7H,0H,0H);A/7 
		DB 01 DUP (0FFH,0FFH,0AH,8H,18H,8H,0H,0H);A/8 
		DB 01 DUP (0FFH,0FFH,0AH,9H,19H,9H,0H,0H);A/9 
		DB 01 DUP (0FFH,0FFH,0AH,0AH,1AH,0AH,0H,0H);A/A 
		DB 01 DUP (0FFH,0FFH,0BH,2H,12H,2H,0H,0H);B/2 
		DB 01 DUP (0FFH,0FFH,0BH,3H,13H,3H,0H,0H);B/3 
		DB 01 DUP (0FFH,0FFH,0BH,4H,14H,4H,0H,0H);B/4 
		DB 01 DUP (0FFH,0FFH,0BH,5H,15H,5H,0H,0H);B/5 
		DB 01 DUP (0FFH,0FFH,0BH,6H,16H,6H,0H,0H);B/6 
		DB 01 DUP (0FFH,0FFH,0BH,7H,17H,7H,0H,0H);B/7 
		DB 01 DUP (0FFH,0FFH,0BH,8H,18H,8H,0H,0H);B/8 
		DB 01 DUP (0FFH,0FFH,0BH,9H,19H,9H,0H,0H);B/9 
		DB 01 DUP (0FFH,0FFH,0BH,0AH,1AH,0AH,0H,0H);B/A 
		DB 01 DUP (0FFH,0FFH,0CH,2H,12H,2H,0H,0H);C/2 
		DB 01 DUP (0FFH,0FFH,0CH,3H,13H,3H,0H,0H);C/3 
		DB 01 DUP (0FFH,0FFH,0CH,4H,14H,4H,0H,0H);C/4 
		DB 01 DUP (0FFH,0FFH,0CH,5H,15H,5H,0H,0H);C/5 
		DB 01 DUP (0FFH,0FFH,0CH,6H,16H,6H,0H,0H);C/6 
		DB 01 DUP (0FFH,0FFH,0CH,7H,17H,7H,0H,0H);C/7 
		DB 01 DUP (0FFH,0FFH,0CH,8H,18H,8H,0H,0H);C/8 
		DB 01 DUP (0FFH,0FFH,0CH,9H,19H,9H,0H,0H);C/9 
		DB 01 DUP (0FFH,0FFH,0CH,0AH,1AH,0AH,0H,0H);C/A 
		DB 01 DUP (0FFH,0FFH,0DH,2H,12H,2H,0H,0H);D/2 
		DB 01 DUP (0FFH,0FFH,0DH,3H,13H,3H,0H,0H);D/3 
		DB 01 DUP (0FFH,0FFH,0DH,4H,14H,4H,0H,0H);D/4 
		DB 01 DUP (0FFH,0FFH,0DH,5H,15H,5H,0H,0H);D/5 
		DB 01 DUP (0FFH,0FFH,0DH,6H,16H,6H,0H,0H);D/6 
		DB 01 DUP (0FFH,0FFH,0DH,7H,17H,7H,0H,0H);D/7 
		DB 01 DUP (0FFH,0FFH,0DH,8H,18H,8H,0H,0H);D/8 
		DB 01 DUP (0FFH,0FFH,0DH,9H,19H,9H,0H,0H);D/9 
		DB 01 DUP (0FFH,0FFH,0DH,0AH,1AH,0AH,0H,0H);D/A 
		DB 01 DUP (0FFH,0FFH,0EH,2H,12H,2H,0H,0H);E/2 
		DB 01 DUP (0FFH,0FFH,0EH,3H,13H,3H,0H,0H);E/3 
		DB 01 DUP (0FFH,0FFH,0EH,4H,14H,4H,0H,0H);E/4 
		DB 01 DUP (0FFH,0FFH,0EH,5H,15H,5H,0H,0H);E/5 
		DB 01 DUP (0FFH,0FFH,0EH,6H,16H,6H,0H,0H);E/6 
		DB 01 DUP (0FFH,0FFH,0EH,7H,17H,7H,0H,0H);E/7 
		DB 01 DUP (0FFH,0FFH,0EH,8H,18H,8H,0H,0H);E/8 
		DB 01 DUP (0FFH,0FFH,0EH,9H,19H,9H,0H,0H);E/9 
		DB 01 DUP (0FFH,0FFH,0EH,0AH,1AH,0AH,0H,0H);E/A 
 
		DB 01 DUP (0FFH,0FFH,0FH,1H,11H,1H,0H,0H);F/1 
		DB 01 DUP (0FFH,0FFH,0FH,2H,12H,2H,0H,0H);F/2 
		DB 01 DUP (0FFH,0FFH,0FH,3H,13H,3H,0H,0H);F/3 
		DB 01 DUP (0FFH,0FFH,0FH,4H,14H,4H,0H,0H);F/4 
		DB 01 DUP (0FFH,0FFH,0FH,5H,15H,5H,0H,0H);F/5 
		DB 01 DUP (0FFH,0FFH,0FH,6H,16H,6H,0H,0H);F/6 
		DB 01 DUP (0FFH,0FFH,0FH,7H,17H,7H,0H,0H);F/7 
		DB 01 DUP (0FFH,0FFH,0FH,8H,18H,8H,0H,0H);F/8 
		DB 01 DUP (0FFH,0FFH,0FH,9H,19H,9H,0H,0H);F/9 
		DB 01 DUP (0FFH,0FFH,0FH,0AH,1AH,0AH,0H,0H);F/A 
 
IAC_CHRO_TABLE 	DB 64 DUP (000H,000H,0H,0H,2H,0H,0H,0H);0/0 
		DB 64 DUP (0FFH,0FFH,0H,1H,3H,1H,0H,0H);0/1 
		DB 32 DUP (0FFH,0FFH,0H,2H,5H,2H,0H,0H);0/2 
		DB 16 DUP (0FFH,0FFH,0H,3H,7H,3H,0H,0H);0/3 
		DB 16 DUP (0FFH,0FFH,1H,1H,5H,1H,0H,0H);1/1 
		DB 08 DUP (0FFH,0FFH,0H,4H,9H,4H,0H,0H);0/4 
		DB 08 DUP (0FFH,0FFH,0H,5H,0AH,5H,0H,0H);0/5 
		DB 08 DUP (0FFH,0FFH,2H,1H,6H,1H,0H,0H);2/1 
		DB 08 DUP (0FFH,0FFH,3H,1H,6H,1H,0H,0H);3/1 
		DB 04 DUP (0FFH,0FFH,0H,6H,0CH,6H,0H,0H);0/6 
		DB 04 DUP (0FFH,0FFH,1H,2H,8H,2H,0H,0H);1/2 
		DB 04 DUP (0FFH,0FFH,4H,1H,7H,1H,0H,0H);4/1 
		DB 04 DUP (0FFH,0FFH,5H,1H,7H,1H,0H,0H);5/1 
		DB 02 DUP (0FFH,0FFH,0H,7H,0EH,7H,0H,0H);0/7 
		DB 02 DUP (0FFH,0FFH,6H,1H,8H,1H,0H,0H);6/1 
		DB 02 DUP (0FFH,0FFH,7H,1H,8H,1H,0H,0H);7/1 
		DB 01 DUP (0FFH,0FFH,1H,3H,0BH,3H,0H,0H);1/3 
		DB 01 DUP (0FFH,0FFH,2H,2H,0AH,2H,0H,0H);2/2 
		DB 01 DUP (0FFH,0FFH,3H,2H,0AH,2H,0H,0H);3/2 
		DB 01 DUP (0FFH,0FFH,8H,1H,9H,1H,0H,0H);8/1 
;-1-1--1-1-11-1--11--1-1-1-1-11--1-1-1 
		DW 0FFH,AC1,0,0		;1111'1010 
		DW 0FFH,AC2,0,0		;1111'1011 
		DW 0FFH,AC3,0,0		;1111'1100 
		DW 0FFH,AC4,0,0		;1111'1101 
		DW 0FFH,AC5,0,0		;1111'1110 
		DW 0FFH,AC6,0,0		;1111'1111 
;-------------------- 1 LEVEL --------------------- 
;1111'1010 
AC1      	DB 128 DUP (0FFH,0FFH,0H,8H,11H,8H,0H,0H);0/8 
		DB 128 DUP (0FFH,0FFH,1H,4H,0DH,4H,0H,0H);1/4 
;1111'1011 
AC2      	DB 128 DUP (0FFH,0FFH,4H,2H,0BH,2H,0H,0H);4/2 
		DB 128 DUP (0FFH,0FFH,9H,1H,0AH,1H,0H,0H);9/1 
;1111'1100 
AC3          	DB 128 DUP (0FFH,0FFH,0AH,1H,0AH,1H,0H,0H);A/1 
		DB 128 DUP (0FFH,0FFH,0BH,1H,0AH,1H,0H,0H);B/1 
;1111'1101 
AC4		DB 128 DUP (0FFH,0FFH,0CH,1H,0AH,1H,0H,0H);C/1 
		DB  64 DUP (0FFH,0FFH,0H,9H,13H,9H,0H,0H);0/9 
		DB  64 DUP (0FFH,0FFH,2H,3H,0DH,3H,0H,0H);2/3 
;1111'1110 
AC5          	DB 64 DUP (0FFH,0FFH,3H,3H,0DH,3H,0H,0H);3/3 
		DB 64 DUP (0FFH,0FFH,5H,2H,0CH,2H,0H,0H);5/2 
		DB 64 DUP (0FFH,0FFH,0FH,0H,0AH,0H,0H,0H);F/0 
		DB 32 DUP (0FFH,0FFH,1H,5H,10H,5H,0H,0H);1/5 
		DB 32 DUP (0FFH,0FFH,6H,2H,0DH,2H,0H,0H);6/2 
;1111'1111 
AC6          	DB 32 DUP (0FFH,0FFH,7H,2H,0DH,2H,0H,0H);7/2 
		DB 32 DUP (0FFH,0FFH,0DH,1H,0CH,1H,0H,0H);D/1 
		DB 16 DUP (0FFH,0FFH,0H,0AH,16H,0AH,0H,0H);0/A 
		DB 16 DUP (0FFH,0FFH,1H,6H,12H,6H,0H,0H);1/6 
		DB 16 DUP (0FFH,0FFH,2H,4H,10H,4H,0H,0H);2/4 
		DB 16 DUP (0FFH,0FFH,3H,4H,10H,4H,0H,0H);3/4 
		DB 04 DUP (0FFH,0FFH,0EH,1H,0FH,1H,0H,0H);E/1 
		DB 02 DUP (0FFH,0FFH,2H,5H,14H,5H,0H,0H);2/5 
		DB 02 DUP (0FFH,0FFH,0FH,1H,10H,1H,0H,0H);F/1 
		DB 01 DUP (0FFH,0FFH,1H,7H,17H,7H,0H,0H);1/7 
		DB 01 DUP (0FFH,0FFH,1H,8H,18H,8H,0H,0H);1/8 
		DB 01 DUP (0FFH,0FFH,1H,9H,19H,9H,0H,0H);1/9 
		DB 01 DUP (0FFH,0FFH,1H,0AH,1AH,0AH,0H,0H);1/A 
		DB 01 DUP (0FFH,0FFH,2H,6H,16H,6H,0H,0H);2/6 
		DB 01 DUP (0FFH,0FFH,2H,7H,17H,7H,0H,0H);2/7 
		DB 01 DUP (0FFH,0FFH,2H,8H,18H,8H,0H,0H);2/8 
		DB 01 DUP (0FFH,0FFH,2H,9H,19H,9H,0H,0H);2/9 
		DB 01 DUP (0FFH,0FFH,2H,0AH,1AH,0AH,0H,0H);2/A 
		DB 01 DUP (0FFH,0FFH,3H,5H,15H,5H,0H,0H);3/5 
		DB 01 DUP (0FFH,0FFH,3H,6H,16H,6H,0H,0H);3/6 
		DB 01 DUP (0FFH,0FFH,3H,7H,17H,7H,0H,0H);3/7 
		DB 01 DUP (0FFH,0FFH,3H,8H,18H,8H,0H,0H);3/8 
		DB 01 DUP (0FFH,0FFH,3H,9H,19H,9H,0H,0H);3/9 
		DB 01 DUP (0FFH,0FFH,3H,0AH,1AH,0AH,0H,0H);3/A 
		DB 01 DUP (0FFH,0FFH,4H,3H,13H,3H,0H,0H);4/3 
		DB 01 DUP (0FFH,0FFH,4H,4H,14H,4H,0H,0H);4/4 
		DB 01 DUP (0FFH,0FFH,4H,5H,15H,5H,0H,0H);4/5 
		DB 01 DUP (0FFH,0FFH,4H,6H,16H,6H,0H,0H);4/6 
		DB 01 DUP (0FFH,0FFH,4H,7H,17H,7H,0H,0H);4/7 
		DB 01 DUP (0FFH,0FFH,4H,8H,18H,8H,0H,0H);4/8 
		DB 01 DUP (0FFH,0FFH,4H,9H,19H,9H,0H,0H);4/9 
		DB 01 DUP (0FFH,0FFH,4H,0AH,1AH,0AH,0H,0H);4/A 
		DB 01 DUP (0FFH,0FFH,5H,3H,13H,3H,0H,0H);5/3 
		DB 01 DUP (0FFH,0FFH,5H,4H,14H,4H,0H,0H);5/4 
		DB 01 DUP (0FFH,0FFH,5H,5H,15H,5H,0H,0H);5/5 
		DB 01 DUP (0FFH,0FFH,5H,6H,16H,6H,0H,0H);5/6 
		DB 01 DUP (0FFH,0FFH,5H,7H,17H,7H,0H,0H);5/7 
		DB 01 DUP (0FFH,0FFH,5H,8H,18H,8H,0H,0H);5/8 
		DB 01 DUP (0FFH,0FFH,5H,9H,19H,9H,0H,0H);5/9 
		DB 01 DUP (0FFH,0FFH,5H,0AH,1AH,0AH,0H,0H);5/A 
		DB 01 DUP (0FFH,0FFH,6H,3H,13H,3H,0H,0H);6/3 
		DB 01 DUP (0FFH,0FFH,6H,4H,14H,4H,0H,0H);6/4 
		DB 01 DUP (0FFH,0FFH,6H,5H,15H,5H,0H,0H);6/5 
		DB 01 DUP (0FFH,0FFH,6H,6H,16H,6H,0H,0H);6/6 
		DB 01 DUP (0FFH,0FFH,6H,7H,17H,7H,0H,0H);6/7 
		DB 01 DUP (0FFH,0FFH,6H,8H,18H,8H,0H,0H);6/8 
		DB 01 DUP (0FFH,0FFH,6H,9H,19H,9H,0H,0H);6/9 
		DB 01 DUP (0FFH,0FFH,6H,0AH,1AH,0AH,0H,0H);6/A 
		DB 01 DUP (0FFH,0FFH,7H,3H,13H,3H,0H,0H);7/3 
		DB 01 DUP (0FFH,0FFH,7H,4H,14H,4H,0H,0H);7/4 
		DB 01 DUP (0FFH,0FFH,7H,5H,15H,5H,0H,0H);7/5 
		DB 01 DUP (0FFH,0FFH,7H,6H,16H,6H,0H,0H);7/6 
		DB 01 DUP (0FFH,0FFH,7H,7H,17H,7H,0H,0H);7/7 
		DB 01 DUP (0FFH,0FFH,7H,8H,18H,8H,0H,0H);7/8 
		DB 01 DUP (0FFH,0FFH,7H,9H,19H,9H,0H,0H);7/9 
		DB 01 DUP (0FFH,0FFH,7H,0AH,1AH,0AH,0H,0H);7/A 
		DB 01 DUP (0FFH,0FFH,8H,2H,12H,2H,0H,0H);8/2 
		DB 01 DUP (0FFH,0FFH,8H,3H,13H,3H,0H,0H);8/3 
		DB 01 DUP (0FFH,0FFH,8H,4H,14H,4H,0H,0H);8/4 
		DB 01 DUP (0FFH,0FFH,8H,5H,15H,5H,0H,0H);8/5 
		DB 01 DUP (0FFH,0FFH,8H,6H,16H,6H,0H,0H);8/6 
		DB 01 DUP (0FFH,0FFH,8H,7H,17H,7H,0H,0H);8/7 
		DB 01 DUP (0FFH,0FFH,8H,8H,18H,8H,0H,0H);8/8 
		DB 01 DUP (0FFH,0FFH,8H,9H,19H,9H,0H,0H);8/9 
		DB 01 DUP (0FFH,0FFH,8H,0AH,1AH,0AH,0H,0H);8/A 
		DB 01 DUP (0FFH,0FFH,9H,2H,12H,2H,0H,0H);9/2 
		DB 01 DUP (0FFH,0FFH,9H,3H,13H,3H,0H,0H);9/3 
		DB 01 DUP (0FFH,0FFH,9H,4H,14H,4H,0H,0H);9/4 
		DB 01 DUP (0FFH,0FFH,9H,5H,15H,5H,0H,0H);9/5 
		DB 01 DUP (0FFH,0FFH,9H,6H,16H,6H,0H,0H);9/6 
		DB 01 DUP (0FFH,0FFH,9H,7H,17H,7H,0H,0H);9/7 
		DB 01 DUP (0FFH,0FFH,9H,8H,18H,8H,0H,0H);9/8 
		DB 01 DUP (0FFH,0FFH,9H,9H,19H,9H,0H,0H);9/9 
		DB 01 DUP (0FFH,0FFH,9H,0AH,1AH,0AH,0H,0H);9/A 
		DB 01 DUP (0FFH,0FFH,0AH,2H,12H,2H,0H,0H);A/2 
		DB 01 DUP (0FFH,0FFH,0AH,3H,13H,3H,0H,0H);A/3 
		DB 01 DUP (0FFH,0FFH,0AH,4H,14H,4H,0H,0H);A/4 
		DB 01 DUP (0FFH,0FFH,0AH,5H,15H,5H,0H,0H);A/5 
		DB 01 DUP (0FFH,0FFH,0AH,6H,16H,6H,0H,0H);A/6 
		DB 01 DUP (0FFH,0FFH,0AH,7H,17H,7H,0H,0H);A/7 
		DB 01 DUP (0FFH,0FFH,0AH,8H,18H,8H,0H,0H);A/8 
		DB 01 DUP (0FFH,0FFH,0AH,9H,19H,9H,0H,0H);A/9 
		DB 01 DUP (0FFH,0FFH,0AH,0AH,1AH,0AH,0H,0H);A/A 
		DB 01 DUP (0FFH,0FFH,0BH,2H,12H,2H,0H,0H);B/2 
		DB 01 DUP (0FFH,0FFH,0BH,3H,13H,3H,0H,0H);B/3 
		DB 01 DUP (0FFH,0FFH,0BH,4H,14H,4H,0H,0H);B/4 
		DB 01 DUP (0FFH,0FFH,0BH,5H,15H,5H,0H,0H);B/5 
		DB 01 DUP (0FFH,0FFH,0BH,6H,16H,6H,0H,0H);B/6 
		DB 01 DUP (0FFH,0FFH,0BH,7H,17H,7H,0H,0H);B/7 
		DB 01 DUP (0FFH,0FFH,0BH,8H,18H,8H,0H,0H);B/8 
		DB 01 DUP (0FFH,0FFH,0BH,9H,19H,9H,0H,0H);B/9 
		DB 01 DUP (0FFH,0FFH,0BH,0AH,1AH,0AH,0H,0H);B/A 
		DB 01 DUP (0FFH,0FFH,0CH,2H,12H,2H,0H,0H);C/2 
		DB 01 DUP (0FFH,0FFH,0CH,3H,13H,3H,0H,0H);C/3 
		DB 01 DUP (0FFH,0FFH,0CH,4H,14H,4H,0H,0H);C/4 
		DB 01 DUP (0FFH,0FFH,0CH,5H,15H,5H,0H,0H);C/5 
		DB 01 DUP (0FFH,0FFH,0CH,6H,16H,6H,0H,0H);C/6 
		DB 01 DUP (0FFH,0FFH,0CH,7H,17H,7H,0H,0H);C/7 
		DB 01 DUP (0FFH,0FFH,0CH,8H,18H,8H,0H,0H);C/8 
		DB 01 DUP (0FFH,0FFH,0CH,9H,19H,9H,0H,0H);C/9 
		DB 01 DUP (0FFH,0FFH,0CH,0AH,1AH,0AH,0H,0H);C/A 
		DB 01 DUP (0FFH,0FFH,0DH,2H,12H,2H,0H,0H);D/2 
		DB 01 DUP (0FFH,0FFH,0DH,3H,13H,3H,0H,0H);D/3 
		DB 01 DUP (0FFH,0FFH,0DH,4H,14H,4H,0H,0H);D/4 
		DB 01 DUP (0FFH,0FFH,0DH,5H,15H,5H,0H,0H);D/5 
		DB 01 DUP (0FFH,0FFH,0DH,6H,16H,6H,0H,0H);D/6 
		DB 01 DUP (0FFH,0FFH,0DH,7H,17H,7H,0H,0H);D/7 
		DB 01 DUP (0FFH,0FFH,0DH,8H,18H,8H,0H,0H);D/8 
		DB 01 DUP (0FFH,0FFH,0DH,9H,19H,9H,0H,0H);D/9 
		DB 01 DUP (0FFH,0FFH,0DH,0AH,1AH,0AH,0H,0H);D/A 
		DB 01 DUP (0FFH,0FFH,0EH,2H,12H,2H,0H,0H);E/2 
		DB 01 DUP (0FFH,0FFH,0EH,3H,13H,3H,0H,0H);E/3 
		DB 01 DUP (0FFH,0FFH,0EH,4H,14H,4H,0H,0H);E/4 
		DB 01 DUP (0FFH,0FFH,0EH,5H,15H,5H,0H,0H);E/5 
		DB 01 DUP (0FFH,0FFH,0EH,6H,16H,6H,0H,0H);E/6 
		DB 01 DUP (0FFH,0FFH,0EH,7H,17H,7H,0H,0H);E/7 
		DB 01 DUP (0FFH,0FFH,0EH,8H,18H,8H,0H,0H);E/8 
		DB 01 DUP (0FFH,0FFH,0EH,9H,19H,9H,0H,0H);E/9 
		DB 01 DUP (0FFH,0FFH,0EH,0AH,1AH,0AH,0H,0H);E/A 
		DB 01 DUP (0FFH,0FFH,0FH,2H,12H,2H,0H,0H);F/2 
		DB 01 DUP (0FFH,0FFH,0FH,3H,13H,3H,0H,0H);F/3 
		DB 01 DUP (0FFH,0FFH,0FH,4H,14H,4H,0H,0H);F/4 
		DB 01 DUP (0FFH,0FFH,0FH,5H,15H,5H,0H,0H);F/5 
		DB 01 DUP (0FFH,0FFH,0FH,6H,16H,6H,0H,0H);F/6 
		DB 01 DUP (0FFH,0FFH,0FH,7H,17H,7H,0H,0H);F/7 
		DB 01 DUP (0FFH,0FFH,0FH,8H,18H,8H,0H,0H);F/8 
		DB 01 DUP (0FFH,0FFH,0FH,9H,19H,9H,0H,0H);F/9 
		DB 01 DUP (0FFH,0FFH,0FH,0AH,1AH,0AH,0H,0H);F/A 
_DATA  		ENDS 
_JPEG_TEXT	SEGMENT PARA PUBLIC 'CODE' 
		ASSUME CS:_JPEG_TEXT,DS:DGROUP 
		public	_Decompress 
		public	_CDecompress 
		extrn	LH_TABLE:	word 
		extrn	COLOR_TABLE:	word 
		extrn	_IDX_87:	far 
		extrn	_FPU   :	byte 
;====================================== 
_Decompress	PROC	FAR 
		PUSH	BP 
		MOV	BP,SP 
		PUSH	DS 
		PUSH	ES 
		PUSH	SI 
		PUSH	DI 
		PUSH	CX 
		PUSH	BX 
		MOV	AX,[BP+6] 
		MOV	SOURCE,AX 
		MOV	AX,[BP+8] 
		MOV	CODE_BUFF,AX 
		MOV	ES,AX 
		MOV	AX,ES:[0] 
		MOV     COUNT2,AX 
		MOV	STEP,AX 
		MOV	CL,3 
		SHR	AX,CL 
		MOV	DIMENSION_X,AX 
		MOV	AX,ES:[2] 
		MOV     COUNT3,AX 
		SHR	AX,CL 
		MOV	DIMENSION_Y,AX 
		MOV	AX,_DATA 
		MOV	DS,AX 
		MOV	DECODE_LOCATION,1 
		MOV	DC_BASE,0 
		MOV	LOCATION,0 
		MOV	NUM,10000 
		MOV	DECODE_CURRENT_LOCATION,32 
		MOV	AL,0FFH 
		CMP	BYTE PTR DGROUP:_FPU,AL 
		JE	IDEFAULT 
		MOV	AX,IDCT_87 
		MOV	IDCT_SUB,AX 
		FINIT 
IDEFAULT:	CLD 
		STI 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		POP	DS 
		LEA	DI,CURRENT_CODE 
		MOV	SI,4 
		MOV	CX,2 
		REPZ	MOVSW 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		POP	DS 
		MOV	CX,DIMENSION_Y 
DECOMPRESS_LOOP1: 
		PUSH	CX 
		MOV	CX,DIMENSION_X 
DECOMPRESS_LOOP2: 
		PUSH	CX 
		CALL	ENTROPY_DECODER 
		CALL	IQUANTIZER 
		CALL	WORD PTR IDCT_SUB 
		CALL	MOVE_DATA_BUFF 
		ADD	LOCATION,8 
		POP	CX 
		LOOP	DECOMPRESS_LOOP2 
		MOV	LOCATION,0 
		MOV	AX,COUNT2 
		SHR	AX,1 
		PUSHF 
		ADD	SOURCE,AX 
		POPF 
		JNC	SET_LOCATION 
		MOV	LOCATION,8 
SET_LOCATION:	POP	CX 
		LOOP	DECOMPRESS_LOOP1 
		MOV	AX,COUNT2 
		MOV	DX,COUNT3 
		POP	BX 
		POP	CX 
		POP	DI 
		POP	SI 
		POP	ES 
		POP	DS 
		POP	BP 
		RET 
_Decompress	ENDP 
;====================================== 
_CDecompress	PROC	FAR 
		PUSH	BP 
		MOV	BP,SP 
		PUSH	DS 
		PUSH	ES 
		PUSH	SI 
		PUSH	DI 
		PUSH	CX 
		PUSH	BX 
		MOV	AX,[BP+6] 
		MOV	SOURCE,AX 			; IMAGE BUFFER 
		MOV	COLOR_Y,AX 
		ADD	AX,4096 
		MOV	COLOR_CR,AX 
		ADD	AX,1024 
		MOV	COLOR_CB,AX 
		MOV	AX,[BP+8]               	; CODE BUFFER 
		MOV	CODE_BUFF,AX 
		MOV	ES,AX 
		MOV	AX,ES:[0] 
		MOV     COUNT2,AX 
		MOV	CL,4 
		SHR	AX,CL 
		MOV	DIMENSION_X,AX 
		MOV	AX,ES:[2] 
		MOV     COUNT3,AX 
		SHR	AX,CL 
		MOV	DIMENSION_Y,AX 
		MOV	AX,DGROUP 
		MOV	DS,AX 
		MOV	DECODE_LOCATION,1 
		MOV	DC_BASE,0 
		MOV	DC_Y,0 
		MOV	DC_CR,0 
		MOV 	DC_CB,0 
		MOV	LOCATION,0 
		MOV	LOC_Y,0				; INIT SEGMENT 
		MOV	LOC_CR,0 
		MOV	LOC_CB,0 
		MOV	NUM,10000 
		MOV	DECODE_CURRENT_LOCATION,32 
		MOV	AL,0FFH 
		CMP	BYTE PTR DGROUP:_FPU,AL 
		JE	CIDEFAULT 
		MOV	AX,IDCT_87 
		MOV	IDCT_SUB,AX 
		FINIT 
CIDEFAULT:	CLD 
		STI 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		POP	DS 
		LEA	DI,CURRENT_CODE 
		MOV	SI,4 
		MOV	CX,2 
		REPZ	MOVSW 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		POP	DS 
		MOV	CX,DIMENSION_Y 
DECOMPRE_LOOP1:	PUSH	CX 
		MOV	CX,DIMENSION_X 
DECOMPRE_LOOP2:	PUSH	CX 
		MOV	AX,COUNT2				; SET STEP FOR Y 
		MOV	STEP,AX 
		MOV	AX,DC_Y 
		MOV	DC_BASE,AX 
		MOV	AX,COLOR_Y				; SET Y SEGMENT 
		MOV	SOURCE,AX 
		MOV     AX,LOC_Y 				; SET Y POINTER 
		MOV	LOCATION,AX 
		CALL	ENTROPY_DECODER				; Y1 DECODE 
		CALL	IQUANTIZER 
		CALL	WORD PTR IDCT_SUB 
		CALL	MOVE_DATA_BUFF 
		ADD	LOCATION,8 
		CALL	ENTROPY_DECODER				; Y2 DECODE 
		CALL	IQUANTIZER 
		CALL	WORD PTR IDCT_SUB 
		CALL	MOVE_DATA_BUFF 
		ADD	LOCATION,8 
		MOV	AX,LOCATION 
		MOV	LOC_Y,AX 
		MOV	AX,COUNT2				; ADJUST POINTER 
		SHL	AX,1 
		SHL	AX,1 
		SHL	AX,1 
		ADD     AX,LOCATION 
		SUB	AX,16 
		MOV	LOCATION,AX 
		CALL	ENTROPY_DECODER				; Y3 DECODE 
		CALL	IQUANTIZER 
		CALL	WORD PTR IDCT_SUB 
		CALL	MOVE_DATA_BUFF 
		ADD	LOCATION,8 
		CALL	ENTROPY_DECODER				; Y4 DECODE 
		CALL	IQUANTIZER 
		CALL	WORD PTR IDCT_SUB 
		CALL	MOVE_DATA_BUFF 
                MOV	AX,DC_BASE			; RESTORE Y DC 
		MOV	DC_Y,AX 
		MOV	AX,DC_CR			; SET CR DC 
		MOV	DC_BASE,AX 
		MOV	AX,COUNT2			; SET STEP FOR CR&CB 
		SHR	AX,1 
		MOV	STEP,AX 
		MOV	AX,COLOR_CR                             ; SET CR SEGMENT 
		MOV	SOURCE,AX 
		MOV	AX,LOC_CR                               ; SET CR POINTER 
		MOV	LOCATION,AX 
		CALL	C_DECODER				; CR DECODE 
		CALL	C_IQUANT 
		CALL	WORD PTR IDCT_SUB 
		CALL	MOVE_DATA_BUFF 
		ADD	LOC_CR,8 
                MOV	AX,DC_BASE			; RESTORE CR DC 
		MOV	DC_CR,AX 
		MOV     AX,DC_CB			; SET CB DC 
		MOV	DC_BASE,AX 
		MOV	AX,COLOR_CB                             ; SET CB SEGMENT 
		MOV	SOURCE,AX 
		MOV	AX,LOC_CB				; SET CB POINTER 
		MOV	LOCATION,AX 
		CALL	C_DECODER				; CB DECODE 
		CALL	C_IQUANT 
		CALL	WORD PTR IDCT_SUB 
		CALL	MOVE_DATA_BUFF 
		ADD	LOC_CB,8 
                MOV	AX,DC_BASE 
		MOV	DC_CB,AX 
		POP	CX 
		DEC	CX 
		JZ	CLOOP_OUT2 
		JMP	DECOMPRE_LOOP2 
CLOOP_OUT2:     MOV	AX,COUNT2 
		ADD	COLOR_Y,AX 
		MOV	LOC_Y,0 
		MOV	LOC_CR,0 
		MOV	LOC_CB,0 
		SHR	AX,1 
		SHR	AX,1 
		PUSHF 
		ADD	COLOR_CR,AX 
		ADD	COLOR_CB,AX 
		POPF 
		JNC     CSET_LOCATION 
		MOV	LOC_CR,8 
		MOV	LOC_CB,8 
CSET_LOCATION:	POP	CX 
		DEC	CX 
		JZ	CLOOP_OUT1 
		JMP	DECOMPRE_LOOP1 
CLOOP_OUT1:     MOV	AX,DGROUP 
		MOV	DS,AX 
		MOV	AX,COUNT2 
		MOV	DX,COUNT3 
		POP	BX 
		POP	CX 
		POP	DI 
		POP	SI 
		POP	ES 
		POP	DS 
		POP	BP 
		RET 
_CDecompress	ENDP 
;======================================= 
ENTROPY_DECODER	PROC 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		LEA	DI,LH_DENIST 
		MOV	CX,64 
		XOR	AX,AX 
		REPZ	STOSW 
		POP	ES 
		MOV	BP,DECODE_LOCATION 
		MOV 	DH,DECODE_CURRENT_LOCATION 
		INDEX_8 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		LEA	SI,IDC_TABLE 
		MOV	CL,3 
		SHL	BX,CL 
		ADD	SI,BX 
		LEA	DI,NEWS 
		MOV	CX,4 
		REPZ	MOVSW 
		POP	ES 
		XOR	DI,DI 
		MOV 	SI,DI 
		MOV	DL,BYTE PTR NEWS+4 
		I_SHIFT 
		PUSH 	DX 
		MOV	CL,BYTE PTR NEWS+5 
		MOV 	DX,1 
		SHL 	DX,CL 
		DEC	DX 
		AND	BX,DX 
		MOV	CX,BX 
		XOR	CX,DX 
		CMP 	CX,BX 
		JA	FU_U 
		ADD	BX,DC_BASE 
		MOV	DC_BASE,BX 
		MOV	WORD PTR LH_DENIST,BX 
		JMP	NEXT_3_3 
FU_U:		NEG	CX 
		ADD	CX,DC_BASE 
		MOV	DC_BASE,CX 
		MOV	WORD PTR LH_DENIST,CX 
NEXT_3_3:	POP	DX 
		ADD	SI,2 
BACK1:  	INDEX_8 
		MOV	DI,BX 
		SHL	DI,1 
		SHL	DI,1 
		SHL	DI,1 
		CMP	BYTE PTR DS:DECODE_TABLE[DI],0 
		JNZ	SHORT NEXT1 
		JMP	ALL_IS_0 
NEXT1:		CMP	BYTE PTR DS:DECODE_TABLE[DI+1],0 
		JNZ	SHORT NEXT2 
		JMP	TWO_LEVEL 
NEXT2:		PUSH	ES 
		PUSH	SI 
		LEA	SI,DECODE_TABLE 
		ADD	SI,DI 
		PUSH	DS 
		POP	ES 
		LEA	DI,NEWS 
		MOV	CX,4 
		CLD 
		REPZ	MOVSW 
		POP	SI 
		POP	ES 
		MOV	AL,BYTE PTR NEWS+2 
		CBW 
		ADD	SI,AX 
		ADD	SI,AX 
		MOV	DL,BYTE PTR NEWS+4 
		I_SHIFT 
		PUSH	DX 
		MOV	CL,BYTE PTR NEWS+5 
		MOV	DX,1 
		SHL	DX,CL 
		DEC	DX 
		AND	BX,DX 
		MOV	CX,BX 
		XOR	CX,DX 
		CMP	CX,BX 
		JA	FU 
		MOV	WORD PTR LH_DENIST[SI],BX 
		JMP	NEXT_3 
FU:     	NEG	CX 
		MOV	WORD PTR LH_DENIST[SI],CX 
NEXT_3: 	POP	DX 
		ADD	SI,2 
		JMP	BACK1 
TWO_LEVEL:	XOR	DI,DI 
		MOV	DI,BX 
		MOV	CX,3 
		SHL	DI,CL 
		ADD	DI,2 
		MOV	DI,WORD PTR DECODE_TABLE[DI] 
		INDEX_16 
		AND	BX,0FFH 
		PUSH	ES 
		PUSH	SI 
		PUSH	DS 
		POP	ES 
		SHL	BX,1 
		SHL	BX,1 
		SHL	BX,1 
		ADD     DI,BX 
		MOV	SI,DI 
		LEA	DI,NEWS 
		MOV	CX,4 
		REPZ	MOVSW 
		POP	SI 
		POP	ES 
		MOV	AL,BYTE PTR NEWS+2 
		CBW 
		ADD	SI,AX 
		ADD	SI,AX 
		MOV	DL,BYTE PTR NEWS+4 
		I_SHIFT 
		PUSH	DX 
		MOV	CL,BYTE PTR NEWS+5 
		MOV	DX,1 
		SHL	DX,CL 
		DEC	DX 
		AND	BX,DX 
		MOV	CX,BX 
		XOR	CX,DX 
		CMP	CX,BX 
		JA	FU1 
		MOV	WORD PTR LH_DENIST[SI],BX 
		JMP	NEXTA 
FU1:    	NEG	CX 
		MOV	WORD PTR LH_DENIST[SI],CX 
NEXTA:          POP	DX 
		ADD	SI,2 
		JMP	BACK1 
ALL_IS_0:	MOV	DI,BX 
		MOV	CX,3 
		SHL	DI,CL 
		ADD	DI,4 
		MOV	DL,BYTE PTR DECODE_TABLE[DI] 
		CMP	DH,DL 
		JB	LESS5 
		JE	EQUAL5 
GREAT5: 	MOV	CL,DL 
		PUSH	BX 
		ISHLD 
		POP	BX 
		SUB	DH,DL 
		JMP	NEXT5 
EQUAL5: 	INC	BP 
		SHL	BP,1 
		SHL	BP,1 
		MOV	AX,ES:[BP+2] 
		MOV	WORD PTR CURRENT_CODE+2,AX 
		MOV	AX,ES:[BP] 
		MOV	WORD PTR CURRENT_CODE,AX 
		SHR	BP,1 
		SHR	BP,1 
		MOV	DH,32 
		JMP	NEXT5 
LESS5:  	SUB	DL,DH 
		MOV	DH,32 
		SUB	DH,DL 
		INC	BP 
		SHL	BP,1 
		SHL	BP,1 
		MOV	AX,ES:[BP+2] 
		MOV	WORD PTR CURRENT_CODE+2,AX 
		MOV	AX,ES:[BP] 
		MOV	WORD PTR CURRENT_CODE,AX 
		SHR	BP,1 
		SHR	BP,1 
		MOV 	CL,DL 
		PUSH	BX 
		ISHLD 
		POP	BX 
NEXT5:  	MOV	DECODE_LOCATION,BP 
		MOV	DECODE_CURRENT_LOCATION,DH 
		RET 
ENTROPY_DECODER	ENDP 
;======================================== 
C_DECODER	PROC 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		LEA	DI,LH_DENIST			; CLEAR TO ZERO 
		MOV	CX,64 
		XOR	AX,AX 
		REPZ	STOSW 
		POP	ES 
		MOV	BP,DECODE_LOCATION 
		MOV 	DH,DECODE_CURRENT_LOCATION 
		INDEX_8 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		LEA	SI,IDC_CHRO 
		MOV	CL,3 
		SHL	BX,CL 
		ADD	SI,BX 
		CMP	BYTE PTR [SI+1],0 
		JNZ	DC_LEVEL 
DC_TWO_LEVEL:	MOV     DI,[SI+2] 
		INDEX_16 
		AND	BX,0FFH 
		MOV	CL,3 
		SHL	BX,CL 
		ADD	SI,BX 
DC_LEVEL:	LEA	DI,NEWS 
		MOV	CX,4 
		REPZ	MOVSW 
		POP	ES 
		XOR	DI,DI 
		MOV 	SI,DI 
		MOV	DL,BYTE PTR NEWS+4 
		I_SHIFT 
		PUSH 	DX 
		MOV	CL,BYTE PTR NEWS+5 
		MOV 	DX,1 
		SHL 	DX,CL 
		DEC	DX 
		AND	BX,DX 
		MOV	CX,BX 
		XOR	CX,DX 
		CMP 	CX,BX 
		JA	CFU_U 
		ADD	BX,DC_BASE 
		MOV	DC_BASE,BX 
		MOV	WORD PTR LH_DENIST,BX 
		JMP	CNEXT_3_3 
CFU_U:		NEG	CX 
		ADD	CX,DC_BASE 
		MOV	DC_BASE,CX 
		MOV	WORD PTR LH_DENIST,CX 
CNEXT_3_3:	POP	DX 
;-------------------------------------- 
; ------------- AC DECODE ----------- 
;-------------------------------------- 
		ADD	SI,2 
CBACK1:  	INDEX_8 
		MOV	DI,BX 
		SHL	DI,1 
		SHL	DI,1 
		SHL	DI,1 
		CMP	BYTE PTR DS:IAC_CHRO_TABLE[DI],0 
		JNZ	SHORT CNEXT1 
		JMP	CALL_IS_0 
CNEXT1:		CMP	BYTE PTR DS:IAC_CHRO_TABLE[DI+1],0 
		JNZ	SHORT CNEXT2 
		JMP	CTWO_LEVEL 
CNEXT2:		PUSH	ES 
		PUSH	SI 
		LEA	SI,IAC_CHRO_TABLE 
		ADD	SI,DI 
		PUSH	DS 
		POP	ES 
		LEA	DI,NEWS 
		MOV	CX,4 
		CLD 
		REPZ	MOVSW 
		POP	SI 
		POP	ES 
		MOV	AL,BYTE PTR NEWS+2 
		CBW 
		ADD	SI,AX 
		ADD	SI,AX 
		MOV	DL,BYTE PTR NEWS+4 
		I_SHIFT 
		PUSH	DX 
		MOV	CL,BYTE PTR NEWS+5 
		MOV	DX,1 
		SHL	DX,CL 
		DEC	DX 
		AND	BX,DX 
		MOV	CX,BX 
		XOR	CX,DX 
		CMP	CX,BX 
		JA	CFU 
		MOV	WORD PTR LH_DENIST[SI],BX 
		JMP	CNEXT_3 
CFU:     	NEG	CX 
		MOV	WORD PTR LH_DENIST[SI],CX 
CNEXT_3: 	POP	DX 
		ADD	SI,2 
		JMP	CBACK1 
CTWO_LEVEL:	ADD	DI,2 
		MOV	DI,WORD PTR IAC_CHRO_TABLE[DI] 
		INDEX_16 
		AND	BX,0FFH 
		PUSH	ES 
		PUSH	SI 
		PUSH	DS 
		POP	ES 
		SHL	BX,1 
		SHL	BX,1 
		SHL	BX,1 
		ADD     DI,BX 
		MOV	SI,DI 
		LEA	DI,NEWS 
		MOV	CX,4 
		REPZ	MOVSW 
		POP	SI 
		POP	ES 
		MOV	AL,BYTE PTR NEWS+2 
		CBW 
		ADD	SI,AX 
		ADD	SI,AX 
		MOV	DL,BYTE PTR NEWS+4 
		I_SHIFT 
		PUSH	DX 
		MOV	CL,BYTE PTR NEWS+5 
		MOV	DX,1 
		SHL	DX,CL 
		DEC	DX 
		AND	BX,DX 
		MOV	CX,BX 
		XOR	CX,DX 
		CMP	CX,BX 
		JA	CFU1 
		MOV	WORD PTR LH_DENIST[SI],BX 
		JMP	SHORT CNEXTA 
CFU1:    	NEG	CX 
		MOV	WORD PTR LH_DENIST[SI],CX 
CNEXTA:         POP	DX 
		ADD	SI,2 
		JMP	CBACK1 
CALL_IS_0:	MOV	DI,BX 
		MOV	CX,3 
		SHL	DI,CL 
		ADD	DI,4 
		MOV	DL,BYTE PTR IAC_CHRO_TABLE[DI] 
		CMP	DH,DL 
		JB	CLESS5 
		JE	CEQUAL5 
CGREAT5: 	MOV	CL,DL 
		PUSH	BX 
		ISHLD 
		POP	BX 
		SUB	DH,DL 
		JMP	CNEXT5 
CEQUAL5: 	INC	BP 
		SHL	BP,1 
		SHL	BP,1 
		MOV	AX,ES:[BP+2] 
		MOV	WORD PTR CURRENT_CODE+2,AX 
		MOV	AX,ES:[BP] 
		MOV	WORD PTR CURRENT_CODE,AX 
		SHR	BP,1 
		SHR	BP,1 
		MOV	DH,32 
		JMP	CNEXT5 
CLESS5:  	SUB	DL,DH 
		MOV	DH,32 
		SUB	DH,DL 
		INC	BP 
		SHL	BP,1 
		SHL	BP,1 
		MOV	AX,ES:[BP+2] 
		MOV	WORD PTR CURRENT_CODE+2,AX 
		MOV	AX,ES:[BP] 
		MOV	WORD PTR CURRENT_CODE,AX 
		SHR	BP,1 
		SHR	BP,1 
		MOV 	CL,DL 
		PUSH	BX 
		ISHLD 
		POP	BX 
CNEXT5:  	MOV	DECODE_LOCATION,BP 
		MOV	DECODE_CURRENT_LOCATION,DH 
		RET 
C_DECODER	ENDP 
;======================================== 
IQUANTIZER	PROC 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		MOV	CX,256 
		XOR	AX,AX 
		LEA	DI,X1 
		REPZ	STOSW 
		POP	ES 
		XOR	SI,SI 
		MOV	CX,63 
		MOV	AX,LH_DENIST 
		AND	AX,AX 
		JZ	DO1 
		IMUL	LH_TABLE 
		CALL	IQSTD 
DO1:   		ADD	SI,2 
		MOV	AX,LH_DENIST[SI] 
		AND	AX,AX 
		JZ	DO2 
		IMUL	LH_TABLE[SI] 
		SHL     SI,1 
		CALL	IQSTD 
		SHR	SI,1 
DO2:		DEC	CX 
		JNE	DO1 
		RET 
IQUANTIZER	ENDP 
;======================================= 
C_IQUANT	PROC 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		MOV	CX,256 
		XOR	AX,AX 
		LEA	DI,X1 
		REPZ	STOSW 
		POP	ES 
		XOR	SI,SI 
		MOV	CX,63 
		MOV	AX,LH_DENIST 
		AND	AX,AX 
		JZ	CDO1 
		IMUL	COLOR_TABLE 
		CALL	IQSTD 
CDO1:  		ADD	SI,2 
		MOV	AX,LH_DENIST[SI] 
		AND	AX,AX 
		JZ	CDO2 
		IMUL	COLOR_TABLE[SI] 
		SHL     SI,1 
		CALL	IQSTD 
		SHR	SI,1 
CDO2:		DEC	CX 
		JNE	CDO1 
		RET 
C_IQUANT	ENDP 
;======================================= 
IDCT_2D_87	PROC 	NEAR 
		LEA	SI,X1 
		MOV	CX,64 
IRET_DATA_FORMAT: 
		SHL	BYTE PTR [SI+2],1 
		RCR	WORD PTR [SI+2],1 
		ADD	SI,4 
		LOOP	IRET_DATA_FORMAT 
		MOVS_2_1_87 0,0,0 
		MOVS_2_1_87 2,1,4 
		MOVS_2_1_87 3,2,4 
		MOVS_2_1_87 9,3,4 
		MOVS_2_1_87 10,4,4 
		MOVS_2_1_87 20,5,4 
		MOVS_2_1_87 21,6,4 
		MOVS_2_1_87 35,7,4 
		MOVS_2_1_87 39,8,0 
		MOVS_2_1_87 46,9,0 
		MOVS_2_1_87 50,10,0 
		MOVS_2_1_87 57,11,0 
		MOVS_2_1_87 14,12,4 
		MOVS_2_1_87 16,13,0 
		MOVS_2_1_87 25,14,0 
		MOVS_2_1_87 31,15,0 
		MOVS_2_1_87 41,16,0 
		MOVS_2_1_87 44,17,0 
		MOVS_2_1_87 52,18,0 
		MOVS_2_1_87 55,19,0 
		MOVS_2_1_87 37,20,0 
		MOVS_2_1_87 33,21,0 
		MOVS_2_1_87 23,22,0 
		MOVS_2_1_87 18,23,0 
		MOVS_2_1_87 12,24,0 
		MOVS_2_1_87 7,25,0 
		MOVS_2_1_87 5,26,4 
		MOVS_2_1_87 62,27,0 
		MOVS_2_1_87 59,28,0 
		MOVS_2_1_87 48,29,0 
		MOVS_2_1_87 27,30,4 
		MOVS_2_1_87 29,31,0 
		MOVS_2_1_87 4,32,0 
		MOVS_2_1_87 1,33,4 
		MOVS_2_1_87 63,34,0 
		MOVS_2_1_87 61,35,0 
		MOVS_2_1_87 60,36,0 
		MOVS_2_1_87 54,37,0 
		MOVS_2_1_87 53,38,0 
		MOVS_2_1_87 43,39,0 
		MOVS_2_1_87 42,40,0 
		MOVS_2_1_87 45,41,0 
		MOVS_2_1_87 51,42,0 
		MOVS_2_1_87 56,43,0 
		MOVS_2_1_87 22,44,0 
		MOVS_2_1_87 19,45,0 
		MOVS_2_1_87 11,46,0 
		MOVS_2_1_87 8,47,0 
		MOVS_2_1_87 26,48,0 
		MOVS_2_1_87 30,49,0 
		MOVS_2_1_87 40,50,0 
		MOVS_2_1_87 32,51,0 
		MOVS_2_1_87 24,52,0 
		MOVS_2_1_87 17,53,0 
		MOVS_2_1_87 13,54,0 
		MOVS_2_1_87 6,55,4 
		MOVS_2_1_87 58,56,0 
		MOVS_2_1_87 34,57,0 
		MOVS_2_1_87 36,58,0 
		MOVS_2_1_87 28,59,4 
		MOVS_2_1_87 38,60,0 
		MOVS_2_1_87 47,61,0 
		MOVS_2_1_87 49,62,0 
		MOVS_2_1_87 15,63,4 
;--------------------CODE-------------------- 
		MOV_1_2_87 0,0,2 
		MOV_1_2_87 1,1,2 
		MOV_1_2_87 2,2,2 
		MOV_1_2_87 3,3,2 
		MOV_1_2_87 4,4,2 
		MOV_1_2_87 5,5,2 
		MOV_1_2_87 6,6,2 
		MOV_1_2_87 7,7,2 
		MOV_1_2_87 8,8,2 
		MOV_1_2_87 12,12,2 
		MOV_1_2_87 26,26,2 
		FLD	X2[30*4] 
		FCHS 
		FIMUL	INT_2 
		FSTP	X1[30*4] 
		ASK_1_2_87 9,15,15,9 
		ASK_1_2_87 10,14,14,10 
		ASK_1_2_87 11,13,13,11 
		ASK_1_2_87 20,16,20,16 
		ASK_1_2_87 21,17,21,17 
		ASK_1_2_87 22,18,22,18 
		ASK_1_2_87 23,19,23,19 
		ASK_1_2_87 24,28,24,28 
		ASK_1_2_87 25,27,25,27 
		FLD 	X2[31*4] 
		FADD 	X2[29*4] 
		FCHS 
		FSTP 	X1[29*4] 
		FLD 	X2[29*4] 
		FSUB 	X2[31*4] 
		FSTP 	X1[31*4];special 29 31 
		ASK_1_2_87 32,34,32,34 
		ASK_1_2_87 47,35,47,35 
		ASK_1_2_87 46,36,46,36 
		ASK_1_2_87 45,37,45,37 
		ASK_1_2_87 44,38,44,38 
		ASK_1_2_87 57,39,57,39 
		ASK_1_2_87 58,40,58,40 
		ASK_1_2_87 51,41,51,41 
		ASK_1_2_87 52,42,52,42 
		ASK_1_2_87 53,43,53,43 
		ASK_1_2_87 48,62,48,62 
		ASK_1_2_87 49,61,49,61 
		ASK_1_2_87 50,60,50,60 
		ASK_1_2_87 56,54,54,56 
		MOV_1_2_87 33,33,2 
		MOV_1_2_87 55,55,2 
		MOV_1_2_87 59,59,2 
		MOV_1_2_87 63,63,2 
;/*===================1 level======================*/ 
		ASK_2_1_87 0,8,0,8 
		ASK_2_1_87 1,9,1,9 
		ASK_2_1_87 2,10,2,10 
		ASK_2_1_87 3,11,3,11 
		ASK_2_1_87 4,12,4,12 
		ASK_2_1_87 5,13,5,13 
		ASK_2_1_87 6,14,6,14 
		ASK_2_1_87 7,15,7,15 
		ASK_2_1_87 17,31,17,31 
		ASK_2_1_87 18,30,18,30 
		ASK_2_1_87 19,29,19,29 
		ASK_2_1_87 28,20,28,20 
		ASK_2_1_87 27,21,27,21 
		ASK_2_1_87 26,22,26,22 
		ASK_2_1_87 25,23,25,23 
		MOV_2_1_87 16,16,2 
		MOV_2_1_87 24,24,2 
		ASK_2_1_87 32,52,32,52 
		ASK_2_1_87 33,51,33,51 
		ASK_2_1_87 34,50,34,50 
		ASK_2_1_87 35,49,35,49 
		ASK_2_1_87 36,48,36,48 
		ASK_2_1_87 37,63,37,63 
		ASK_2_1_87 38,62,38,62 
		ASK_2_1_87 39,61,39,61 
		ASK_2_1_87 40,60,40,60 
		ASK_2_1_87 41,59,41,59 
		ASK_2_1_87 42,58,42,58 
		ASK_2_1_87 43,57,43,57 
		ASK_2_1_87 44,56,44,56 
		ASK_2_1_87 45,55,45,55 
		ASK_2_1_87 46,54,46,54 
		ASK_2_1_87 47,53,47,53 
;/*=====================2 level ======================*/ 
		ASK_1_2_87 0,24,0,24 
		ASK_1_2_87 8,16,8,16 
		ASK_1_2_87 1,25,1,25 
		ASK_1_2_87 9,17,9,17 
		ASK_1_2_87 2,26,2,26 
		ASK_1_2_87 10,18,10,18 
		ASK_1_2_87 3,27,3,27 
		ASK_1_2_87 11,19,11,19 
		ASK_1_2_87 4,28,4,28 
		ASK_1_2_87 12,20,12,20 
		ASK_1_2_87 5,29,5,29 
		ASK_1_2_87 13,21,13,21 
		ASK_1_2_87 6,30,6,30 
		ASK_1_2_87 14,22,14,22 
		ASK_1_2_87 7,31,7,31 
		ASK_1_2_87 15,23,15,23 
		ASK_1_2_87 33,47,33,47 
		ASK_1_2_87 34,46,34,46 
		ASK_1_2_87 35,45,35,45 
		ASK_1_2_87 36,44,36,44 
		ASK_1_2_87 37,43,37,43 
		ASK_1_2_87 38,42,38,42 
		ASK_1_2_87 39,41,39,41 
		ASK_1_2_87 49,63,49,63 
		ASK_1_2_87 50,62,50,62 
		ASK_1_2_87 51,61,51,61 
		ASK_1_2_87 52,60,52,60 
		ASK_1_2_87 53,59,53,59 
		ASK_1_2_87 54,58,54,58 
		ASK_1_2_87 55,57,55,57 
		MOV_1_2_87 32,32,2 
		MOV_1_2_87 40,40,2 
		MOV_1_2_87 48,48,2 
		MOV_1_2_87 56,56,2 
		LEA	BP,X1 
		MOV	COUNTOR1,8 
AGAIN1_87: 	FLD 	DWORD PTR DS:[BP+0*4];0-0 
		FIDIV 	INT_64 
		FLD 	DWORD PTR DS:[BP+4*4];1-4 
		FIDIV 	INT_32 
		FDIV 	CONST66 
		FLD 	DWORD PTR DS:[BP+2*4];2-2 
		FIDIV 	INT_32 
		FLD 	DWORD PTR DS:[BP+6*4] ;3-6 
		FIDIV 	INT_32 
		FADD 	ST,ST(1)  ;3=3+2 
		FDIV 	CONST66 
		FLD 	DWORD PTR DS:[BP+1*4];4-1 
		FIDIV 	INT_32 
		FLD 	DWORD PTR DS:[BP+5*4] ;5-5 
		FIDIV 	INT_32 
		FLD 	DWORD PTR DS:[BP+3*4];6-3 
		FIDIV 	INT_32 
		FLD 	DWORD PTR DS:[BP+7*4];7-7 
		FIDIV 	INT_32 
		FADD 	ST,ST(2);7=7+5 
		FINCSTP 
		FADD 	ST(1),ST;5=6+5 
		FINCSTP 
		FDIV	CONST66 
		FDECSTP 
		FADD 	ST,ST(2);6=6+4 
		FDECSTP 
		FADD 	ST,ST(1);7=7+6 
		FDIV 	CONST66 
;------------------------------------ 
		FDECSTP 
		FST 	TMP0 
		FADD 	ST,ST(7);0=0+1 
		FDECSTP 
		FSUBR 	TMP0;1=0-1 
		FDECSTP 
		FST 	TMP0 
		FADD 	ST,ST(7);2=2+3 
		FDIV 	CONST44 
		FDECSTP 
		FSUBR 	TMP0;3=2-3 
		FDIV  	CONST55 
		FDECSTP 
		FST 	TMP0 
		FADD 	ST,ST(7);4=4+5 
		FDECSTP 
		FSUBR 	TMP0;5=4-5 
		FDECSTP 
		FST 	TMP0 
		FADD 	ST,ST(7);6=6+7 
		FDIV 	CONST44 
		FDECSTP 
		FSUBR 	TMP0;L7=6-7 
		FDIV 	CONST55 
		FDECSTP 
;---------------------------------- 
		FST 	TMP0 
		FADD 	ST,ST(6);0=0+2 
		FDECSTP 
		FST 	TMP1 
		FADD 	ST,ST(6);1=1+3 
		FDECSTP 
		FSUBR 	TMP0;2=0-2 
		FDECSTP 
		FSUBR 	TMP1;3=1-3 
		FDECSTP 
		FST 	TMP0 
		FADD 	ST,ST(6);4=4+6 
		FDIV 	CONST01 
		FDECSTP 
		FST 	TMP1 
		FADD 	ST,ST(6);5=5+7 
		FDIV 	CONST11 
		FDECSTP 
		FSUBR 	TMP0;6=4-6 
		FDIV 	CONST22 
		FDECSTP 
		FSUBR 	TMP1;7=5-7 
		FDIV 	CONST33 
		FDECSTP 
;---------------------------------------- 
		FST 	TMP0 
		FADD 	ST,ST(4);0=0+4 
		FDECSTP 
		FST 	TMP1 
		FADD 	ST,ST(4);1=1+5 
		FDECSTP 
		FST 	TMP2 
		FADD 	ST,ST(4);2=2+6 
		FDECSTP 
		FST 	TMP3 
		FADD 	ST,ST(4);3=3+7 
		FDECSTP 
		FSUBR 	TMP0 ;4=0-4 
		FDECSTP 
		FSUBR 	TMP1 ;5=1-5 
		FDECSTP 
		FSUBR 	TMP2 ;6=2-6 
		FDECSTP 
		FSUBR 	TMP3 ;7=3-7 
;-------------------------------- 
		FSTP 	DWORD PTR DS:[BP+5*4];7-5 
		FSTP 	DWORD PTR DS:[BP+4*4];6-4 
		FSTP 	DWORD PTR DS:[BP+6*4];5-6 
		FSTP 	DWORD PTR DS:[BP+7*4];4-7 
		FSTP 	DWORD PTR DS:[BP+2*4];3-2 
		FSTP 	DWORD PTR DS:[BP+3*4];2-3 
		FSTP 	DWORD PTR DS:[BP+1*4];1-1 
		FSTP 	DWORD PTR DS:[BP+0*4];0-0 
		ADD	BP,32 
		DEC	COUNTOR1 
		JE	GO_87 
		JMP	AGAIN1_87 
GO_87:          LEA	SI,X1 
		MOV	CX,64 
ICHG_DATA_FORMAT: 
		SHL	WORD PTR [SI+2],1 
		RCR	BYTE PTR [SI+2],1 
		ADD	SI,4 
		LOOP	ICHG_DATA_FORMAT 
		RET 
IDCT_2D_87	ENDP 
;====================================== 
IDCT_2D		PROC	NEAR 
		MOVS_2_1 0,0,0 
		MOVS_2_1 2,1,4 
		MOVS_2_1 3,2,4 
		MOVS_2_1 9,3,4 
		MOVS_2_1 10,4,4 
		MOVS_2_1 20,5,4 
		MOVS_2_1 21,6,4 
		MOVS_2_1 35,7,4 
		MOVS_2_1 39,8,0 
		MOVS_2_1 46,9,0 
		MOVS_2_1 50,10,0 
		MOVS_2_1 57,11,0 
		MOVS_2_1 14,12,4 
		MOVS_2_1 16,13,0 
		MOVS_2_1 25,14,0 
		MOVS_2_1 31,15,0 
		MOVS_2_1 41,16,0 
		MOVS_2_1 44,17,0 
		MOVS_2_1 52,18,0 
		MOVS_2_1 55,19,0 
		MOVS_2_1 37,20,0 
		MOVS_2_1 33,21,0 
		MOVS_2_1 23,22,0 
		MOVS_2_1 18,23,0 
		MOVS_2_1 12,24,0 
		MOVS_2_1 7,25,0 
		MOVS_2_1 5,26,4 
		MOVS_2_1 62,27,0 
		MOVS_2_1 59,28,0 
		MOVS_2_1 48,29,0 
		MOVS_2_1 27,30,4 
		MOVS_2_1 29,31,0 
		MOVS_2_1 4,32,0 
		MOVS_2_1 1,33,4 
		MOVS_2_1 63,34,0 
		MOVS_2_1 61,35,0 
		MOVS_2_1 60,36,0 
		MOVS_2_1 54,37,0 
		MOVS_2_1 53,38,0 
		MOVS_2_1 43,39,0 
		MOVS_2_1 42,40,0 
		MOVS_2_1 45,41,0 
		MOVS_2_1 51,42,0 
		MOVS_2_1 56,43,0 
		MOVS_2_1 22,44,0 
		MOVS_2_1 19,45,0 
		MOVS_2_1 11,46,0 
		MOVS_2_1 8,47,0 
		MOVS_2_1 26,48,0 
		MOVS_2_1 30,49,0 
		MOVS_2_1 40,50,0 
		MOVS_2_1 32,51,0 
		MOVS_2_1 24,52,0 
		MOVS_2_1 17,53,0 
		MOVS_2_1 13,54,0 
		MOVS_2_1 6,55,4 
		MOVS_2_1 58,56,0 
		MOVS_2_1 34,57,0 
		MOVS_2_1 36,58,0 
		MOVS_2_1 28,59,4 
		MOVS_2_1 38,60,0 
		MOVS_2_1 47,61,0 
		MOVS_2_1 49,62,0 
		MOVS_2_1 15,63,4 
;--------------------CODE-------------------- 
		MOV_1_2 0,0,2 
		MOV_1_2 1,1,2 
		MOV_1_2 2,2,2 
		MOV_1_2 3,3,2 
		MOV_1_2 4,4,2 
		MOV_1_2 5,5,2 
		MOV_1_2 6,6,2 
		MOV_1_2 7,7,2 
		MOV_1_2 8,8,2 
		MOV_1_2 12,12,2 
		MOV_1_2 26,26,2 
		MOV	AX,WORD PTR X2[30*4] 
		MOV	BX,WORD PTR X2[30*4+2] 
		PUSH	AX 
		OR	AX,BX 
		POP	AX 
		JZ	Z1 
		INC	BH 
		SUB	BL,80H 
Z1:		MOV	WORD PTR X1[30*4],AX 
		MOV	WORD PTR X1[30*4+2],BX 
		ASK_1_2 9,15,15,9 
		ASK_1_2 10,14,14,10 
		ASK_1_2 11,13,13,11 
		ASK_1_2 20,16,20,16 
		ASK_1_2 21,17,21,17 
		ASK_1_2 22,18,22,18 
		ASK_1_2 23,19,23,19 
		ASK_1_2 24,28,24,28 
		ASK_1_2 25,27,25,27 
		MOV	AX,WORD PTR X2[29*4+2] 
		MOV	BX,WORD PTR X2[29*4] 
		MOV	CX,WORD PTR X2[31*4+2] 
		MOV	DX,WORD PTR X2[31*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		SUB	AL,80H 
		MOV	WORD PTR X1[29*4+2],AX 
		MOV	WORD PTR X1[29*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD 
		MOV	WORD PTR X1[31*4+2],AX 
		MOV	WORD PTR X1[31*4],BX 
		ASK_1_2 32,34,32,34 
		ASK_1_2 47,35,47,35 
		ASK_1_2 46,36,46,36 
		ASK_1_2 45,37,45,37 
		ASK_1_2 44,38,44,38 
		ASK_1_2 57,39,57,39 
		ASK_1_2 58,40,58,40 
		ASK_1_2 51,41,51,41 
		ASK_1_2 52,42,52,42 
		ASK_1_2 53,43,53,43 
		ASK_1_2 48,62,48,62 
		ASK_1_2 49,61,49,61 
		ASK_1_2 50,60,50,60 
		ASK_1_2 56,54,54,56 
		MOV_1_2 33,33,2 
		MOV_1_2 55,55,2 
		MOV_1_2 59,59,2 
		MOV_1_2 63,63,2 
;/*===================1 level======================*/ 
		ASK_2_1 0,8,0,8 
		ASK_2_1 1,9,1,9 
		ASK_2_1 2,10,2,10 
		ASK_2_1 3,11,3,11 
		ASK_2_1 4,12,4,12 
		ASK_2_1 5,13,5,13 
		ASK_2_1 6,14,6,14 
		ASK_2_1 7,15,7,15 
		ASK_2_1 17,31,17,31 
		ASK_2_1 18,30,18,30 
		ASK_2_1 19,29,19,29 
		ASK_2_1 28,20,28,20 
		ASK_2_1 27,21,27,21 
		ASK_2_1 26,22,26,22 
		ASK_2_1 25,23,25,23 
		MOV_2_1 16,16,2 
		MOV_2_1 24,24,2 
		ASK_2_1 32,52,32,52 
		ASK_2_1 33,51,33,51 
		ASK_2_1 34,50,34,50 
		ASK_2_1 35,49,35,49 
		ASK_2_1 36,48,36,48 
		ASK_2_1 37,63,37,63 
		ASK_2_1 38,62,38,62 
		ASK_2_1 39,61,39,61 
		ASK_2_1 40,60,40,60 
		ASK_2_1 41,59,41,59 
		ASK_2_1 42,58,42,58 
		ASK_2_1 43,57,43,57 
		ASK_2_1 44,56,44,56 
		ASK_2_1 45,55,45,55 
		ASK_2_1 46,54,46,54 
		ASK_2_1 47,53,47,53 
;/*=====================2 level ======================*/ 
		ASK_1_2 0,24,0,24 
		ASK_1_2 8,16,8,16 
		ASK_1_2 1,25,1,25 
		ASK_1_2 9,17,9,17 
		ASK_1_2 2,26,2,26 
		ASK_1_2 10,18,10,18 
		ASK_1_2 3,27,3,27 
		ASK_1_2 11,19,11,19 
		ASK_1_2 4,28,4,28 
		ASK_1_2 12,20,12,20 
		ASK_1_2 5,29,5,29 
		ASK_1_2 13,21,13,21 
		ASK_1_2 6,30,6,30 
		ASK_1_2 14,22,14,22 
		ASK_1_2 7,31,7,31 
		ASK_1_2 15,23,15,23 
		ASK_1_2 33,47,33,47 
		ASK_1_2 34,46,34,46 
		ASK_1_2 35,45,35,45 
		ASK_1_2 36,44,36,44 
		ASK_1_2 37,43,37,43 
		ASK_1_2 38,42,38,42 
		ASK_1_2 39,41,39,41 
		ASK_1_2 49,63,49,63 
		ASK_1_2 50,62,50,62 
		ASK_1_2 51,61,51,61 
		ASK_1_2 52,60,52,60 
		ASK_1_2 53,59,53,59 
		ASK_1_2 54,58,54,58 
		ASK_1_2 55,57,55,57 
		MOV_1_2 32,32,2 
		MOV_1_2 40,40,2 
		MOV_1_2 48,48,2 
		MOV_1_2 56,56,2 
		LEA	SI,X1 
		MOV	COUNTOR1,8 
AGAIN1: 	DIV32	0,64 
		DIV32	4,32 
		LEA	BP,CONST6 
		LEA	DI,[SI+4*4] 
		CALL	FLOAT_DIV 
		DIV32	2,32 
		DIV32	6,32 
		MOV	BX,[SI+6*4] 
		MOV	CX,[SI+2*4+2] 
		MOV	DX,[SI+2*4] 
		CALL	FLOAT_ADD 
		MOV	[SI+6*4+2],AX 
		MOV	[SI+6*4],BX 
		LEA	BP,CONST6 
		LEA	DI,[SI+6*4] 
		CALL	FLOAT_DIV 
		DIV32	1,32 
		DIV32	5,32 
		DIV32	3,32 
		DIV32	7,32 
		MOV	BX,[SI+7*4] 
		MOV	CX,[SI+5*4+2] 
		MOV	DX,[SI+5*4] 
		CALL	FLOAT_ADD 
		MOV	[SI+7*4+2],AX 
		MOV	[SI+7*4],BX 
		MOV	AX,[SI+3*4+2] 
		MOV	BX,[SI+3*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		MOV	WORD PTR [SI+5*4+2],AX 
		MOV	WORD PTR [SI+5*4],BX 
		LEA	DI,[SI+5*4] 
		LEA	BP,CONST6 
		CALL	FLOAT_DIV 
		POP	BX 
		POP	AX 
		MOV	CX,[SI+1*4+2] 
		MOV	DX,[SI+1*4] 
		CALL	FLOAT_ADD 
		MOV	WORD PTR [SI+3*4+2],AX 
		MOV	WORD PTR [SI+3*4],BX 
		MOV	CX,WORD PTR [SI+7*4+2] 
		MOV	DX,WORD PTR [SI+7*4] 
		CALL	FLOAT_ADD 
		MOV	WORD PTR [SI+7*4+2],AX 
		MOV	WORD PTR [SI+7*4],BX 
		LEA	BP,CONST6 
		LEA	DI,[SI+7*4] 
		CALL	FLOAT_DIV 
		MOV	AX,[SI+0*4+2] 
		MOV	BX,[SI+0*4] 
		MOV	CX,[SI+4*4+2] 
		MOV	DX,[SI+4*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		MOV	[SI+0*4+2],AX 
		MOV	[SI+0*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD 
		MOV	[SI+4*4+2],AX 
		MOV	[SI+4*4],BX 
		MOV	AX,[SI+2*4+2] 
		MOV	BX,[SI+2*4] 
		MOV	CX,[SI+6*4+2] 
		MOV	DX,[SI+6*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		MOV	[SI+2*4+2],AX 
		MOV	[SI+2*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD 
		MOV	[SI+6*4+2],AX 
		MOV	[SI+6*4],BX 
		LEA	BP,CONST4 
		LEA	DI,[SI+2*4] 
		CALL	FLOAT_DIV 
		LEA	BP,CONST5 
		LEA	DI,[SI+6*4] 
		CALL	FLOAT_DIV 
		MOV	AX,[SI+1*4+2] 
		MOV	BX,[SI+1*4] 
		MOV	CX,[SI+5*4+2] 
		MOV	DX,[SI+5*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		MOV	[SI+1*4+2],AX 
		MOV	[SI+1*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD 
		MOV	[SI+5*4+2],AX 
		MOV	[SI+5*4],BX 
		MOV	AX,[SI+3*4+2] 
		MOV	BX,[SI+3*4] 
		MOV	CX,[SI+7*4+2] 
		MOV	DX,[SI+7*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		MOV	[SI+3*4+2],AX 
		MOV	[SI+3*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD 
		MOV	[SI+7*4+2],AX 
		MOV	[SI+7*4],BX 
		LEA	BP,CONST4 
		LEA	DI,[SI+3*4] 
		CALL	FLOAT_DIV 
		LEA	BP,CONST5 
		LEA	DI,[SI+7*4] 
		CALL	FLOAT_DIV 
		MOV	AX,[SI+0*4+2] 
		MOV	BX,[SI+0*4] 
		MOV	CX,[SI+2*4+2] 
		MOV	DX,[SI+2*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		MOV	[SI+0*4+2],AX 
		MOV	[SI+0*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD		;2=0-2 
		MOV	[SI+2*4+2],AX 
		MOV	[SI+2*4],BX 
		MOV	AX,[SI+4*4+2] 
		MOV	BX,[SI+4*4] 
		MOV	CX,[SI+6*4+2] 
		MOV	DX,[SI+6*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		MOV	[SI+4*4+2],AX 
		MOV	[SI+4*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD		;3=1-3 
		MOV	[SI+6*4+2],AX 
		MOV	[SI+6*4],BX 
		MOV	AX,[SI+1*4+2] 
		MOV	BX,[SI+1*4] 
		MOV	CX,[SI+3*4+2] 
		MOV	DX,[SI+3*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD	;4=4+6 
		MOV	[SI+1*4+2],AX 
		MOV	[SI+1*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD	;6=4-6 
		MOV	[SI+3*4+2],AX 
		MOV	[SI+3*4],BX 
		LEA	BP,CONST0 
		LEA	DI,[SI+1*4] 
		CALL	FLOAT_DIV 
		LEA	BP,CONST2 
		LEA	DI,[SI+3*4] 
		CALL	FLOAT_DIV 
		MOV	AX,[SI+5*4+2] 
		MOV	BX,[SI+5*4] 
		MOV	CX,[SI+7*4+2] 
		MOV	DX,[SI+7*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD	;5=5+7 
		MOV	[SI+5*4+2],AX 
		MOV	[SI+5*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD	;7=5-7 
		MOV	[SI+7*4+2],AX 
		MOV	[SI+7*4],BX 
		LEA	BP,CONST1 
		LEA	DI,[SI+5*4] 
		CALL	FLOAT_DIV 
		LEA	BP,CONST3 
		LEA	DI,[SI+7*4] 
		CALL	FLOAT_DIV 
		MOV	AX,[SI+0*4+2] 
		MOV	BX,[SI+0*4] 
		MOV	CX,[SI+1*4+2] 
		MOV	DX,[SI+1*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		MOV	[SI+0*4+2],AX 
		MOV	[SI+0*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD		;4=0-4 
		MOV	[SI+1*4+2],AX 
		MOV	[SI+1*4],BX 
		MOV	AX,[SI+4*4+2] 
		MOV	BX,[SI+4*4] 
		MOV	CX,[SI+5*4+2] 
		MOV	DX,[SI+5*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		MOV	[SI+4*4+2],AX 
		MOV	[SI+4*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD		;5=1-5 
		MOV	[SI+5*4+2],AX 
		MOV	[SI+5*4],BX 
		MOV	AX,[SI+2*4+2] 
		MOV	BX,[SI+2*4] 
		MOV	CX,[SI+3*4+2] 
		MOV	DX,[SI+3*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		MOV	[SI+2*4+2],AX 
		MOV	[SI+2*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD		;6=2-6 
		MOV	[SI+3*4+2],AX 
		MOV	[SI+3*4],BX 
		MOV	AX,[SI+6*4+2]	;3=3+7 
		MOV	BX,[SI+6*4] 
		MOV	CX,[SI+7*4+2] 
		MOV	DX,[SI+7*4] 
		PUSH	AX 
		PUSH	BX 
		CALL	FLOAT_ADD 
		MOV	[SI+6*4+2],AX 
		MOV	[SI+6*4],BX 
		POP	BX 
		POP	AX 
		SUB	CL,80H 
		CALL	FLOAT_ADD		;7=3-7 
		MOV	[SI+7*4+2],AX 
		MOV	[SI+7*4],BX 
		MOV	CX,[SI+5*4+2] 
		MOV	DX,[SI+5*4] 
		MOV	AX,[SI+7*4+2] 
		MOV	BX,[SI+7*4] 
		MOV	[SI+5*4+2],AX 
		MOV	[SI+5*4],BX 
		MOV	AX,[SI+1*4+2] 
		MOV	BX,[SI+1*4] 
		MOV	[SI+7*4+2],AX 
		MOV	[SI+7*4],BX 
		MOV	AX,[SI+4*4+2] 
		MOV	BX,[SI+4*4] 
		MOV	[SI+1*4+2],AX 
		MOV	[SI+1*4],BX 
		MOV	AX,[SI+3*4+2] 
		MOV	BX,[SI+3*4] 
		MOV	[SI+4*4+2],AX 
		MOV	[SI+4*4],BX 
		MOV	AX,[SI+2*4+2] 
		MOV	BX,[SI+2*4] 
		MOV	[SI+3*4+2],AX 
		MOV	[SI+3*4],BX 
		MOV	AX,[SI+6*4+2] 
		MOV	BX,[SI+6*4] 
		MOV	[SI+2*4+2],AX 
		MOV	[SI+2*4],BX 
		MOV	[SI+6*4+2],CX 
		MOV	[SI+6*4],DX 
;------------------------------------- 
		ADD	SI,32 
		DEC	COUNTOR1 
		JE	GO 
		JMP	AGAIN1 
GO: 
		RET 
IDCT_2D		ENDP 
;====================================== 
MOVE_DATA_BUFF	PROC 
		PUSH	ES 
		MOV	AX,SOURCE 
		MOV	ES,AX 
		PUSH	SI 
		MOV	SI,LOCATION 
		XOR	BP,BP 
		ASK_X_1 0,4,0,0,512,0 
		ASK_X_1 0,4,1,1,512,0 
		ASK_X_1 0,4,2,2,512,0 
		ASK_X_1 0,4,3,3,512,0 
		ASK_X_1 0,4,4,4,512,0 
		ASK_X_1 0,4,5,5,512,0 
		ASK_X_1 0,4,6,6,512,0 
		ASK_X_1 0,4,7,7,512,0 
		XOR	BP,BP 
		ASK_X_1 1,6,0,1,512,0 
		ASK_X_1 1,6,1,4,512,0 
		ASK_X_1 1,6,2,7,512,0 
		ASK_X_1 1,6,3,2,512,1 
		ASK_X_1 1,6,4,5,512,1 
		ASK_X_1 1,6,5,0,512,0 
		ASK_X_1 1,6,6,3,512,0 
		ASK_X_1 1,6,7,6,512,0 
		XOR	BP,BP 
		ASK_X_1 2,7,0,2,512,0 
		ASK_X_1 2,7,1,7,512,0 
		ASK_X_1 2,7,2,4,512,1 
		ASK_X_1 2,7,3,1,512,0 
		ASK_X_1 2,7,4,6,512,0 
		ASK_X_1 2,7,5,3,512,1 
		ASK_X_1 2,7,6,0,512,0 
		ASK_X_1 2,7,7,5,512,0 
		XOR	BP,BP 
		ASK_X_1 3,5,0,3,512,0 
		ASK_X_1 3,5,1,2,512,1 
		ASK_X_1 3,5,2,1,512,0 
		ASK_X_1 3,5,3,0,512,1 
		ASK_X_1 3,5,4,7,512,1 
		ASK_X_1 3,5,5,6,512,0 
		ASK_X_1 3,5,6,5,512,1 
		ASK_X_1 3,5,7,4,512,0 
		POP	SI 
		POP	ES 
		RET 
MOVE_DATA_BUFF 	ENDP 
;====================================== 
IQSTD		PROC 
		AND	DX,DX 
		PUSHF 
		JNS	SHIFT1 
		NEG	AX 
SHIFT1:		MOV	BYTE PTR X1[SI+3],8EH 
SHIFT2:		SHL	AX,1 
		JC	STAND_END 
		DEC	BYTE PTR X1[SI+3] 
		JMP	SHIFT2 
STAND_END:	MOV	BYTE PTR X1[SI],0 
		MOV	WORD PTR X1[SI+1],AX 
		SHR	WORD PTR X1[SI+1],1 
		RCR	BYTE PTR X1[SI],1 
		POPF 
		JZ	SET 
		OR	BYTE PTR X1[SI+2],80H 
SET:		RET 
IQSTD		ENDP 
;************************************** 
;Input:		AX:BX+CX:DX 
;Output:        AX:BX 
;************************************** 
FLOAT_ADD 	PROC    NEAR 
FADD00:		PUSH	CX 
		PUSH	DX 
		PUSH	AX 
		OR	AX,BX 
		POP	AX 
		JZ	FADD1 
		PUSH	CX 
		OR	CX,DX 
		POP	CX 
		JZ	FADD12 
 
;	CMP	AX,80H 
;	JNZ	NXT0 
;	AND	BX,BX 
;	JNZ	NXT0 
;	XOR	AX,AX 
;	JMP	FADD1 
;NXT0:	CMP	CX,80H 
;	JNZ	NXT1 
;	AND	DX,DX 
;	JNZ	NXT1 
;	XOR	CX,CX 
;	JMP	FADD12 
;NXT1: 
		CMP	AH,CH 
		JZ	FADD3 
		JNC	FADD4 
		XCHG	AX,CX 
		XCHG	BX,DX 
FADD4:		SUB	AH,CH 
		CMP	AH,24 
		JC	FADD5 
		ADD	AH,CH 
		JMP	FADD21 
FADD5:		AND	AL,AL 
		PUSHF 
		XOR	AL,CL 
		PUSHF 
		XOR	AL,CL 
		OR	CL,80H 
FADD6:  	SHR	CL,1 
		RCR	DX,1 
		INC	CH 
		DEC	AH 
		JNZ	FADD6 
		MOV	AH,CH 
		OR	AL,80H 
FADD7:		POPF 
		JS	FADD8 
FADD9:		ADD	BX,DX 
		ADC	AL,CL 
		RCR	AL,1 
		RCR	BX,1 
		INC	AH 
FADD10:		TEST	AL,80H 
		JNZ	FADD11 
		SHL	BX,1 
		RCL	AL,1 
		DEC	AH 
		JMP	FADD10 
FADD11:		POPF 
		JS	FADD12 
		AND	AL,7FH 
FADD12:		CLC 
		POP	DX 
		POP	CX 
		RET 
FADD8:		SUB	BX,DX 
		SBB	AL,CL 
		JMP	FADD10 
FADD1:		XCHG	AX,CX 
		XCHG	BX,DX 
		JMP	FADD12 
FADD3:		AND	AL,AL 
		PUSHF 
		XOR	AL,CL 
		PUSHF 
		XOR	AL,CL 
		POPF 
		JS	FADD14 
		OR	AL,80H 
		OR	CL,80H 
		JMP	FADD9 
FADD14:		AND	CL,CL 
		PUSHF 
		JS	FADD15 
		OR	CL,80H 
FADD15:		OR	AL,80H 
		CMP	AL,CL 
		JNZ	FADD13 
		CMP	BX,DX 
		JNZ	FADD13 
		POPF 
		POPF 
		XOR	AX,AX 
		XOR	BX,BX 
		POP	DX 
		POP     CX 
		RET 
FADD13:		JNC	FADD16 
		XCHG    AX,CX 
		XCHG	BX,DX 
		POP	DI 
		POPF 
		PUSH	DI 
		JMP	FADD8 
FADD16:		POPF 
		JMP	FADD8 
FADD21:		STC 
		POP	DX 
		POP	CX 
		RET 
FLOAT_ADD	ENDP 
;************************************** 
; INPUT SR:BP DT:DI TEMP:BX 
; DT=SR*DT 
;************************************** 
FLOAT_MUL	PROC 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		MOV	DX,DS:[BP+2] 
		PUSH	DX 
		OR	DX,DS:[BP] 
		POP	DX 
		JNZ	NOT_ZERO1 
		JMP	MUL_ZERO 
NOT_ZERO1:	MOV	CX,[DI+2] 
		PUSH	CX 
		OR	CX,[DI] 
		POP	CX 
		JNZ	NOT_ZERO 
		JMP	MUL_ZERO 
NOT_ZERO:	XOR	DL,CL 
		PUSHF 
		XOR	DL,CL 
		PUSH	DX 
		OR	DL,80H 
		OR	CL,80H 
		MOV	DS:[BP+2],DL 
		MOV	[DI+2],CL 
		ADD	DH,CH 
		SUB	DH,7DH 
		MOV	[DI+3],DH 
		XOR	AX,AX 
		PUSH	DI 
		LEA	BX,MUL_TEMP 
		MOV	DI,BX 
		MOV	CX,3 
		REPZ	STOSW 
		POP	DI 
		PUSH	DI 
		PUSH	BP 
		MOV	CX,3 
MUL_LOOP1:	PUSH	CX 
		MOV	DL,DS:[BP] 
		INC	BP 
		PUSH	BX 
		PUSH	DI 
		MOV	CX,3 
MUL_LOOP2:      MOV	AL,[DI] 
		INC	DI 
		MUL	DL 
		ADD	[BX],AX 
		INC	BX 
		LOOP	MUL_LOOP2 
		POP	DI 
		POP	BX 
		INC	BX 
		POP	CX 
		LOOP	MUL_LOOP1 
		POP	BP 
		POP	DI 
		POP     DS:[BP+2] 
		LEA	BX,MUL_TEMP+2 
		XOR	CL,CL 
FSTD:		INC	CL 
		SHL	WORD PTR [BX],1 
		RCL	WORD PTR [BX+2],1 
		JNC	FSTD 
		SUB	[DI+3],CL 
		MOV	AX,[BX+1] 
		MOV	[DI],AX 
		MOV	AH,[BX+3] 
		MOV	[DI+2],AH 
		SHR	BYTE PTR [DI+2],1 
		RCR	WORD PTR [DI],1 
		ADC     WORD PTR [DI],0 
		ADC	WORD PTR [DI+2],0 
		POPF 
		JNS	MUL_END 
		OR	BYTE PTR [DI+2],80H 
		JMP	MUL_END 
MUL_ZERO:	XOR	AX,AX 
		MOV	[DI],AX 
		MOV     [DI+2],AX 
MUL_END:	POP	ES 
		RET 
FLOAT_MUL	ENDP 
;************************************** 
; SR=BP , DT=DI , TEMP:MUL_TEMP=BX 
; DT=DT/SR; 
;************************************** 
FLOAT_DIV	PROC 
		PUSH	ES 
		PUSH	DS 
		POP	ES 
		MOV     CX,[DI+2] 
		PUSH	CX 
		OR	CX,[DI] 
		POP	CX 
		JNZ	CONT0 
		JMP	DIV_ZERO 
CONT0:		MOV	AX,DS:[BP+2] 
		XOR	AL,CL 
		PUSHF 
		XOR	AL,CL 
		PUSH	AX 
		SUB	CH,AH 
		CMP	CH,-24 
		JG	CONT1 
		POP	AX 
		POPF 
		JMP	DIV_ZERO 
CONT1:  	OR	CL,80H 
		ADD	CH,80H 
		MOV	[DI+3],CH 
		OR	AL,80H 
		MOV	DS:[BP+2],AL 
		LEA	BX,MUL_TEMP+3 
		MOV	[BX+2],CL 
		MOV	AX,[DI] 
		MOV	[BX],AX 
		XOR	CH,CH 
		MOV	[BX-1],CH 
		SHR	WORD PTR [BX+1],1 
		RCR	WORD PTR [BX-1],1 
		MOV	CX,24 
DIVP:		PUSH	CX 
		SHL	WORD PTR [DI],1 
		RCL	BYTE PTR [DI+2],1 
		SHL	WORD PTR [BX-1],1 
		RCL	word PTR [BX+1],1 
		JC	MSUB0 
		MOV	CX,3 
		PUSH	BX 
		PUSH	BP 
		ADD	BX,2 
		ADD	BP,2 
COMPARE:	MOV	AL,[BX] 
		CMP	AL,DS:[BP] 
		JNZ	CONT3 
		DEC	BX 
		DEC	BP 
		LOOP	COMPARE 
CONT3: 		POP	BP 
		POP	BX 
		JC	CHCNT 
MSUB0:		PUSH	BP 
		PUSH	BX 
		MOV	CX,3 
		CLC 
MSUB:		MOV     AL,DS:[BP] 
		SBB	[BX],AL 
		INC	BP 
		INC	BX 
		LOOP    MSUB 
		POP	BX 
		POP	BP 
		INC	BYTE PTR [DI] 
CHCNT:		POP	CX 
		LOOP	DIVP 
		XOR	CL,CL 
STDP:  		INC	CL 
		SHL	WORD PTR [DI],1 
		RCL	BYTE PTR [DI+2],1 
		JNC	STDP 
		SUB	[DI+3],CL 
		SHR	BYTE PTR [DI+2],1 
		RCR	WORD PTR [DI],1 
		POP	DS:[BP+2] 
		POPF 
		JNS	CONT4 
		OR	BYTE PTR [DI+2],80H 
CONT4:  	JMP	DIV_END 
DIV_ZERO:       XOR	AX,AX 
		MOV	WORD PTR [DI],AX 
		MOV	WORD PTR [DI+2],AX 
DIV_END:	POP	ES 
		RET 
FLOAT_DIV	ENDP 
_JPEG_TEXT	ENDS 
		END