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

📄 ctk-conio_arch-asm.cs

📁 Contiki是一个开源
💻 CS
📖 第 1 页 / 共 2 页
字号:
	ld	b, a	call	_cputsn_arch_asm	jp	_draw_widget_ret.endif		;; BC = ypos, xpos, HL = w, E = w->w, Stack; null_draw_widget_textentry:		; 0xc5dc sp=0xf97e ;widget=e3be	;; e3cd;textentry.xpos<-b224	;; stable variables;	;;   w->w, w->h, w->widget.textentry.{state,ypos,xpos), xscroll	push	ix	ld	ix, #-6	add	ix, sp	ld	sp, ix	push	bc		; yx		ld	0(ix), e	; w->w	ld	bc, #_off_widget_h	call	_get_offset	ld	1(ix), e	; w->h	ld	bc, #_off_widget_textentry_state	call	_get_offset	ld	a, e	sub	a, #_CTK_TEXTENTRY_EDIT	ld	2(ix), a	; w->widget.textentry.state	ld	bc, #_off_widget_textentry_ypos	call	_get_offset	ld	3(ix), e	; w->widget.textentry.ypos	ld	bc, #_off_widget_textentry_xpos	call	_get_offset	ld	4(ix), e	; w->widget.textentry.xpos		;;     xscroll = 0;	;;     if(w->widget.textentry.xpos >= w->w - 1) {	;;       xscroll = w->widget.textentry.xpos - w->w + 1;	;;     }	ld	a, e	inc	a	sub	0(ix)	; xscroll = w->widget.textentry.xpos - w->w + 1	jr	nc, _draw_widget_textentry_next	xor	a		;  if (xscroll < 0) xscroll = 0_draw_widget_textentry_next:	; A = xscroll, Stack; yx - IX	ld	5(ix), a	; xscroll	ld	bc, #_off_widget_textentry_text	call	_get_offset	; DE = text	ld	l, #0		; loop counter	pop	bc	;; L = counter, IX = sp, DE = text, BC = yx, Stack; null_draw_widget_textentry_loop1:	; 0xc629	;;       gotoxy_arch(xpos, ypos);	push	hl		; Stack; text	ld	h, b	ld	l, c	call	_gotoxy_arch_asm	;;       if(w->widget.textentry.state == CTK_TEXTENTRY_EDIT &&	;; 	    w->widget.textentry.ypos == j)	pop	hl		; Stack; null, BC = yx, DE = text, L = count	push	bc		; Stack; yx	ld	a, l	cp	a, 1(ix)	; j - w->h	jp	nc, _draw_widget_textentry_ret	ld	a, 2(ix)	; state	or	a		; state == EDIT?	jr	nz, _draw_widget_textentry_else	ld	a, 3(ix)	; ypos	cp	a, l		; ypos == j?	jr	nz, _draw_widget_textentry_else	;; 	revers_arch(0);	push	hl		; Stack count yx	push	de		; Stack text count yx	xor	a	call	_revers_arch_asm	;; 	cputc_arch('>');	ld	a, #0x3e	; '>'	call	_cputc_arch_asm		pop	de		; Stack count yx	push	de		; Stack text count yx	ld	a, 5(ix)	; xscroll	add	a, e	ld	e, a	ld	a, d	adc	a, #0	ld	d, a		; DE = text[xscroll]	ld	h, #0		; loop counter	;; 	for(i = 0; i < w->w; ++i)_draw_widget_textentry_loop2:	; 0xc39d Stack text count yx	;; H = count2, DE = text[xscroll + i]	ld	a, h	cp	a, 0(ix)	; i - w->w	jr	nc, _draw_widget_textentry_loop2exit	;; 	  revers_arch(i == w->widget.textentry.xpos - xscroll);	push	hl		; Stack count2 text count1 yx	ld	a, 4(ix)	; w->w.widget.textentry.xpos	sub	5(ix)		; xscroll	sub	h		; textentry.xpos - xscroll- i	ld	a, #00		; flags don't change	jr	nz, _draw_widget_textentry_revers	ld	a, #01_draw_widget_textentry_revers:	call	_revers_arch_asm	;;  DE = text, Stack; count2 text count1 yx	;; 	  	  cputc((c == 0) ? CH_SPACE : c);	ld	a, (de)		; ch	or	a	jr	nz, _draw_widget_textentry_nospace	ld	a, #CH_SPACE_draw_widget_textentry_nospace:	push	de	call	_cputc_arch_asm	pop	de	pop	hl		; Stack text count1 yx, H = count2	inc	h	inc	de	jr	_draw_widget_textentry_loop2_draw_widget_textentry_loop2exit:	; Stack text count yx	xor	a	call	_revers_arch_asm	ld	a, #0x3c	; '<'	call	_cputc_arch_asm	jr	_draw_widget_textentry_endif_draw_widget_textentry_else: ; 0xc68a DE = text, L = count1, Stack yx	;; 	cputc_arch(CH_VERTLINE);	ld	a, #CH_VERTLINE	push	hl	push	de	call	_cputc_arch_asm	pop	de	;; 	cputsn_arch(text, w->w);	ld	b, 0(ix)	; w->w	push	de	call	_cputsn_arch_asm	pop	de		; Stack count1 yx	;; 	clearto_arch(xpos + w->w + 1);	pop	hl	pop	bc	push	bc	push	hl	push	de		; Stack text count yx	ld	a, 0(ix)	; w->w	add	a, c	inc	a		; xpos + w->w + 1	call	_clearto_arch_asm	;; 	cputc_arch(CH_VERTLINE);	ld	a, #CH_VERTLINE	call	_cputc_arch_asm_draw_widget_textentry_endif:	; Stack text count yx	;; text += w->w	pop	de	ld	a, e	add	a, 0(ix)	ld	e, a	ld	a, d	adc	a, #0	ld	d, a	pop	hl	;;	i++	inc	l	pop	bc	;;       ++ypos;	inc	b	jp	_draw_widget_textentry_loop1_draw_widget_textentry_ret:	pop	bc	ld	hl, #6	add	hl, sp	ld	sp, hl	pop	ix	jp	_draw_widget_ret	.if CTK_CONF_ICONS	;; BC = ypos, xpos, HL = w, E = w->w, Stack; null_draw_widget_icon:	push	bc		; Stack; yx	ld	bc, #_off_widget_icon_title	call	_get_offset	push	de		; Stack; title yx	ld	bc, #_off_widget_icon_textmap	call	_get_offset	pop	hl		; HL = title, DE = textmap	pop	bc		; BC = yx	;; BC = yx, DE = textmap, HL = title	push	hl		; Stack; title	ld	h, b	ld	l, c		; HL = yx	ld	a, e	or	d	jr	z, _draw_widget_icon_title		;; 	push	hl	;; 	call	_wherex_arch	;; 	ld	c, l	;; 	call	_wherey_arch	;; 	ld	b, l	;; 	pop	hl	ld	a, #3		; loop counter_draw_widget_icon_loop:		; HL = yx, DE = textmap, Stack; title	call	_gotoxy_arch_asm		push	af		; Stack; loop title	push	hl		; DE = textmap, Stack; yx loop title	ld	b, #3	call	_cputsn_arch_asm	; DE = DE + 3		pop	hl	pop	af		; HL = yx, A = count, Stack; title		inc	h		; y++	dec	a	jr	nz, _draw_widget_icon_loop	;; Stack; title, HL = yx_draw_widget_icon_title:	pop	de		; Stack; null, HL = yx, DE = title	push	de		; Stack; title, HL = yx, DE = title	ld	b, h	ld	c, l		; BC = yx	ex	de, hl		; BC = yx, HL = title	ld	d, #0_draw_widget_icon_title_strlen:	ld	a, (hl)	or	a	jr	z, _draw_widget_icon_title_setpos	inc	hl	inc	d	jr	_draw_widget_icon_title_strlen	;; D = len, BC = yx, Stack; title_draw_widget_icon_title_setpos:	ld	h, d		; H = len	ld	a, d	add	a, c		; x + len	cp	a, #SCREEN_WIDTH ;  x + len - SCREEN_WIDTH	jr	c, _draw_widget_icon_title_show	ld	a, #SCREEN_WIDTH	sub	h	ld	c, a	;; B = y, C = x; H = len, Stack; title_draw_widget_icon_title_show:	ld	a, h		; A = len	ld	h, b	ld	l, c	call	_gotoxy_arch_asm	pop	de		; DE = title	ld	b, a		; B = len	call	_cputsn_arch_asm	jp	_draw_widget_ret.endif	.if CTK_CONF_MENUS	;; ---------------------------------	;; static void draw_menu(struct ctk_menu *m, struct ctk_menu *open)	;; in; HL = menu, BC = open	;; AFBCDEHL____	;; return void	;; ---------------------------------_draw_menu_asm:		;;   x = wherex_arch();	push	hl	call	_wherex_arch	; A = x	pop	hl	push	af	;;  cputs_arch(m->title);	push	bc	ld	bc, #_off_menu_title	call	_get_offset	; DE = m->title	push	hl		; Stack; menu open x	call	_cputs_arch_asm	;;   cputc_arch(CH_SPACE);	ld	a, #CH_SPACE	call	_cputc_arch_asm	pop	hl		; menu	pop	bc		; open, Stack; x	ld	a, h	sub	b	jp	nz, _draw_menu_ret2	ld	a, l	sub	c	jp	nz, _draw_menu_ret2	;;  x2 = wherex_arch();	;; 0xc473	push	hl	call	_wherex_arch	; A = x2	ld	c, l		; C = x2	pop	hl		; Stack; x	;; HL = menu	push	bc	ld	bc, #_off_menu_active	call	_get_offset	pop	bc		; E = m->active	ld	d, #0		; D = y	pop	af		; A = x, Stack; null	ld	b, a	add	a, #CTK_CONF_MENUWIDTH	sub	#SCREEN_WIDTH	jr	c, _draw_menu_loop1	jr	z, _draw_menu_loop1	ld	a, #SCREEN_WIDTH	sub	#CTK_CONF_MENUWIDTH	ld	b, a	;; B = x, C = x2, D = y, E = m->active, HL = menu_draw_menu_loop1:	;;	if (y == m->nitems) _draw_menu_ret	ld	a, d	push	de	push	hl	push	bc	ld	bc, #_off_menu_nitems	call	_get_offset	cp	e	pop	bc	pop	hl	jr	z, _draw_menu_ret ; leave 2byte to pop while return	pop	de	;;       if (y == m->active) revers_arch(0);	cp	e	jr	nz, _draw_menu_next1	xor	a	push	hl	call	_revers_arch_asm	pop	hl	;; B = x, C = x2, D = y, HL = menu_draw_menu_next1:		; c4ae	;;       gotoxy_arch(x, y + 1);	push	hl	ld	h, d	ld	l, b	inc	h	call	_gotoxy_arch_asm	pop	hl		; HL = menu, Stack; null	;;       if(m->items[y].title[0] == '-')	push	de	push	hl		; e7ca	push	bc		; Stack; x2x menu y		ld	bc, #_off_menu_items	ld	a, (bc)	add	a, l	ld	l, a	ld	a, h	adc	#0	ld	h, a		; HL = m->items[0]	ld	bc, #_size_menuitem	ld	a, (bc)	ld	c, a	ld	b, #0		; BC = sizeof(struct menuitem)		ld	a, d		; A = y_draw_menu_loop2:	or	a	jr	z, _draw_menu_next2	add	hl, bc	dec	a	jr	_draw_menu_loop2_draw_menu_next2:	ld	bc, #_off_menuitem_title	call	_get_offset	ld	a, (de)	cp	a, #0x2d	; '-'	jr	nz, _draw_menu_else	;; 	chline_arch(CTK_CONF_MENUWIDTH);	ld	b, #CTK_CONF_MENUWIDTH	call	_chline_arch_asm	jr	_draw_menu_next3_draw_menu_else:	;; 	cputs_arch(m->items[y].title);	call	_cputs_arch_asm_draw_menu_next3:	;;       clearto_arch(x + CTK_CONF_MENUWIDTH);	pop	bc		; B = x, C = x2, Stack; menu y	push	bc	ld	a, b	add	a, #CTK_CONF_MENUWIDTH	call	_clearto_arch_asm	;;       revers_arch(1);	ld	a, #1	call	_revers_arch_asm	pop	bc	pop	hl	pop	de	inc	d	jr	_draw_menu_loop1_draw_menu_ret:			; C = x2	ld	h, #0	ld	l, c	call	_gotoxy_arch_asm_draw_menu_ret2:	pop	af	ret	_ctk_draw_menus:	;; ---------------------------------	;; void ctk_draw_menus(struct ctk_menus *menus); 	;; Stack; retl reth menusl menush	;; AFBCDEHL____	;; return void	;; ---------------------------------	;;   clip_arch(0, SCREEN_HEIGHT);	ld	h, #SCREEN_HEIGHT	ld	l, #0	call	_clip_arch_asm	;;   gotoxy_arch(0, 0);	ld	h, #0	call	_gotoxy_arch_asm	;;   revers_arch(1);	ld	a, #1	call	_revers_arch_asm	ld	hl, #2	add	hl, sp	ld	e, (hl)	inc	hl	ld	d, (hl)	ld	h, d	ld	l, e		; HL = menus	ld	bc, #_off_menus_desktopmenu	call	_get_offset		push	de		; Stack; menus->desktopmenu	ld	bc, #_off_menus_open	call	_get_offset	push	de		; Stack; menus->open menus->desktopmenu	ld	bc, #_off_menus_menus	call	_get_offset	ld	h, d	ld	l, e		; HL = menu_ctk_draw_menus_loop1:		ld	bc, #_off_menu_next	call	_get_offset	;; if (menu == NULL) _ctk_draw_menus_next1	ld	a, d	or	e	jr	z, _ctk_draw_menus_next1	;;     draw_menu_asm(m, menus->open);	ld	h, d	ld	l, e		; HL = menu->next	pop	bc	push	bc		; Stack; menus->open menus->desktopmenu	push	hl		; Stack; menu menus->open menus->desktopmenu	call	_draw_menu_asm	pop	hl		; Stack; menus->open menus->desktopmenu	jr	_ctk_draw_menus_loop1_ctk_draw_menus_next1:	pop	de		; menus->open	pop	hl		; menus->desktopmenu	push	de		; Stack; menus->open	;; clearto_arch(SCREEN_WIDTH - strlen(menus->desktopmenu->title) - 1);	ld	bc, #_off_menu_title	call	_get_offset	ld	b ,#0_ctk_draw_menus_loop2:	ld	a, (de)	or	a	jr	z, _ctk_draw_menus_next2	inc	b	inc	de	jr	_ctk_draw_menus_loop2_ctk_draw_menus_next2:	ld	a, #SCREEN_WIDTH	sub	b	; strlen(menus->desktopmenu->title)	dec	a	; SCREEN_WIDTH - strlen(menus->desktopmenu->title) - 1	push	hl	call	_clearto_arch_asm	pop	hl		; desktopmenu	pop	bc		; open, Stack; null	call	_draw_menu_asm	xor	a	call	_revers_arch_asm	ret.endif	;; ---------------------------------	;; unsigned char ctk_draw_width(void); 	;; Stack; retl reth	;; _______L____	;; return width	;; ---------------------------------_ctk_draw_width:	ld	l, #SCREEN_WIDTH	ret	;; ---------------------------------	;; unsigned char ctk_draw_height(void); 	;; Stack; retl reth	;; _______L____	;; return width	;; ---------------------------------_ctk_draw_height:	ld	l, #SCREEN_HEIGHT	ret		;; ---------------------------------	;; internal functions	;; ---------------------------------		;; ---------------------------------	;; static void clearbox_arch_asm(unsigned char x, y, w, h)	;; Stack; retl reth	;; AFBCDEHL____	;; return void	;; ---------------------------------	;; DE = yx, B = h, C = w_clearbox_arch_asm:	ld	a, e	add	a, c	ld	c, a		; to_x = x + w	ld	h, d	ld	l, e_clearbox_arch_loop::	call	_gotoxy_arch_asm	; (x, y)	push	hl	push	bc		; B = h, HL = yx	ld	a, c	call	_clearto_arch_asm	pop	bc	pop	hl	inc	h		; y++	djnz	_clearbox_arch_loop	ret	;; ---------------------------------	;; void drawbox_asm(unsigned char x, y, w, h)	;; Stack; retl reth	;; B = h, C = w, D = y, E = x	;; AF__________	;; return void	;; ---------------------------------_drawbox_asm:	push	bc	push	de	push	hl		ld	h, d	ld	l, e	inc	h	call	_gotoxy_arch_asm	; (x, y + 1)	dec	h	push	hl	push	bc		; Stack; hw, yx, B = h	call	_cvline_arch_asm	ld	a, #CH_LLCORNER	call	_cputc_arch_asm	pop	bc	push	bc		; Stack; hw yx	ld	b, c		; w	call	_chline_arch_asm	ld	a, #CH_LRCORNER	call	_cputc_arch_asm	pop	bc	pop	hl	call	_gotoxy_arch_asm	; (x, y)	push	hl	push	bc		; Stack; hw yx	ld	a, #CH_ULCORNER	call	_cputc_arch_asm	pop	bc	push	bc		; Stack; hw yx	ld	b, c		; B = w	call	_chline_arch_asm	ld	a, #CH_URCORNER	call	_cputc_arch_asm	pop	bc		; B = h	pop	hl	ld	a, l	inc	a	add	a, c	ld	l, a		; L = x + 1 + w	inc	h		; H = y + 1	call	_gotoxy_arch_asm	call	_cvline_arch_asm		pop	hl	pop	de	pop	bc	ret_ctk_conio_arch_asm_end::

⌨️ 快捷键说明

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