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

📄 elksutil.c

📁 神龙卡开发原代码
💻 C
字号:
/* * Copyright (c) 1999 Greg Haerr <greg@censoft.com> * * ELKS utility routines for Micro-Windows drivers */#include "device.h"#include "vgaplan4.h"/* * Return the byte at far address */unsigned charGETBYTE_FP(FARADDR addr){#asm	push	bp	mov	bp,sp	push	ds	mov	bx,[bp+4]	! bx = lo addr	mov	ax,[bp+6]	! ds = hi addr	mov	ds,ax	mov	al,[bx]		! get byte at ds:bx	xor	ah,ah	pop	ds	pop	bp#endasm}/* * Put the byte at far address */voidPUTBYTE_FP(FARADDR addr,unsigned char val){#asm	push	bp	mov	bp,sp	push	ds	mov	bx,[bp+4]	! bx = lo addr	mov	ax,[bp+6]	! ds = hi addr	mov	ds,ax	mov	al,[bp+8]	! al = val	mov	[bx],al		! put byte at ds:bx	pop	ds	pop	bp#endasm}/* * Read-modify-write the byte at far address */voidRMW_FP(FARADDR addr){#asm	push	bp	mov	bp,sp	push	ds	mov	bx,[bp+4]	! bx = lo addr	mov	ax,[bp+6]	! ds = hi addr	mov	ds,ax	or	[bx],al		! rmw byte at ds:bx, al value doesnt matter	pop	ds	pop	bp#endasm}/* * Or the byte at far address */voidORBYTE_FP(FARADDR addr,unsigned char val){#asm	push	bp	mov	bp,sp	push	ds	mov	bx,[bp+4]	! bx = lo addr	mov	ax,[bp+6]	! ds = hi addr	mov	ds,ax	mov	al,[bp+8]	! al = val	or	[bx],al		! or byte at ds:bx	pop	ds	pop	bp#endasm}/* * And the byte at far address */voidANDBYTE_FP(FARADDR addr,unsigned char val){#asm	push	bp	mov	bp,sp	push	ds	mov	bx,[bp+4]	! bx = lo addr	mov	ax,[bp+6]	! ds = hi addr	mov	ds,ax	mov	al,[bp+8]	! al = val	and	[bx],al		! and byte at ds:bx	pop	ds	pop	bp#endasm}/* * Input byte from i/o port */intinportb(int port){#asm	push	bp	mov	bp,sp	mov	dx,[bp+4]	! dx = port	in	al,dx		! input byte	xor	ah,ah	pop	bp#endasm}/* * Output byte to i/o port */voidoutportb(int port,unsigned char data){#asm	push	bp	mov	bp,sp	mov	dx,[bp+4]	! dx = port	mov	al,[bp+6]	! al = data	out	dx,al	pop	bp#endasm}/* * Output word i/o port */voidoutport(int port,int data){#asm	push	bp	mov	bp,sp	mov	dx,[bp+4]	! dx = port	mov	ax,[bp+6]	! ax = data	out	dx,ax	pop	bp#endasm}/* * es:bp = int10(int ax,int bx) *  Call video bios using interrupt 10h */FARADDRint10(int ax,int bx){#asm	push	bp	mov	bp,sp	push	es	push	ds	push	si	push	di	mov	ax,[bp+4]	! get first arg	mov	bx,[bp+6]	! get second arg	int	$10	mov	dx,es		! return es:bp	mov	ax,bp	pop	di	pop	si	pop	ds	pop	es	pop	bp#endasm}/* poll the keyboard*/intkbpoll(void){#asm	mov	ah,1			! read, no remove	int	$16	jz	nordy			! no chars ready	mov	ax,1			! chars ready	retnordy:	xor	ax,ax			! no chars ready#endasm}/* wait and read a kbd char when ready*/intkbread(void){#asm	xor	ah,ah			! read and remove	int	$16			! return ax#endasm}/* return kbd shift status*/intkbflags(void){#asm	mov	ah,2			! get shift status	int	$16	mov	ah,0			! low bits only for now...#endasm}

⌨️ 快捷键说明

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