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

📄 libconio_arch-asm.cs

📁 Contiki是一个开源
💻 CS
字号:
;;; ;;; ;;; libconio_arch-asm.hS;;; ;;; Architecture depend libconio implementation.;;; This assembler source contributes basically saving for speed and memory.;;; ;;; @author Takahide Matsutsuka <markn@markn.org>;;; ;;; $Id: libconio_arch-asm.cS,v 1.2 2007/09/29 04:10:00 matsutsuka Exp $;;;	;; uses preprocessor to enable definitions#include "ctk_arch-def.h"	;; export symbols.if LIBCONIO_EXPORT	.globl	_cputc_arch	.globl	_cputs_arch	.globl	_cputsn_arch	.globl	_chline_arch	.globl	_cvline_arch	.globl	_gotoxy_arch	.globl	_clearto_arch	.globl	_revers_arch	.globl	_clip_arch.endif	.globl	_wherex_arch	.globl	_wherey_arch		.area	_DATA_screen_cursor:	.ds	1		; x	.ds	1		; y_screen_clips:	.ds	1		; clip y1	.ds	1		; clip y2_screen_reversed:	.ds	1	.area	_CODE	_libconio_arch_asm_start::	;; ---------------------------------	;; void cputc(char ch);	;; Stack; retl reth ch	;; AFBCDEHL____	;; return A=1 if output is succeeded, A=0 if not	;; ---------------------------------.if LIBCONIO_EXPORT_cputc_arch:	ld	hl, #2	add	hl, sp	ld	a, (hl).endif				; LIBCONIO_EXPORT	;; ------------	;; A = char	;; AFBCDEHL____	;; ------------_cputc_arch_asm::	push	af		ld	bc, (#_screen_cursor)	;B=y, C=x	ld	de, (#_screen_clips)	;D=cy2, E=cy1	ld	a, b	cp	a, e	jr	c, _cputc_arch_ret_false	; if (cursy < cy1)	cp	a, d	jr	z, _cputc_arch_next1	jr	nc, _cputc_arch_ret_false	; if (cursy > cy2)_cputc_arch_next1:	cp	a, #SCREEN_HEIGHT		; cursy - SCREEN_HEIGHT	jr	z, _cputc_arch_next2	jr	nc, _cputc_arch_ret_false	; if (cursy > SCREEN_HEIGHT)_cputc_arch_next2:		ld	a, c	cp	a, #SCREEN_WIDTH		; cursx - SCREEN_WIDTH	jr	nc, _cputc_arch_ret_false	; if (cursx >= SCREEN_WIDTH)	;; calculate offset	ld	a, b			; A=y	ld	hl, #0	ld	de, #SCREEN_WIDTH_cputc_arch_loop:	or	a	jr	z, _cputc_arch_calcx	add	hl, de	dec	a	jr	_cputc_arch_loop_cputc_arch_calcx:	ld	d, #0	ld	e, c	add	hl, de	;; putchar	pop	af	ld	de, #VRAM_CHAR	push	hl	add	hl, de	ld	(hl), a	pop	hl	;; putattr	ld	de, #VRAM_ATTR	add	hl, de	ld	a, (#_screen_reversed)	or	a	jr	z, _cputc_arch_normal	ld	(hl), #COLOR_REVERSED	jr	_cputc_arch_ret_cputc_arch_normal:	ld	(hl), #COLOR_NORMAL	ld	a, #0x01_cputc_arch_ret:	ld	hl, #_screen_cursor	inc	(hl)	ret_cputc_arch_ret_false:	pop	af	xor	a	jr	_cputc_arch_ret		;; ---------------------------------	;; void cputs_arch(char *str);	;; Stack; retl reth strl strh	;; AFB_DEHL____	;; return void	;; ---------------------------------.if 1_cputs_arch::	ld	hl, #2	add	hl, sp	ld	e, (hl)	inc	hl	ld	d, (hl).endif				; LIBCONIO_EXPORT		;; ------------	;; DE = str	;; AFB_DEHL____	;; ------------_cputs_arch_asm::	ld	b, #SCREEN_WIDTH		; max length	jr	_cputsn_arch_asm	; take over B and DE	;; ---------------------------------	;; void cputsn(char *str, unsigned char length);	;; Stack; retl reth strl strh length	;; AFB_DEHL____	;; return void	;; ---------------------------------.if LIBCONIO_EXPORT_cputsn_arch:	ld	hl, #2	add	hl, sp	ld	e, (hl)	inc	hl	ld	d, (hl)	inc	hl	ld	b, (hl).endif				; LIBCONIO_EXPORT		;; ------------	;; B = nchars	;; DE = str	;; AFB_DEHL____	;; ------------_cputsn_arch_asm::	ld	a, (de)	or	a	ret	z	push	bc	push	de	call	_cputc_arch_asm	pop	de	pop	bc	inc	de	djnz	_cputsn_arch_asm	ret		;; ---------------------------------	;; void chline(unsigned char length);	;; Stack; retl reth length	;; AFB_DEHL____	;; return void	;; ---------------------------------.if LIBCONIO_EXPORT_chline_arch:	ld	hl, #2	add	hl, sp	ld	b, (hl)	;; ------------	;; B = length	;; AFB_DEHL____	;; ------------.endif_chline_arch_asm::	ld	a, #CH_HOLILINE	push	bc	call	_cputc_arch_asm	pop	bc	djnz	_chline_arch_asm	ret			;; ---------------------------------	;; void cvline(unsigned char length);	;; Stack; retl reth length	;; AFB_DEHL____	;; return void	;; ---------------------------------.if LIBCONIO_EXPORT_cvline_arch:	ld	hl, #2	add	hl, sp	ld	b, (hl)		; length.endif				; LIBCONIO_EXPORT	;; ------------	;; B = length	;; AFB_DEHL____	;; ------------_cvline_arch_asm::	ld	hl, (#_screen_cursor) ; H=y, L=x_cvline_arch_loop:	ld	a, #CH_VERTLINE	push	hl	push	bc	call	_cputc_arch_asm	pop	bc	pop	hl	inc	h	ld	(#_screen_cursor), hl	djnz	_cvline_arch_loop	ret	;; ---------------------------------	;; void gotoxy(unsigned char x, unsigned char y)	;; Stack; retl reth x y	;; _F__DEHL____	;; return void	;; ---------------------------------.if 1_gotoxy_arch::	ld	hl, #2	add	hl, sp	ld	e, (hl)		; y	inc	hl	ld	d, (hl)		; x	ld	l, e		; L=x	ld	h, d		; H=y.endif				; LIBCONIO_EXPORT	;; ------------	;; H = x, L = y	;; ____________	;; ------------_gotoxy_arch_asm::	ld	(#_screen_cursor), hl	ret		;; ---------------------------------	;; void clearto_arch(unsigned char to)	;; Stack; retl reth to	;; AFBCDEHL____	;; return void	;; ---------------------------------.if LIBCONIO_EXPORT_clearto_arch:	ld	hl, #2	add	hl, sp	ld	a, (hl).endif				; LIBCONIO_EXPORT	;; ------------	;; A = to	;; AFBCDEHL____	;; ------------_clearto_arch_asm::	ld	hl, #_screen_cursor	cp	(hl)		; to - cursx	ret	z	ret	c	push	af	ld	a, #CH_SPACE	call	_cputc_arch_asm	or	a	pop	af	ret	z	jr	_clearto_arch_asm	;; ---------------------------------	;; void revers_arch(unsigned char reverse)	;; Stack; retl reth reverse	;; A_____HL____	;; return void	;; ---------------------------------.if LIBCONIO_EXPORT_revers_arch:	ld	hl, #2	add	hl, sp	ld	a, (hl).endif				; LIBCONIO_EXPORT	;; A = reverse	;; _____________revers_arch_asm::	ld	(#_screen_reversed), a	ret	;; ---------------------------------	;; void clip_arch(unsigned char clip1, unsigned char clip2)	;; Stack; retl reth clip1 clip2	;; ____________	;; return void	;; ---------------------------------.if LIBCONIO_EXPORT_clip_arch:	push	af	push	hl	push	de	ld	hl, #0x08	add	hl, sp	ld	de, #_screen_clips	ld	a, (hl)	ld	(de), a	inc	hl	inc	de	ld	a, (hl)	ld	(de), a	pop	de	pop	hl	pop	af	ret	.endif		;; ---------------------------------	;; L = clipy1, H = clipy2	;; ____________	;; ---------------------------------_clip_arch_asm::	ld	(#_screen_clips), hl	ret		;; ---------------------------------	;; unsigned char wherex_arch()	;; Stack; retl reth	;; A______L____	;; return x	;; ---------------------------------_wherex_arch:	ld	a, (#_screen_cursor)	ld	l, a	ret		;; ---------------------------------	;; unsigned char wherey_arch()	;; Stack; retl reth	;; A______L____	;; return y	;; ---------------------------------_wherey_arch:	ld	a, (#_screen_cursor + 1)	ld	l, a	ret	.if 0_newline_arch:	ld	hl, #_screen_cursor	xor	a	ld	(hl), a	inc	hl	ld	a, (hl)	inc	a	cp	a, #SCREEN_HEIGHT	jr	nc, _newline_arch_scroll	ld	(hl), a	ret_newline_arch_scroll:	;; TODO: attr and specific impl	dec	a	ld	(hl), a	ld	hl, #VRAM_CHAR + #SCREEN_WIDTH	ld	de, #VRAM_CHAR	ld	bc, #SCREEN_HEIGHT * #SCREEN_WIDTH - #SCREEN_WIDTH	ldir	ret.endif	_libconio_arch_asm_end::

⌨️ 快捷键说明

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