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

📄 jw002.asm

📁 一款MP3 Player Firmware 的原代码,非常有参考价值
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	anl	a, #11100000b	cjne	a, #00100000b, exec_5c_cmd_3	;if we get here, the cmd is to display bytes 0 to 31	mov	a, @r0	add	a, #224exec_display_char:	lcall	lookup_char	lcall	cache_char	mov	cmd_len, #0	ret	;cmd 0x5C <0x60-0x7F>, display bytes 128 to 159exec_5c_cmd_3:	cjne	a, #01100000b, exec_5c_5c	;if we get here, the cmd is to display bytes 128 to 159	mov	a, @r0	add	a, #32	sjmp	exec_display_char	;cmd 0x5C 0x5C, display '\'exec_5c_5c:	mov	a, @r0	cjne	a, #0x5C, exec_5c_5f	sjmp	exec_display_char	;cmd 0x5C 0x5C, display byte 127exec_5c_5f:	cjne	a, #0x5F, exec_5c_5d	mov	a, #127	sjmp	exec_display_char	;cmd 0x5C 0x5D, begin ignoring input bytes (but not commands)exec_5c_5d:	cjne	a, #0x5D, exec_5c_5b	setb	ignore_input_mode	mov	cmd_len, #0	ret	;cmd 0x5C 0x5B, don't ignore input bytesexec_5c_5b:	cjne	a, #0x5B, exec_5c_40	clr	ignore_input_mode	mov	cmd_len, #0	ret	;cmd 0x5C 0x40 <font+32> <opcode>, clear display or show font summaryexec_5c_40:	cjne	a, #0x40, exec_5c_41	mov	a, cmd_len	cjne	a, #4, exec_5c_40_end	mov	r0, #cmd_buf+2	mov	a, @r0	acall	byte2font	jc	exec_5c_40_done	mov	font, a	mov	r0, #cmd_buf+3	mov	a, @r0exec_5c_40_30:	cjne	a, #0x30, exec_5c_40_31	lcall	init_display	sjmp	exec_5c_40_doneexec_5c_40_31:	cjne	a, #0x31, exec_5c_40_32	mov	r6, #0	mov	r0, #cmd_buf+4	mov	@r0, #msg_f0 & 255	inc	r0	mov	@r0, #msg_f0 >> 8	sjmp	exec_5c_40_font_previewexec_5c_40_32:	cjne	a, #0x32, exec_5c_40_done	mov	r6, #128	mov	r0, #cmd_buf+4	mov	@r0, #msg_f128 & 255	inc	r0	mov	@r0, #msg_f128 >> 8exec_5c_40_font_preview:		;draw font preview page	lcall	test_font	mov	a, font	add	a, #'0'	mov	r6, a	push	font	mov	font, #0	lcall	move_cursor_home	mov	dptr, #msg_font	lcall	lcd_pstr	mov	a, r6	lcall	lookup_char	lcall	cache_char	mov	x_pos, #0	mov	y_pos, #2	mov	r0, #cmd_buf+4	mov	dpl, @r0	inc	r0	mov	dph, @r0	lcall	lcd_pstr	mov	x_pos, #0	mov	y_pos, #3	lcall	lcd_pstr	pop	fontexec_5c_40_done:	lcall	move_cursor_home	mov	cmd_len, #0exec_5c_40_end:	ret	;cmd 0x5C 0x41 <mode>, set modes (wrap and vscroll)exec_5c_41:	cjne	a, #0x41, exec_5c_42	mov	a, cmd_len	cjne	a, #3, exec_5c_41_end	mov	r0, #cmd_buf+2	mov	a, @r0	anl	a, #11110000b	cjne	a, #0x30, exec_5c_41_done	mov	a, @r0	rrc	a	mov	wrap_mode, c	rrc	a	mov	vscroll_mode, cexec_5c_41_done:	mov	cmd_len, #0exec_5c_41_end:	ret	;cmd 0x5C 0x42 <column+32> <row+32>, set cursor positionexec_5c_42:	cjne	a, #0x42, exec_5c_43	mov	a, cmd_len	cjne	a, #4, exec_5c_42_end	mov	r0, #cmd_buf+2	mov	a, @r0	add	a, #224	mov	x_pos, a	mov	r0, #cmd_buf+3	mov	a, @r0	add	a, #224	mov	y_pos, aexec_5c_42_done:	mov	cmd_len, #0exec_5c_42_end:	ret	;cmd 0x5C 0x43 <font+32>, set fontexec_5c_43:	cjne	a, #0x43, exec_5c_44	mov	a, cmd_len	cjne	a, #3, exec_5c_43_end	mov	r0, #cmd_buf+2	mov	a, @r0	acall	byte2font	jc	exec_5c_43_done	mov	font, aexec_5c_43_done:	mov	cmd_len, #0exec_5c_43_end:	ret	;define a custom character	;cmd 0x5C 0x44 <char (2 bytes hex)> <font+32> <bitmap (8 bytes)>	;	;  example: replace "R" (R is ascii code 0x52) in font 0	;  0x5C 0x44 0x35 0x32 0x20 0x3E 0x39 0x39 0x39 0x3E 0x3A 0x39 0x39	;  as an ascii string: "\D52 >999>:99"	;  	; ****   00111110  0x3E	; **  *  00111001  0x39	; **  *  00111001  0x39	; **  *  00111001  0x39	; ****   00111110  0x3E	; ** *   00111010  0x3A	; **  *  00111001  0x39	; **  *  00111001  0x39exec_5c_44:	cjne	a, #0x44, exec_5c_45	mov	a, cmd_len	cjne	a, #13, exec_5c_44_end	mov	r0, #cmd_buf+2	mov	a, @r0	acall	asc2hex	jc	exec_5c_44_done	swap	a	mov	r1, a	mov	r0, #cmd_buf+3	mov	a, @r0	acall	asc2hex	jc	exec_5c_44_done	orl	a, r1	mov	r1, a			;r1 is the character to write	mov	r0, #cmd_buf+4	mov	a, @r0	acall	byte2font	jc	exec_5c_44_done	mov	r2, a			;r2 is the font number of change	mov	r0, #cmd_buf+5exec_5c_44_loop1:	mov	a, @r0			;make sure all bitmap bytes are legal	anl	a, #11100000b	cjne	a, #00100000b, exec_5c_44_done	inc	r0	cjne	r0, #cmd_buf+13, exec_5c_44_loop1	mov	a, r2	mov	b, #5	mul	ab			;compute font's memory position	add	a, #fonts_start_page	mov	r7, a	mov	a, r1	mov	b, #5	mul	ab			;compute offset within font	mov	dpl, a	mov	a, b	add	a, r7	mov	dph, a			;dptr points to character to update	mov	r3, #0			;r3 counts font x position (0 to 4)exec_5c_44_loop2:	mov	a, r3	acall	exec_5c_44_bitmask	mov	r4, a			;r4 holds bitmask for this x position	mov	r0, #cmd_buf+5	mov	r5, #0			;r5 will become 8 bit vertical patternexec_5c_44_loop3:	mov	a, @r0	anl	a, r4	setb	c	jnz	exec_5c_44_loop3b	clr	cexec_5c_44_loop3b:	mov	a, r5	rrc	a	mov	r5, a	inc	r0	cjne	r0, #cmd_buf+13, exec_5c_44_loop3	mov	a, r5	movx	@dptr, a		;write to the in-memory font	inc	dptr	inc	r3	cjne	r3, #5, exec_5c_44_loop2exec_5c_44_done:	mov	cmd_len, #0exec_5c_44_end:	retexec_5c_44_bitmask:	inc	a	movc	a, @a+pc	ret	.db	16, 8, 4, 2, 1exec_5c_45:	cjne	a, #0x45, exec_5c_46 	mov	a, #0xFF 	lcall	cout 	mov	a, #0xC3 	lcall	cout	mov	dptr, #mesg_version	lcall	pstr	mov	a, #'1'	lcall	cout	mov	cmd_len, #0	retexec_5c_46:	cjne	a, #0x46, exec_5c_47	mov	a, cmd_len	cjne	a, #3, exec_5c_46_end	mov	r0, #cmd_buf+2	mov	a, @r0	add	a, #224	jnc	exec_5c_46_doneexec_5c_46_left:	add	a, #224	jc	exec_5c_46_right	add	a, #32	lcall	move_cursor_left	sjmp	exec_5c_46_doneexec_5c_46_right:	add	a, #224	jc	exec_5c_46_down	add	a, #32	lcall	move_cursor_right	sjmp	exec_5c_46_doneexec_5c_46_down:	add	a, #240	jc	exec_5c_46_up	add	a, #16	lcall	move_cursor_down	sjmp	exec_5c_46_doneexec_5c_46_up:	add	a, #240	jc	exec_5c_46_up	add	a, #16	lcall	move_cursor_up	sjmp	exec_5c_46_doneexec_5c_46_done:	mov	cmd_len, #0exec_5c_46_end:	ret	;cmd 0x5C 0x47 <button+48> <config+32>, set button configexec_5c_47:	cjne	a, #0x47, exec_5c_48	mov	a, cmd_len	cjne	a, #4, exec_5c_47_end	mov	r0, #cmd_buf+2	mov	a, @r0	add	a, #256 - 48	add	a, #256 - 12	jc	exec_5c_46_done	add	a, #12 + pb_config	mov	r1, a	inc	r0	mov	a, @r0	add	a, #256 - 32	mov	@r1, aexec_5c_47_done:	mov	cmd_len, #0exec_5c_47_end:	ret	;cmd 0x5C 0x48 <button> <string, 12 bytes>	;button 48 - 59 = string for button down	;button 64 - 75 = string for button up	;button 80 - 91 = string for button repeatexec_5c_48:	cjne	a, #0x48, exec_5c_49	mov	a, cmd_len	add	a, #241	jnc	exec_5c_48_endexec_5c_48_ok:	mov	r0, #cmd_buf+2	mov	a, @r0	add	a, #256 - 48 + 0x10	lcall	event2addr	jc	exec_5c_48_done	mov	r0, #cmd_buf+14exec_5c_48_loop1:	mov	a, @r0	cjne	a, #' ', exec_5c_48_copy	clr	a	mov	@r0, a	dec	r0	cjne	r0, #cmd_buf+2, exec_5c_48_loop1exec_5c_48_copy:	mov	r0, #cmd_buf+3exec_5c_48_loop2:	mov	a, @r0	inc	r0	movx	@dptr, a	inc	dptr	cjne	r0, #cmd_buf+14, exec_5c_48_loop2	clr	a	movx	@dptr, aexec_5c_48_done:	mov	cmd_len, #0exec_5c_48_end:	ret	;cmd 0x5c 0x49 <param> 	;redraw all (param = '8') or a row ('0' <= param <= '7')	;       of the screen from the cache	;turn display updates on '9' or off ':'exec_5c_49:	cjne	a, #'I', exec_5c_4a	mov	a, cmd_len	cjne	a, #3, exec_5c_49_end	mov	a, cmd_buf+2	anl	a, #11110000b	cjne	a, #0x30, exec_5c_49_done	mov	a, cmd_buf+2	jnb	acc.3, exec_5c_49_partial	cjne	a, #'8', exec_5c_49_toggle	lcall	redraw	sjmp	exec_5c_49_doneexec_5c_49_toggle:	rrc	a	mov	update_mode, c	sjmp	exec_5c_49_doneexec_5c_49_partial:	anl	a, #00000111	mov	r7, a	lcall	redraw_rowexec_5c_49_done:	mov	cmd_len, #0exec_5c_49_end:	ret	;cmd 0x5c 0x4a <'0'|'1'|'2'> <'0'|'1'> write	;cmd 0x5c 0x4a <'4'|'5'|'6'> <'0'>     read	;set/read LED/bank_select stateexec_5c_4a:	cjne	a, #0x4a, exec_5c_4b	mov	a, cmd_len	cjne	a, #4, exec_5c_4a_end	mov	a, cmd_buf+3	rrc	a	cpl	c	mov	a, cmd_buf+2	jb	acc.2, exec_5c_4a_read	anl	a, #3	jnz	exec_5c_4a_notled	mov	led_pin, c	sjmp	exec_5c_4a_doneexec_5c_4a_notled:	dec	a	jnz	exec_5c_4a_notbank1	mov	bank_pin1, c	sjmp	exec_5c_4a_doneexec_5c_4a_notbank1:	dec	a	jnz	exec_5c_4a_done	mov	bank_pin2, c	sjmp	exec_5c_4a_doneexec_5c_4a_read:	mov	dptr, #mesg_io_read	lcall	pstr	mov	a, cmd_buf+2	anl	a, #11111011b	lcall	cout	anl	a, #00000011b	jnz	exec_5c_4a_notrled	setb	led_pin	mov	c, led_pin	sjmp	exec_5c_4a_read_doneexec_5c_4a_notrled:	dec	a	jnz	exec_5c_4a_notrbank1	setb	bank_pin1	mov	c, bank_pin1	sjmp	exec_5c_4a_read_doneexec_5c_4a_notrbank1:	dec	a	jnz	exec_5c_4a_done	setb	bank_pin2	mov	c, bank_pin2	sjmp	exec_5c_4a_read_doneexec_5c_4a_read_done:	mov	a, #'1'		; report as active low	jnc	exec_5c_4a_read_output	mov	a, #'0'exec_5c_4a_read_output:	lcall	coutexec_5c_4a_done:	mov	cmd_len, #0exec_5c_4a_end:	ret	;cmd 0x5c 'K'	;control horizontal scrolling display element	; 0x5c 'K' '0' <'0' - '7'> '0'     - set speed	; 0x5c 'K' '1' <row+32> <font+32> - set font for row	; 0x5c 'K' '2' <row+32> <'0'|'1'> - disable/enable row	; 0x5c 'K' '3' <row+32> <'0'|'1'> - enable/disable buffer fill for rowexec_5c_4b:	cjne	a, #'K', _exec_5c_4c	mov	a, cmd_len	cjne	a, #5, exec_5c_4a_end	mov	a, cmd_buf+2	cjne	a, #'0', exec_5c_4b_notspeed	mov	a, cmd_buf+3	anl	a, #11111000b	cjne	a, #0x30, _exec_5c_4b_done	mov	a, cmd_buf+3	anl	a, #00000111b	inc	a	rl	a	mov	hscroll_speed, a	mov	hscroll_t0_count, #0	sjmp	_exec_5c_4b_doneexec_5c_4b_notspeed:	cjne	a, #'1', exec_5c_4b_notfont	mov	a, cmd_buf+3	anl	a, #11111000b	cjne	a, #0x20, _exec_5c_4b_done	mov	a, cmd_buf+3			;get row	anl	a, #00000111b	add	a, #hscroll_font0	mov	r0, a	mov	a, cmd_buf+4			;get font	anl	a, #11100000b	cjne	a, #0x20, exec_5c_4b_done	mov	a, cmd_buf+4	anl	a, #00011111b	mov	@r0, a_exec_5c_4b_done:	sjmp	exec_5c_4b_done_exec_5c_4c:	sjmp	exec_5c_4cexec_5c_4b_notfont:	cjne	a, #'2', exec_5c_4b_notendis	mov	a, cmd_buf+3	anl	a, #11111000b	cjne	a, #0x20, exec_5c_4b_done	mov	a, cmd_buf+3			;get row	anl	a, #00000111b	mov	r0, a	add	a, #hscroll_end0	mov	r1, a	inc	r0				;convert index to mask	mov	a, #0	setb	cexec_5c_4b_font_loop:	rlc	a	djnz	r0, exec_5c_4b_font_loop	mov	r0, a	mov	a, cmd_buf+4			;get setting	anl	a, #11111110b	cjne	a, #0x30, exec_5c_4b_done	clr	hscroll_fill_en			;disable fill	mov	a, cmd_buf+4	cjne	a, #'1', exec_5c_4b_disable	mov	a, @r1	jz	exec_5c_4b_done			;ignore enable if buffer empty	mov	a, r0	orl	hscroll_en, a	sjmp	exec_5c_4b_doneexec_5c_4b_disable:	mov	a, r0	cpl	a	anl	hscroll_en, a	sjmp	exec_5c_4b_doneexec_5c_4b_notendis:	cjne	a, #'3', exec_5c_4b_notfill	mov	a, cmd_buf+3	anl	a, #11111000b	cjne	a, #0x20, exec_5c_4b_done	mov	a, cmd_buf+3			;get row	anl	a, #00000111b	mov	hscroll_fill_row, a	mov	a, cmd_buf+4	cjne	a, #'1', exec_5c_4b_endfill	setb	hscroll_fill_en	mov	a, hscroll_fill_row	add	a, #hscroll_end0	mov	r0, a	mov	@r0, #0	add	a, #(hscroll_pos0 - hscroll_end0)	mov	r0, a	mov	@r0, #0	sjmp	exec_5c_4b_doneexec_5c_4b_endfill:	clr	hscroll_fill_en	sjmp	exec_5c_4b_doneexec_5c_4b_notfill:exec_5c_4b_done:	mov	cmd_len, #0exec_5c_4b_end:	ret	;cmd 0x5c 0x4c <param> 	;clear a row ('0' <= param <= '7') of the displayexec_5c_4c:	cjne	a, #'L', exec_5c_4d	mov	a, cmd_len	cjne	a, #3, exec_5c_4c_end	mov	a, cmd_buf+2	anl	a, #11111000b	cjne	a, #0x20, exec_5c_4c_done	mov	a, cmd_buf+2	anl	a, #00000111b	lcall	clear_rowexec_5c_4c_done:	mov	cmd_len, #0exec_5c_4c_end:	retexec_5c_4d:	;available for future (legacy code will ignore), 2 data bytesexec_5c_53:	cjne	a, #0x53, exec_5c_54	mov	a, cmd_len	cjne	a, #4, exec_5c_53_end	mov	cmd_len, #0exec_5c_53_end:	ret	;available for future (legacy code will ignore), 2 data bytesexec_5c_54:	cjne	a, #0x54, exec_5c_55	mov	a, cmd_len	cjne	a, #4, exec_5c_54_end	mov	cmd_len, #0exec_5c_54_end:	ret	;available for future (legacy code will ignore), 2 data bytesexec_5c_55:	cjne	a, #0x55, exec_5c_56	mov	a, cmd_len	cjne	a, #4, exec_5c_55_end	mov	cmd_len, #0exec_5c_55_end:	ret	;available for future (legacy code will ignore), 2 data bytesexec_5c_56:	cjne	a, #0x56, exec_5c_57	mov	a, cmd_len	cjne	a, #4, exec_5c_56_end	mov	cmd_len, #0exec_5c_56_end:	ret	;available for future (legacy code will ignore), 2 data bytesexec_5c_57:	cjne	a, #0x57, exec_5c_58	mov	a, cmd_len	cjne	a, #4, exec_5c_57_end	mov	cmd_len, #0exec_5c_57_end:	ret	;available for future (legacy code will ignore), 8 data bytesexec_5c_58:	cjne	a, #0x58, exec_5c_59	mov	a, cmd_len	cjne	a, #10, exec_5c_58_end	mov	cmd_len, #0exec_5c_58_end:	ret	;available for future (legacy code will ignore), 8 data bytesexec_5c_59:	cjne	a, #0x59, exec_5c_5a	mov	a, cmd_len	cjne	a, #10, exec_5c_59_end	mov	cmd_len, #0exec_5c_59_end:	ret	;available for future (legacy code will ignore), 8 data bytesexec_5c_5a:	cjne	a, #0x5A, exec_5c_unknown	mov	a, cmd_len	cjne	a, #10, exec_5c_5a_end	mov	cmd_len, #0exec_5c_5a_end:	retexec_5c_unknown:	lcall	phex	mov	a, #'*'	lcall	cout	mov	cmd_len, #0	ret;***********************************************************************;**                                                                   **;**                           Misc Functions                          **;**                                                                   **;***********************************************************************	;convert recv'd byte in Acc to a font #  (by subtracting 32)	;C=0 if legal, C=1 if illegalbyte2font:	add	a, #224	jnc	b2f_nope	add	a, #240	jc	b2f_nope	add	a, #16

⌨️ 快捷键说明

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