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

📄 memedit.asm

📁 A MP3 Player Source Code, Enjoy it!
💻 ASM
📖 第 1 页 / 共 2 页
字号:
; 8051 memory editor; This code is an original work of authorship by Paul Stoffregen; and has been placed in the PUBLIC DOMAIN.  There is no copyright; and no license agreement.  You may use this code in any manner; you wish without a royalty or other conditions, even embedded in; your own for-profit product.;; This code is distributed in the hope that it will be useful,; but WITHOUT ANY WARRANTY; without even the implied warranty; of merchantability or fitness for a particular purpose..equ	locat, 0xD800		;location for these commands (usually 1000).equ    vtedit_key, 'F'           ;memory editor;---------------------------------------------------------;;                                                         ;;                  External Memory Editor                 ;;                                                         ;;---------------------------------------------------------;;register usage:; R4,    Flags:;         bit0: 0=display CODE memory, 1=display DATA memory;         bit1: 0=editing disabled, 1=editing enabled;         bit2: 0=editing in hex, 1=editing in ascii;         bit3: 0=normal, 1=in middle of hex entry (value in r5); R6/R7, current memory location;.org	locat.db	0xA5,0xE5,0xE0,0xA5	;signiture.db	254,vtedit_key,0,0	;id (254=user installed command).db	0,0,0,0			;prompt code vector.dB	0,0,0,0			;reserved.db	0,0,0,0			;reserved.db	0,0,0,0			;reserved.db	0,0,0,0			;user defined.db	255,255,255,255		;length and checksum (255=unused).db	"Memory Editor (VT100)",0.org	locat+0x40            ;executable code begins here	mov	r4, #0	acall	redrawmain:	mov	a, r4	clr	acc.3	mov	r4, amain2:	acall   cin_filter	acall	input_ck_2ndcmd1:	cjne	a, #27, cmd2		;quit	ajmp	quitcmd2:	cjne	a, #11, cmd3		;up	ajmp	cmd_upcmd3:	cjne	a, #10, cmd4		;down	ajmp	cmd_downcmd4:	cjne	a, #8, cmd5		;left	ajmp	cmd_leftcmd5:	cjne	a, #21, cmd6		;right	ajmp	cmd_rightcmd6:	cjne	a, #12, cmd7		;redraw	acall	redraw	ajmp	maincmd7:	cjne	a, #17, cmd8		;quit	ajmp	quitcmd8:	cjne	a, #3, cmd9		;code memory	mov	a, r4	anl	a, #11111110b	mov	r4, a	acall	cursor_home	mov	dptr, #str_code	acall	pstr	acall	redraw_data	ajmp	maincmd9:	cjne	a, #4, cmd10		;data memory	mov	a, r4	orl	a, #00000001b	mov	r4, a	acall	cursor_home	mov	dptr, #str_data	acall	pstr	acall	redraw_data	ajmp	maincmd10:	cjne	a, #7, cmd11		;goto memory loc	ajmp	cmd_gotocmd11:	cjne	a, #5, cmd12		;toggle editing	ajmp	cmd_editcmd12:	cjne	a, #6, cmd13		;fill memory	ajmp	cmd_fillcmd13:	cjne	a, #1, cmd14		;edit in ascii	mov	a, r4	jnb	acc.1, main	setb	acc.2	mov	r4, a	acall	erase_commands	acall	print_commands	acall	redraw_cursor	ajmp	maincmd14:	cjne	a, #24, cmd15		;edit in hex        mov     a, r4        jnb     acc.1, main        clr     acc.2        mov     r4, a        acall   erase_commands        acall   print_commands        acall   redraw_cursor        ajmp    maincmd15:	cjne    a, #25, cmd16           ;page up	ajmp	cmd_pgupcmd16:	cjne    a, #26, cmd17           ;page down	ajmp	cmd_pgdowncmd17:cmd_data:	;the input character wasn't any particular command, so		;maybe it's some input data being typed for edit mode	mov	b, a			;keep a copy of user data in b	mov	a, r4	jb	acc.1, cmd_data2cmd_abort:	ajmp	main			;ignore if not in edit modecmd_data2:	jnb	acc.2, input_hexinput_ascii:	mov	a, b	acall	ascii_only	cjne	a, b, cmd_abort		;check that input is an ascii char	mov	dph, r7	mov	dpl, r6	;lcall	smart_wr		;write the char to memory	movx	@dptr, a	ajmp	cmd_rightinput_hex:	mov	a, b	acall	upper	acall	asc2hex	jc	cmd_abort		;ignore if not hex	mov	r0, a			;keep hex value of input in r0        mov     dph, r7			;load dptr with address        mov     dpl, r6	mov	a, r4	jb	acc.3, input_hex_2ndinput_hex_1st:	mov	a, r0	mov	r5, a	mov	a, r4	setb	acc.3		;remember that we're waiting for 2nd char	mov	r4, a	acall	redraw_cursor	ajmp	main2input_hex_2nd:	mov	a, r5			;get data from memory	swap	a			;shift nibbles	anl	a, #11110000b		;just in case	add	a, r0			;add in this input to lower part	;lcall	smart_wr		;write back to memory	movx	@dptr, a	mov	a, r4	clr	acc.3	mov	r4, a	ajmp	cmd_rightinput_ck_2nd:	;the main input routine will always call here when a new	;byte is entered... so we can do something special if we	;were waiting for the second character and it is not a	;legal hex character	push	acc	mov	a, r4	jb	acc.1, inck2d	;if editing is disabled, don't do anything	clr	acc.3inck2b:	mov	r4, ainck2c:	pop	acc	retinck2d:	jnb	acc.3, inck2b	;if we get here, we were actually waiting for the 2nd char	pop	acc	push	acc	acall	upper	acall	asc2hex	jnc	inck2c		;proceed normally if it is valid	;if we get here, we did not get a hex legal char	pop	acc	push	acc	cjne	a, #esc_char, inck2e        mov     a, r4        clr     acc.3        mov     r4, a        acall   redraw_cursor	pop	acc	pop	acc		;don't return and do the quit cmd	pop	acc		;just quit this entry and wait for next cmd	ajmp	maininck2e: mov     dph, r7                 ;load dptr with address        mov     dpl, r6	mov	a, r5        ;lcall   smart_wr                ;write to memory	movx	@dptr, a	mov	a, r4	clr	acc.3	mov	r4, a	acall	redraw_cursor	sjmp	inck2c; R4,    Flags:;         bit0: 0=display CODE memory, 1=display DATA memory;         bit1: 0=editing disabled, 1=editing enabled;         bit2: 0=editing in hex, 1=editing in ascii;         bit3: 0=normal, 1=in middle of hex entry (value in r5)cmd_fill:	mov	a, r4	anl	a, #00000010b	jnz	cmd_fill_ok	ajmp	main			;don't allow if not in editing modecmd_fill_ok:	acall	erase_commands        mov     a, r4        push    acc	mov	dptr, #fill_prompt1	acall	pstr	acall	ghex16	jc	cmd_fill_abort	jb	psw.5, cmd_fill_abort	mov	r0, dpl	mov	r1, dph	mov	dptr, #fill_prompt2	acall	pstr	acall	ghex16	jc	cmd_fill_abort	jb	psw.5, cmd_fill_abort	mov	r4, dpl	mov	r5, dph	mov	dptr, #fill_prompt3	acall	pstr	acall	ghex	jc	cmd_fill_abort	jb	psw.5, cmd_fill_abort	mov	r2, a	mov	a, r4	mov	r6, a	mov	a, r5	mov	r7, a	pop	acc	mov	r4, a	mov	dpl, r0	mov	dph, r1	;now r4 is restored to its normal value, dptr holds the	;first location to fill, and r6/r7 holds the last location to	;fill, and r2 has the fill value.cmd_fill_loop:	mov	a, r2	;lcall	smart_wr	movx	@dptr, a	mov	a, r6	cjne	a, dpl, cmd_fill_next	mov	a, r7	cjne	a, dph, cmd_fill_next	;when we get here, we're done!	acall	erase_commands	acall	print_commands	acall	redraw_data	ajmp	maincmd_fill_next:	inc	dptr	sjmp	cmd_fill_loopcmd_fill_abort:        pop     acc        mov     r4, a        acall   erase_commands        acall   print_commands	acall	redraw_cursor	ajmp	mainfill_prompt1:        .db     "Fill Memory; First: ",0fill_prompt2:        .db     "  Last: ",0fill_prompt3:        .db     " with: ",0 cmd_edit:	acall	erase_commands	mov	a, r4	xrl	a, #00000010b	mov	r4, a        acall   print_commands        acall   redraw_cursor        ajmp    maincmd_goto:	acall	erase_commands	mov	dptr, #goto_prompt	acall	pstr	mov	a, r4	push	acc	acall	ghex16	pop	acc	mov	r4, a	jc	cmdgt_abort	jb	psw.5, cmdgt_abort        mov     r6, dpl        mov     r7, dph        acall   cursor_home        mov     a, #20        acall   cursor_down	acall	print_commands	acall	redraw_data	ajmp	maincmdgt_abort:        acall   cursor_home        mov     a, #20        acall   cursor_down	acall	print_commands	acall	redraw_cursor	ajmp	maingoto_prompt:	.db	"Memory Location: ",0cmd_up:	acall	blank_it        mov     a, r6        clr     c        subb    a, #16        mov     r6, a        mov     a, r7        subb    a, #0        mov     r7, a	mov	a, r6	cpl	a	anl	a, #11110000b	jz	cmd_up_scroll        mov     a, #1        acall   cursor_up        acall   invert_it        ajmp    maincmd_up_scroll:	acall	redraw_data	ajmp	maincmd_pgup:	dec	r7	acall	redraw_data	ajmp	maincmd_pgdown:	inc	r7	acall	redraw_data	ajmp	maincmd_down:	acall	blank_it        mov     a, r6        add     a, #16        mov     r6, a        mov     a, r7        addc    a, #0        mov     r7, a	mov	a, r6	anl	a, #11110000b	jz	cmd_down_scroll	mov	a, #1	acall	cursor_down	acall	invert_it	ajmp	maincmd_down_scroll:	acall	redraw_data	ajmp	maincmd_left:	acall	blank_it	mov	a, #3	acall	cursor_left	mov	a, r6	clr	c	subb	a, #1	mov	r6, a	mov	a, r7	subb	a, #0	mov	r7, a	mov	a, r6	orl	a, #11110000b	cpl	a	jz	cmdlf2	acall	invert_it	ajmp	maincmdlf2:	mov	a, r6	cpl	a	anl	a, #11110000b	jz	cmd_left_scroll	mov	a, #48	acall	cursor_right	mov	a, #1	acall	cursor_up	acall	invert_it	ajmp	maincmd_left_scroll:	acall	redraw_data	ajmp	maincmd_right:	acall	blank_it	mov	a, #3	acall	cursor_right	mov	dpl, r6	mov	dph, r7	inc	dptr	mov	r6, dpl	mov	r7, dph	mov	a, r6	anl	a, #00001111b	jz	cmdrt2	acall	invert_it	ajmp	maincmdrt2:	mov	a, r6	anl	a, #11110000b	jz	cmd_right_scroll	mov	a, #48	acall	cursor_left	mov	a, #1	acall	cursor_down	acall	invert_it	ajmp	maincmd_right_scroll:	acall	redraw_data	ajmp	main;register usage:; R4,    Flags:;         bit0: 0=display CODE memory, 1=display DATA memory;         bit1: 0=editing disabled, 1=editing enabled;         bit2: 0=editing in hex, 1=editing in ascii;	  bit3: 0=normal, 1=in middle of hex entry (value in r5); R6/R7, current memory location;redraw:        mov     dptr, #str_cl		;clear screen        acall   pstr	acall	print_title_line	acall	newline	acall	print_addr_line	acall	newline	acall	print_dash_line        acall   newline	mov	a, #16	acall	cursor_down        acall   print_dash_line        acall   newline        acall   print_commandsredraw_data:	acall	cursor_home	mov	a, #2	acall	cursor_down	;compute first byte address to display on the screen	mov	dpl, #0	mov	dph, r7	;now display the data	mov	r0, #16rd2:	acall	newline	acall	phex16	mov	a, #':'	acall	cout	mov	r2, dpl	mov	r3, dphrd3:	acall	space	acall	read_dptr	acall	phex	inc	dptr	mov	a, dpl	anl	a, #00001111b	jnz	rd3	mov	dpl, r2	mov	dph, r3	acall	space	acall	space	acall	spacerd4:	acall	read_dptr	acall	ascii_only	acall	cout	inc	dptr	mov	a, dpl	anl	a, #00001111b	jnz	rd4	djnz	r0, rd2redraw_cursor:	acall	cursor_home	mov	a, r6	swap	a	anl	a, #00001111b	add	a, #3	acall	cursor_down	;make the ascii character inverse	mov	a, r6	anl	a, #00001111b	add	a, #56	acall	cursor_right	acall	inverse_on	acall	read_r6r7	acall	ascii_only	acall	cout	acall	inverse_off	;now make the hex value inverse	mov	a, r6	anl	a, #00001111b	rl	a	cpl	a	add	a, #52	acall	cursor_left	acall	inverse_on	acall	read_r6r7	acall	phex	ajmp	inverse_offblank_it:	mov	a, r6	anl	a, #00001111b	rl	a	cpl	a	add	a, #49	acall	cursor_right	acall	read_r6r7	acall	ascii_only	acall	cout	mov	a, r6	anl	a, #00001111b	rl	a	cpl	a	add	a, #52	acall	cursor_left	acall	read_r6r7	ajmp	phexinvert_it:        mov     a, r6        anl     a, #00001111b        rl      a        cpl     a        add     a, #49        acall   cursor_right        acall   read_r6r7        acall   ascii_only	acall	inverse_on        acall   cout	acall	inverse_off        mov     a, r6        anl     a, #00001111b        rl      a        cpl     a        add     a, #52        acall   cursor_left        acall   read_r6r7	acall	inverse_on        acall   phex	ajmp	inverse_off

⌨️ 快捷键说明

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