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

📄 tsksec.asm

📁 一个可以立即使用的嵌入式操作系统
💻 ASM
字号:
;
;	--- Version 2.2 90-11-22 11:43 ---
;
;	CTask - Support modules for DOS handler, plus keyboard routines.
;
;	Public Domain Software written by
;		Thomas Wagner
;		Ferrari electronic Gmbh
;		Beusselstrasse 27
;		D-1000 Berlin 21
;		Germany
;
;	This file is new with Version 2.1. Those routines which are
;	needed in both primary and secondary kernels were moved here
;	from tskdos.asm and tskkbd.asm.
;
;	This avoids linking unneeded modules for secondary kernels.
;
;---------------------------------------------------------------------------
;
	name	tsksec
;
	include	tsk.mac
;
	.tsk_model
;
	Pubfunc	tsk_free_mem
	Pubfunc	tsk_getpsp
;
	Pubfunc	t_read_key
	Pubfunc	t_wait_key
	Pubfunc	t_keyhit
;
;
; Structure of a DOS MCB (Memory Control Block)
;
mcbstruc	struc
;
mcb_id		db	?
mcb_owner	dw	?
mcb_len		dw	?
;
mcbstruc	ends
;
	.tsk_code
;
Globalfunc tsk_free_mem,<owner: word>
;
	mov	ah,51h
	int	21h
	push	bx			; save current PSP
	mov	bx,owner
	mov	ah,50h
	int	21h			; set new PSP
;
free_beg:
	mov	ah,52h
	int	21h			; get DOS invars
	mov	dx,es:[bx-2]		; start of MCB chain
	mov	bx,owner
;
free_loop:
	mov	es,dx
	cmp	es:[mcb_owner],bx
	jne	free_next
;
;	If we have released a block, we restart at the beginning of the
;	MCB chain, since DOS might merge blocks, thereby invalidating
;	our pointers. In the current versions of DOS, this seems to be
;	an unneccessary precaution, but you never know...
;
	inc	dx
	mov	es,dx
	mov	ah,49h			; free memory block
	int	21h
	jmp	free_beg
;
free_next:
	cmp	es:[mcb_id],'Z'		; end of chain ?
	je	free_end		; then exit
	add	dx,es:[mcb_len]
	inc	dx			; point to next
	jmp	free_loop
;
free_end:
	pop	bx
	mov	ah,50h
	int	21h			; restore PSP
	ret
;
tsk_free_mem	endp
;
;---------------------------------------------------------------------------
;---------------------------------------------------------------------------
;
;	int t_read_key (void)
;
;	Waits for key from keyboard. Returns char in lower byte,
;	Scan-Code in upper byte.
;
Globalfunc t_read_key
;
	mov	ax,4112h
	int	16h
	ret
;	
t_read_key	endp
;
;
;	int t_wait_key (dword timeout)
;
;	Waits for key from keyboard. Returns char in lower byte,
;	Scan-Code in upper byte.
;
Globalfunc t_wait_key,<tout: dword>
;
	mov	cx,word ptr (tout+2)
	mov	dx,word ptr (tout)
	mov	ax,4012h
	int	16h
	ret
;	
t_wait_key	endp
;
;
;	int t_keyhit (void)
;
;	Checks if char is available. Returns -1 if not, else the
;	character value. The character remains in the buffer.
;
Globalfunc t_keyhit
;
	mov	ax,4212h
	int	16h
	jnz	t_kh_ok
	mov	ax,-1
t_kh_ok:
	ret
;
t_keyhit	endp
;
;-------------------------------------------------------------------------
;
Globalfunc tsk_getpsp
;
	mov	ah,51h
	int	21h
	mov	ax,bx
	ret
;
tsk_getpsp	endp
;
	.tsk_ecode
        end

⌨️ 快捷键说明

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