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

📄 screen.s

📁 cygwin, 著名的在win32下模拟unix操作系统的东东
💻 S
字号:
/* This is file SCREEN.S *//*** Copyright (C) 1993 DJ Delorie**** This file is distributed under the terms listed in the document** "copying.dj".** A copy of "copying.dj" should accompany this file; if not, a copy** should be available from where this file was obtained.  This file** may not be distributed without a verbatim copy of "copying.dj".**** This file is distributed WITHOUT ANY WARRANTY; without even the implied** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.**** Modified by J. Alan Eldridge, Liberty Brokerage, 77 Water St, NYC 10005**** added global char ScreenAttrib -- this is the attribute** used by ScreenClear(): it defaults to 0x07 so as not to** break existing code.**** Modified by C. Sandmann (sandmann@clio.rice.edu) for DPMI support** Combined SCREEN2.S and SCREEN.C into SCREEN.S*/	.data	.globl	_ScreenAttrib_ScreenAttrib:	.byte 0x07	.text	.align 2	.globl	_ScreenSetCursor		/* row, col */_ScreenSetCursor:	pushl	%ebp	movl	%esp,%ebp	pushl	%ebx	pushl	%esi	pushl	%edi	movb	$0x02,%ah	movb	$0,%bh	movb	8(%ebp),%dh	movb	12(%ebp),%dl	int	$0x10	popl	%edi	popl	%esi	popl	%ebx	popl	%ebp	ret	.align 2	.globl	_ScreenGetCursor		 /* &row, &col */_ScreenGetCursor:	pushl	%ebp	movl	%esp,%ebp	pushl	%ebx	pushl	%esi	pushl	%edi	movb	$0x03,%ah	movb	$0,%bh	pushl	%ebp	int	$0x10	popl	%ebp	movl	8(%ebp),%esi	movzbl	%dh,%eax	movl	%eax,(%esi)	movl	12(%ebp),%esi	movzbl	%dl,%eax	movl	%eax,(%esi)	popl	%edi	popl	%esi	popl	%ebx	popl	%ebp	ret	.align 2	.globl	_ScreenClear_ScreenClear:	pushl	%edi	call	_ScreenCols	movl	%eax,%ecx	call	_ScreenRows		/* ECX is total words to store */	imull	%eax,%ecx	movl	_ScreenPrimary,%eax	call	dosmemsetup	movl	%eax,%edi	push	%es	push	%gs	pop	%es	movb	$0x20,%al	movb	_ScreenAttrib,%ah	rep	stosw	pop	%es	popl	%edi	ret		.align 2	.globl _ScreenRows_ScreenRows:	movl	$0x484,%eax	call	dosmemsetup	movzbl	%gs:(%eax),%eax	incl	%eax	ret	.align 2	.globl _ScreenCols_ScreenCols:	movl	$0x44a,%eax	call	dosmemsetup	movzwl	%gs:(%eax),%eax	ret	.align 2	.globl _ScreenMode_ScreenMode:	movl	$0x449,%eax	call	dosmemsetup	movzbl	%gs:(%eax),%eax	ret	.align 2	.globl _ScreenPutChar_ScreenPutChar:		/* int ch, int attr, unsigned x, unsigned y *//*  if ( (x >= ScreenCols()) || (y >= ScreenRows())) return;  ch &= 0xff;  attr = (attr & 0xff) << 8;  *(unsigned short *)(ScreenPrimary+x+y*ScreenCols()) = ch | attr;*/	call	_ScreenRows	cmpl	%eax,16(%esp)	jae	L1	call	_ScreenCols	cmpl	%eax,12(%esp)	jae	L1				/* Out of range */	movl	%eax,%edx	imull	16(%esp),%edx	addl	12(%esp),%edx			/* EDX = x + y*ScreenCols */	movb	4(%esp),%cl	movb	8(%esp),%ch	movl	_ScreenPrimary,%eax	call	dosmemsetup	movw	%cx,%gs:(%eax,%edx,2)	L1:	ret	/* A quick way to update the screen from a logical video buffer, used    primarily for DPMI full screen management */	.align 2	.globl _ScreenUpdate		/* (void *)screenbuf */_ScreenUpdate:	call	_ScreenRows	movl	%eax,%ecx	call	_ScreenCols	imull	%eax,%ecx	sarl	$1,%ecx			/* Number of long words in screen */	movl	_ScreenPrimary,%eax	call	dosmemsetup	movl	4(%esp),%edx		/* screenbuf */	pushl	%esi	pushl	%edi	movl	%eax,%edi	movl	%edx,%esi	push	%es	push	%gs	pop	%es	rep	movsl					/* move ECX bytes to Real area */	pop	%es	popl	%edi	popl	%esi	ret/* A quick way to update a screen line from a logical video buffer, used    primarily for DPMI full screen management */	.align 2	.globl _ScreenUpdateLine		/* (void *)screenline, int row */_ScreenUpdateLine:	call	_ScreenCols	movl	%eax,%ecx	sarl	$1,%ecx			/* Number of long words in screen line */	shll	$1,%eax	imull	8(%esp),%eax	addl	_ScreenPrimary,%eax	call	dosmemsetup	movl	4(%esp),%edx		/* screenbuf */	pushl	%esi	pushl	%edi	movl	%eax,%edi	movl	%edx,%esi	push	%es	push	%gs	pop	%es	rep	movsl					/* move ECX bytes to Real area */	pop	%es	popl	%edi	popl	%esi	ret/* A quick way to update the screen from a logical video buffer, used    primarily for DPMI full screen management */	.align 2	.globl _ScreenRetrieve		/* (void *)screenbuf */_ScreenRetrieve:	call	_ScreenRows	movl	%eax,%ecx	call	_ScreenCols	imull	%eax,%ecx	sarl	$1,%ecx			/* Number of long words in screen */	movl	_ScreenPrimary,%eax	call	dosmemsetup	movl	4(%esp),%edx		/* screenbuf */	pushl	%esi	pushl	%edi	movl	%eax,%esi	movl	%edx,%edi	push	%ds	push	%gs	pop	%ds	rep	movsl					/* move ECX bytes to Real area */	pop	%ds	popl	%edi	popl	%esi	ret

⌨️ 快捷键说明

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