⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpeg.txt

📁 此代码的TI DSP 5000系列的DSP汇编源代码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
	MAR AR5
	MAR *AR5+0
	MAR AR7
	BANZ BLOCKDE_LOOP0,*AR7-
;-----------------------------
;JPEG输出
;-----------------------------
JPEGOUT:
	MAR AR4
	STM #PICT,AR4
	STM #(160*120/8)-1,AR7
JPEGOUT_LOOP:
	MAR AR4
	PORTW *AR4+,0
	PORTW *AR4+,0
	PORTW *AR4+,0
	PORTW *AR4+,0
	PORTW *AR4+,0
	PORTW *AR4+,0
	PORTW *AR4+,0
	PORTW *AR4+,0
	MAR AR7
	BANZ JPEGOUT_LOOP,*AR7-
;--------------------------------
;恢复程序运行环境
;--------------------------------
	LD #J_STACK,DP
	PSHD J_STACK,DP
	MVMD AR7,J_STACK+7
	MVMD AR6,J_STACK+6
	MVDM J_STACK+5,AR5
	MVDM J_STACK+4,AR4
	MVDM J_STACK+3,AR3
	MVDM J_STACK+2,AR2
	MVDM J_STACK+1,AR1
	LD #0,DP
	MVDM J_STATUS+1,ST1
	MVDM J_STATUS,ST0
	RET
;-----------------------------
;块充重组
;-----------------------------
BLOCK_ASSEMBLE:
	STM #NEXT_LINE,AR0
	MAR AR5
	RPT #7
	MVKD #BLOCK_RESULT,*AR5+
	MAR *AR5+0
	RPT #7
	MVKD #BLOCK_RESULT+8,*AR5+
	MAR *AR5+0
	RPT #7
	MVKD #BLOCK_RESULT+16,*AR5+
	MAR *AR5+0
	RPT #7
	MVKD #BLOCK_RESULT+24,*AR5+
	MAR *AR5+0
	RPT #7
	MVKD #BLOCK_RESULT+32,*AR5+
	MAR *AR5+0
	RPT #7
	MVKD #BLOCK_RESULT+40,*AR5+
	MAR *AR5+0
	RPT #7
	MVKD #BLOCK_RESULT+48,*AR5+
	MAR *AR5+0
	RPT #7
	MVKD #BLOCK_RESULT+56,*AR5+
	STM #NEXT_SECTION,AR0
	MAR *AR5-0
	RET
;--------------------------------
;JPEG解码初始化
;包括DCT、量化和Huffman解码三部分
;---------------------------------
JPEG_DEC_INIT:
IDCT_INIT:
		SSBX SXM
		SSBX OVM
		MAR AR5
		STM #0200H,AR5
		RPT #63
		MVPD #IDCT_COEF,*AR5+
DEQUANT_INIT:
		MAR AR5
		STM #DQUANT_TABLE,AR5
		RPT #63
		MVPD #Y_DQUANTIZE_TABLE,*AR5+
		STM #DZIGZAG_TABLE,AR5
		RPT #63
		MVPD #ZIGZAG_TABLE1,*AR5+
DEHUFF_INIT:
		MAR AR4
		STM #DETABLE,AR4
		RPT #250
		MVPD #RD48TAB,*AR4+
		STM #D12TAB,AR4
		RPT #87
		MVPD #RD12TAB,*AR4+
		RPT #47
		MVPD #HDCDECODE_TABLE,*AR4+
		RPT #16
		MVPD #LOWMASK,*AR4+
		LD #MASKDATA,DP
		ST #0FFF0H,MASKDATA
		ST #0F000H,MASKSIZE
		ST #0AH,EOB
		ST #0H,LAST_DC
		ST #0H,LAST_RESULT
		ST #10H,USER_BIT
		ST #0H,LESS_BIT
		STM #COMPRESS_DATA,AR4
		LD *AR4+,A
		MVMD AR4,DC_TALL
		STL A,DATA
		LD #DC_TAIL,DP
		STM DC_TAIL,AR4
		STM #PICT,AR5
		MVMD AR5,DST
		RET
;-----------------------
;块解码
;-----------------------
BLOCKDE.ASM
		.MMREGS
		.DEF BLOCK_DECODE,SIZE
		.DEF BLK1_ADDR,DQZB1,DQZBR
		.DEF EMASK,DETABLE,DCDETAB
		.DEF DQUANT_TABLE,F_TAB
		.DEF NEG_VSIZE,JUDGE_DATA
		.DEF DZIGZAG_TABLE,D12TAB
		.DEF COWORD_SIZE,V_SIZE
		.REF B_STATUS,B_STACK,IDCT
		.REF DC_TAIL,DATA,LAST_DC
		.REF EOB,ZIGZAG_TABLE1
		.REF IDCT_COEF,LOWMASK
		.REF SRC,LAST_RESULT,LESS_BIT
		.REF Y_DQUANTIZE_TABLE
		.REF RD48TAB,RD12TAB,RZERO
		.REF MAX_VALUE,MIN_VALUE
		.REF COMPRESS_DATA,EOB_SIZE
		.REF COWORD,DCTB1,USER_BIT
		.REF DIFF,ABSDIFF

		DQZBR	.USECT"DQ_BLK",64
		DQZB1	.USECT"DQ_BLK",64
		DQUANT_TABLE	.USECT"DQ_TBL",64
		DZIGZAG_TABLE	.USECT"DQ_TBL",64
		DETABLE		.USECT"DEHUFFTAB",251		
		D12TAB		.USECT"DEHUFFTAB",88
		DCDETAB		.USECT"DEHUFFTAB",48
		EMASK		.USECT"DEHUFFTAB",17
		F_TAB		.USECT"HUF_VAR",1
		SIZE		.USECT"HUF_VAR",1
		COWORD		.USECT"HUF_VAR",1
		V_SIZE		.USECT"HUF_VAR",1
		NEG_VSIZE	.USECT"HUF_VAR",1
		JUDGE_DATA	.USECT"HUF_VAR",1
		CHECKDC		.USECT"HUF_VAR",1
		BLK1_ADDR	.SET DQZB1
					.TEXT
		BLOCK_DECODE:
;-----------------------------------
;保存程序运行环境
;-----------------------------------
		MVMD ST0,B_STATUS
		MVMD ST1,B_STATUS
		LD #B_STACK,DP
		MVMD AR1,B_STACK
		MVMD AR2,B_STACK+1
		MVMD AR3,B_STACK+2
		MVMD AR6,B_STACK+3
		POPD B_STACK+4
;--------------------------
;Huffman解码、反量化,IDCT
;--------------------------
		CALL HUFFDECODE
		CALL DQUANT
		CALL IDCT
		CALL JPEG_FINAL
;--------------------------
;恢复程序运行环境
;--------------------------
		LD #B_STACK,DP
		PSHD B_STACK+4
		STM B_STACK+3,AR6
		STM B_STACK+2,AR3
		STM B_STACK+1,AR2
		STM B_STACK,AR1
		LD #0,DP
		STM B_STATUS+1,ST1
		STM B_STATUS,ST0
		RET
JPEG_FINAL:
		STM #DCTB1,AR2
		STM #63,AR3
		MAR AR2
BOUND:
		LD *AR2,A
		BC NEG_BOUND,ALT
		SUB #MAX_VALUE,A
		BC END_BOUND,ALT
		LD #MAX_VALUE,A
		STL A,*AR2
		B END_BOUND
NEG_BOUND:
		SUB #MIN_VALUE,A
		BC END_BOUND,AGT
		LD #MIN_VALUE,A
		STL A,*AR2+
		B END_BOUND
END_BOUND:
		MAR *AR2+
		MAR AR0
		BANZ BOUND,*AR0-
ADD_128:
		MAR AR2
		STM #DCTB1,AR2
		STM #63,AR3
JF_LOOP:
		MAR AR2
		LD *AR2,A
		ADD #128,A
		STL A,*AR2+
		MAR AR3
		BANZ JF_LOOP,*AR3-
		RET
;----------------------------
;反量化
;----------------------------
DQUANT:
		STM #63,AR0
		STM #DQZBR,AR2
		STM #DZIGZAG_TABLE,AR3
		STM #DQUANT_TABLE,AR6
DQ_LOOP:
		MAR AR3
		MVDK *AR3+,AR1
		MAR AR1
		LD *AR1+,T
		MAR AR6
		MPY *AR6+,A
		STL A,*AR2+
		MAR AR0
		BANZ DQ_LOOP,*AR0-
		RET
;---------------------------
;Huffman解码
;---------------------------
HUFFDECODE:
		RSBX SXM
		LD #0,A
		MAR AR3
		STM #DQZB1,AR3
		RPT #63
		STL A,*AR3+
DC_DECODE:
		STM #DQZB1,AR3
		MAR AR4
		LD #LESS_BIT,DP
		ST #0FFFFH,CHECK_DC
		LD LESS_BIT,T
		LD DATA 16,A
		ADD AR4,TS,A
		STH A,JUDGE_DATA
		LD JUDGE_DATA,4,A
		STH A,ABSDIFF
		LD ABSDIFF,A
		SUB #0FH,A
		BC GDCANS,ALT
		LD JUDGE_DATA,8,A
		STH A,ABSDIFF
		LD ABSDIFF,A
		SUB #0FFH,A
		BC DCCWLT9B,ALT
		LD JUDGE_DATA,12,A
		AND #0FH,A
		ADD #20H,A
		STL A,ABSDIFF
		B GDCANS
DCCWLT9B:
		LD ABSDIFF,A
		AND #0FH,A
		ADD #10H,A		;ABSDIFF+=16
		STL A,ABSDIFF
GDCANS:
		MAR AR2
		STM DCDETAB,AR2
		STMAR0,ABSDIFF
		MAR *AR2-0
		LD *AR2-0,8,A
		AND #00FFH,8,A
		STL A,F_TAB
		CALL GET_VEN
		MAR AR3
		MAR *AR3-
		LD *AR3,A
		ADD LAST_DC,A
		STL A,*AR3+
		MAR AR4
		STL A,LAST_DC
		STM #63,AR6
AC_DECODE:
		MAR AR4
		ST #0,CHECK_DC
		STM DETABLE,AR2
		LD LESS_BIT,T
		LD DATA,16,A
		ADD *AR4,TS,A
		STH A,JUDGE_DATA
		LD JUDGE_DATA,8,A
		STH A,ABSDIFF
		LD ABSDIFF,A
		SUB #0BFH,A
		BC NOZERO,ALEQ
		SUB #03BH,A
		BC WITHZERO,ALEQ
		LD JUDGE_DATA,A
		SUB #0FF81H,A
		BC BIT12,ALT
BIT16:
		ADD #21H,A
		STL A,ABSDIFF
		LD LESS_BIT,T
		LD DATA,16,A
		ADD *AR4+,TS,A
		STL A,DATA
		MVMD AR4,DC_TAIL
		CALL JUMPZERO
		LD F_TAB,4,A
		AND #0F00H,A
		STL A,F_TAB
		ST #0FFFFH,CHECK_DC
		CALL GET_VEN
END_ACDECODE:
		BANZ ACDECODE,*AR6-
		LD COWORD,A
		SUB EOB,A
		BC END_DECODE,AEQ
		LD EOB_SIZE.A
		CALL GET_COWORD
		STH A,COWORD
END_DECODE:
		SSBX SXM
		RET
BIT12:
		MAR AR2
		LD JUDGE_DATA,12,A
		STH A,ABSDIFF
		LD ABSDIFF,A
		SUB #0FA0H-(0FAH+1H),A
		STL A,ABSDIFF
WITHZERO:
		CALL JUMPZERO
		LD F_TAB,A
		AND #0FFH,8,A
		STL A,F_TAB
		CALL GET_VEN
		B END_ACDECODE
NOZERO:
		MAR AR2
		STM DETABLE,AR2
		STM ABSDIFF,AR0
		MAR *AR2+0
		LD *AR2-0,A
		AND #0FFH,8,A
		STL,A,F_TAB
		CALL GET_VEN
		B END_ACDECODE
JUMPZERO:
		MAR AR2
		STM ABSDIFF,AR0
		MAR *AR2+0
		LD *AR2-0,A
		STL A,F_TAB
		AND 0FH,A
		STL A,RZERO
		STM RZERO,AR0
		MAR AR3
		MAR *AR3+0
		MAR AR6
		MAR *AR6-0
		RET
GET_VEN:
		LD F_TAB,4,A
		STH A,COWORD_SIZE
		AND #0F000H,A
		STH A,4,V_SIZE
		LD COWORD_SIZE,A
		CALL GET_COWORD
		STH A,COWORD
		LD CHECK_DC,A
		BC SKIP_EOB_CHECKING,ANEQ
		LD COWORD,A
		SUB EOB,A
		MAR AR6
		BC FIND_EOB,AEQ
SKIP_EOB_CHECKING:
		LD V_SIZE,A
		CALL GET_COWORD
		STH A,DIFF
		LD #16,A
		SUB V_SIZE,A
		STL A,NEG_VSIZE
		LD DIFF,A
		LD NEG_VSIZE,T
		BITT DIFF
		BC DPOSTIVE,TC
		MAR AR1
		STM EMASK,AR1
		STM V_SIZE,AR0
		MAR *AR1+0
		LD *AR1-0,A
		CMPL A
		OR DIFF,A
		ADD #1H,A
DPOSITIVE:
		MAR AR3
		STL A,*AR3+
		MAR AR6
		MAR *AR6-
		RET
FIND_EOB:
		STM #0,AR6
		RET
GET_COWORD:
		MAR AR4
		STL A,SIZE
		SUB USER_BIT,A
		STL A,LESS_BIT
		NEG A
		LD SIZE,T
		BC GET_NEWWORD,ALEQ
		STL A,USER_BIT
		LD DATA,TS,A
		STL A,DATA
		B END_GCOWORD
GET_NEWWORD:
		ADD #10H,A
		STL A,USER_BIT
		LD DATA,TS,A
		LD LESS_BIT,T
		ADD *AR4+,TS,A
		STH A,DIFF
		STL A,DATA
		MVMD AR4,DC_TAIL
		LD DC_TAIL,A
		STL A,DC_TAIL
		STM DC_TAIL,AR4
		LD DIFF,16,A
END_GCOWORD:
		RET
		
;-----------------------------
;变量与系数表
;-----------------------------
TABLES.ASM
		.MMREGS
		.DEF MAX_VALUE,MIN_VALUE
		.DEF DCT_COEF,Y_QUANT_TABLE,ZIGZAG_TABLE0,UV_QUANT_TABLE
		.DEF IDCT_COEF,Y_DQUANTIZE_TABLE
		.DEF RDCHUFF,RACHUFF
		.DEF RD48TAB,RD12TAB,LOWMASK
		.DEF RDCHUFF
		.DEF HDCDECODE_TABLE
		.DEF IMAGE_LENGTH,IMAGE_WIDTH,NEXT
		.DEF COMPRESS_DATA
		.REF BLK2_ADDR,DIFFSIZE
		.DEF PICT
		
		
		IMAGE_LENGTH	.SET 160/8
		IMAGE_WIDTH		.SET 120/8
		NEXT_LINE		.SET 152
		NEXT_SECTION	.SET 7*160
		COMPRESS_DATA	.USECT".JPEGEN",800H
		PICT			.USECT".PICTURE",8000H
		MAX_VALUE		.SET-255/2-1
		MIN_VALUE		.SECT"JPEG_TBL"
		
DCT_COEF:
.word 23170,23170,23170,23170,23170,23170,23170,23170
.word 32138,27246,18205,6393,-6393,-18205,-27246,-32138 
.word 30274,12540,-12540,-30274,-30274,-12540,12540,30274
.word 27246,-6393,-32138,-18205,18205,32138,6393,27246
.word 23170,-23170,-23170,23170,23170,-23170,-23170,23170
.word 18205,-32138,6393,27246,-27246,-6393,32138,-18205
.word 12540,-30274,30274,-12540,-12540,30274,-30274,12540
.word 6393,-18205,27246,-32138,32138,-27246,18205,-6393		
		
IDCT_COEF:
.word 32170,32138,30274,27246,23170,18205,12540,6393
.word 32170,27246,12540,-6393,-23170,-32138,-30274,-18205
.word 32170,18205,-12540,-32138,-23170,6393,30274,27246
.word 32170,6393,-30274,-18205,23170,27246,-12540,-32138
.word 32170,-6393,-30274,18205,23170,-27246,-12540,32138
.word 32170,-18205,-12540,32138,-23170,-6393,30274,-27246
.word 32170,-27246,12540,6393,-23170,32138,-30274,18205
.word 32170,-32138,30274,-27246,23170,-18205,12540,-6393
Y_QUANT_TABLE:
.word 2048,2979,3277,2048,1365,819,643,537
.word 2731,2731,2341,1725,1260,565,546,596
.word 2341,2521,2048,1365,819,575,475,585
.word 2341,1928,1489,1130,643,377,410,529
.word 1820,1489,886,585,482,301,318,426
.word 1365,936,596,512,405,315,290,356
.word 669,512,420,377,318,271,273,324
.word 455,356,345,334,293,328,318,331
UV_QUANT_TABLE:
.word 1928,1820,1365,697,331,331,331,331
.word 1820,1560,1260,496,331,331,331,331
.word 1365,1260,585,331,331,331,331,331
.word 697,496,331,331,331,331,331,331
.word 331,331,331,331,331,331,331,331
.word 331,331,331,331,331,331,331,331
.word 331,331,331,331,331,331,331,331
.word 331,331,331,331,331,331,331,331
Y_DQUANTIZE_TABLE:
.word 16,11,10,16,24,40,51,61
.word 12,12,14,19,26,58,60,55
.word 14,13,16,24,40,57,69,56
.word 14,17,22,29,51,87,80,62
.word 18,22,37,56,68,109,103,77
.word 24,35,55,64,81,104,113,92
.word 49,64,78,87,103,121,120,101
.word 72,92,95,98,112,100,103,99
UV_DQUANTIZE_TABLE:
.word 17,18,24,47,99,99,99,99
.word 18,21,26,66,99,99,99,99
.word 24,26,56,99,99,99,99,99
.word 47,66,99,99,99,99,99,99
.word 99,99,99,99,99,99,99,99
.word 99,99,99,99,99,99,99,99
.word 99,99,99,99,99,99,99,99
.word 99,99,99,99,99,99,99,99
ZIGZAG_TABLE0:
.word 0+BLK2_ADDR,1+BLK2_ADDR,5+BLK2_ADDR,6+BLK2_ADDR
.word 14+BLK2_ADDR,15+BLK2_ADDR,27+BLK2_ADDR,28+BLK2_ADDR
.word 2+BLK2_ADDR,4+BLK2_ADDR,7+BLK2_ADDR,13+BLK2_ADDR
.word 16+BLK2_ADDR,,26+BLK2_ADDR,29+BLK2_ADDR,42+BLK2_ADDR
.word 3+BLK2_ADDR,8+BLK2_ADDR,12+BLK2_ADDR,17+BLK2_ADDR
.word 25+BLK2_ADDR,30+BLK2_ADDR,41+BLK2_ADDR,43+BLK2_ADDR
.word 9+BLK2_ADDR,11+BLK2_ADDR,18+BLK2_ADDR,24+BLK2_ADDR
.word 31+BLK2_ADDR,40+BLK2_ADDR,44+BLK2_ADDR,53+BLK2_ADDR
.word 10+BLK2_ADDR,19+BLK2_ADDR,23+BLK2_ADDR,32+BLK2_ADDR
.word 39+BLK2_ADDR,45+BLK2_ADDR,52+BLK2_ADDR,+BLK2_ADDR
.word 20+BLK2_ADDR,22+BLK2_ADDR,33+BLK2_ADDR,38+BLK2_ADDR
.word 46+BLK2_ADDR,51+BLK2_ADDR,55+BLK2_ADDR,60+BLK2_ADDR
.word 21+BLK2_ADDR,34+BLK2_ADDR,37+BLK2_ADDR,47+BLK2_ADDR
.word 50+BLK2_ADDR,56+BLK2_ADDR,59+BLK2_ADDR,61+BLK2_ADDR
.word 35+BLK2_ADDR,36+BLK2_ADDR,48+BLK2_ADDR,49+BLK2_ADDR
.word 57+BLK2_ADDR,58+BLK2_ADDR,62+BLK2_ADDR,63+BLK2_ADDR
RDCHUFF:
.word 0002h,0023h,0033h,0043h,0053h,0063h
.word 00e4h,01e5h,03e6h,07e7h,0fe8h,1fe9h
DIFFSIZE:
.word 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4
LOWMASK:
.word 0000h,0001h,0003h,0007h,000fh,001fh,003fh,007fh
.word 00ffh,01ffh,03ffh,07ffh,0ffffh,1fffh,3fffh,7fffh
.word 0ffffh
RACHUFF:
.word 000a4h,0000h,0000h,0000h,0000h,0000h,0000h,0000h
.word 0000h,0000h,0000h,0000h,0000h,0000h,0000h,07f9bh
.word 00002h,000c4h,001c5h,003a6h,003b6h,007a7h,007b7h,00fa8h
.word 01f89h,01f99h,01fa9h,03f9ah,03faah,07f8bh,0ffebh,0fff5h
.word 00012h,001b5h,00f98h,01f79h,03f8ah,07f7bh,0ff6ch,0ff7ch
.word 0ff81h,0ffbeh,0ffc7h,0ffd0h,0ffd9h,0ffe2h,0ffech,0fff6h
.word 00043h,00797h,03f7ah,0ff5ch,0f196h,0ff9eh,0ffa6h,0ffaeh
.word 0ffb6h,0ffc8h,0ffd1h,0ffdah,0ffe3h,0ffedh,0fff7h,0fff9h
.word 000b4h,01f69h,0ff4ch,0ff8fh,0ff97h,0ff9fh,0ffafh,0ffafh
.word 0ffb7h,0ffc0h,0ffc9h,0ffd2h,0ffdbh,0ffe4h,0ffeeh,0fff8h
.word 001a5h,07f6bh,0ff89h,0ff90h,0f198h,0ffa0h,0ffa8h,0ffb0h
.word 0ff08h,0ffc1h,0ffcah,0ffd3h,0ffdch,0ffe5h,0ffefh,0fff9h
.word 00787h,0ff84h,0ff3ah,0f191h,0f199h,0ffa1h,0ffa9h,0ffb1h
.word 0ffb9h,0ffc2h,0ffcbh,0ffd4h,0ffddh,0ffe6h,0fff0h,0fffah
.word 00f38h,0ff35h,0ff5bh,0ff92h,0ff9ah,0ffa2h,0ffaah,0ff02h
.word 0ffbah,0ffc3h,0ffcch,0ffc1h,0ffdeh,0ffe7h,0fff1h,0fff0h
.word 03f6ah,0ff96h,0f11ch,0ff93h,0f19bh,0ffa3h,0ffabh,0ffb3h
.word 0ff0bh,0ffc4h,0ffcdh,0ffd6h,0ffdfh,0ffe8h,0fff2h,0fffch
.word 0ff12h,0fh17h,0f1d1h,0ff94h,0ff9ch,0ffa4h,0ffach,0ffb4h
.word 0ffbch,0ffc5h,0ffceh,0ffd7h,0ffe0h,offe9h,offf3h,0fffdh
.word 0ff83h,0ff95h,0ff8eh,0f195h,0f1afh,0ffa5h,0ffadh,0ffb5h
.word 0ffbdh,0ffc6h,0ffcfh,0ffd8h,0fffeh,10ffeah,0fff4h,0fffeh
HDCDECODE_TABLE:
.word 0020h,0020h,0020h,0020h,0031h,0031h,0032h,0032h
.word 0033h,0033h,0034h,0034h,0035h,0035h,0046h,0000h
.word 0057h,0057h,0057h,0057h,0057h,0057h,0057h,0057h
.word 0068h,0068h,0068h,0068h,0079h,0079h,008ah,009bh
.word 0000h,0000h,0000h,0000h,0000h,0000h,0000h,0000h
.word 0000h,0000h,0000h,0000h,0000h,0000h,0000h,0000h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -