亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inthndlr.c

?? 這是DOS操作系統啟動的源代碼 里面是匯編語言 包括了部分的驅動程序
?? C
?? 第 1 頁 / 共 3 頁
字號:
/****************************************************************/
/*                                                              */
/*                          inthndlr.c                          */
/*                                                              */
/*    Interrupt Handler and Function dispatcher for Kernel      */
/*                                                              */
/*                      Copyright (c) 1995                      */
/*                      Pasquale J. Villani                     */
/*                      All Rights Reserved                     */
/*                                                              */
/* This file is part of DOS-C.                                  */
/*                                                              */
/* DOS-C is free software; you can redistribute it and/or       */
/* modify it under the terms of the GNU General Public License  */
/* as published by the Free Software Foundation; either version */
/* 2, or (at your option) any later version.                    */
/*                                                              */
/* DOS-C is distributed in the hope that it will be useful, but */
/* WITHOUT ANY WARRANTY; without even the implied warranty of   */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See    */
/* the GNU General Public License for more details.             */
/*                                                              */
/* You should have received a copy of the GNU General Public    */
/* License along with DOS-C; see the file COPYING.  If not,     */
/* write to the Free Software Foundation, 675 Mass Ave,         */
/* Cambridge, MA 02139, USA.                                    */
/*                                                              */
/****************************************************************/

#include "../../hdr/portab.h"
#include "globals.h"

#ifdef VERSION_STRINGS
BYTE *RcsId = "$Header:   C:/dos-c/src/kernel/inthndlr.c_v   1.13   07 Feb 1998 20:38:46   patv  $";
#endif

/* $Log:   C:/dos-c/src/kernel/inthndlr.c_v  $
 * 
 *    Rev 1.13   07 Feb 1998 20:38:46   patv
 * Modified stack fram to match DOS standard
 * 
 *    Rev 1.12   22 Jan 1998  4:09:26   patv
 * Fixed pointer problems affecting SDA
 * 
 *    Rev 1.11   06 Jan 1998 20:13:18   patv
 * Broke apart int21_system from int21_handler.
 * 
 *    Rev 1.10   04 Jan 1998 23:15:22   patv
 * Changed Log for strip utility
 * 
 *    Rev 1.9   04 Jan 1998 17:26:16   patv
 * Corrected subdirectory bug
 * 
 *    Rev 1.8   03 Jan 1998  8:36:48   patv
 * Converted data area to SDA format
 * 
 *    Rev 1.7   01 Aug 1997  2:00:10   patv
 * COMPATIBILITY: Added return '$' in AL for function int 21h fn 09h
 * 
 *    Rev 1.6   06 Feb 1997 19:05:54   patv
 * Added hooks for tsc command
 * 
 *    Rev 1.5   22 Jan 1997 13:18:32   patv
 * pre-0.92 Svante Frey bug fixes.
 * 
 *    Rev 1.4   16 Jan 1997 12:46:46   patv
 * pre-Release 0.92 feature additions
 * 
 *    Rev 1.3   29 May 1996 21:03:40   patv
 * bug fixes for v0.91a
 * 
 *    Rev 1.2   19 Feb 1996  3:21:48   patv
 * Added NLS, int2f and config.sys processing
 * 
 *    Rev 1.1   01 Sep 1995 17:54:20   patv
 * First GPL release.
 * 
 *    Rev 1.0   02 Jul 1995  8:33:34   patv
 * Initial revision.
 */
/* $EndLog$ */

#ifdef TSC
static VOID StartTrace(VOID);
static bTraceNext = FALSE;
#endif

extern UWORD Int21AX;

/* Special entry for far call into the kernel                           */
#pragma argsused
VOID FAR 
int21_entry (iregs UserRegs)
{
	int21_handler(UserRegs);
}


/* Convert an interrupt into our register struct definition             */
VOID
int21_syscall(iregs FAR *irp)
{
	static COUNT FAR *stack;
	enable();

	if (irp -> AH > 0x67)
	{
		irp -> AL = 0;
		return;
	}

	Int21AX = irp -> AX;

	switch(irp -> AH)
	{
	/* DosVars - get/set dos variables                              */
	case 0x33:
		switch(irp -> AL)
		{
		/* Get Ctrl-C flag                                      */
		case 0x00:
			irp -> DL = break_ena ? TRUE : FALSE;
			break;
		
		/* Set Ctrl-C flag                                      */
		case 0x01:
			break_ena = irp -> DL ? TRUE : FALSE;
			break;
		
		/* Get Boot Drive                                       */
		case 0x05:
			irp -> DL = BootDrive;
			break;

		/* Get DOS-C version                                    */
		case 0x06:
			irp -> BL = os_major;
			irp -> BH = os_minor;
			irp -> DL = rev_number;
			irp -> DH = version_flags;
			break;
		default:
			irp -> AX = -DE_INVLDFUNC;
			irp -> FLAGS |= FLG_CARRY;
			break;

		/* Toggle DOS-C rdwrblock trace dump                    */
		case 0xfd:
			bDumpRdWrParms = !bDumpRdWrParms;
			break;

		/* Toggle DOS-C syscall trace dump                      */
		case 0xfe:
			bDumpRegs = !bDumpRegs;
			break;

		/* Get DOS-C release string pointer                     */
		case 0xff:
			irp -> DX = FP_SEG(os_release);
			irp -> AX = FP_OFF(os_release);
			break;
		}
		break;
	
	/* Set PSP                                                      */
	case 0x50:
		cu_psp = irp -> BX;
		break;
	
	/* Get PSP                                                      */
	case 0x51:
		irp -> BX = cu_psp;
		break;
	
	/* UNDOCUMENTED: return current psp                             */
	case 0x62:
		irp -> BX = cu_psp;
		break;
	
	/* Normal DOS function - switch stacks          */
	default:
		++InDOS;
		user_r = irp;
		stack = irp -> AH < 0x0c ? &char_api_tos : &disk_api_tos;
     
		/* Initialize stacks                                            */
		api_sp = FP_OFF(stack);
		api_ss = FP_SEG(stack);
		
		set_stack();
		
		int21_service(user_r);

		restore_stack();
		--InDOS;
	}
}

VOID int21_service(iregs far *r)
{
	COUNT rc, rc1;
	ULONG lrc;
	psp FAR *p = MK_FP(cu_psp, 0);

	p -> ps_stack = r;

	if(bDumpRegs)
	{
		fbcopy((VOID FAR *)user_r, (VOID FAR *)&error_regs, sizeof(iregs));
		printf("System call (21h): %02x\n", user_r -> AX);
		dump_regs = TRUE;
		dump();
	}

	/* The dispatch handler                                         */
	switch(r -> AH)
	{
	/* int 21h common error handler					*/
	case 0x64:
	case 0x6b:
	error_invalid:
		r -> AX = -DE_INVLDFUNC;
		goto error_out;
	error_exit:
		r -> AX = -rc;
	error_out:
		r -> FLAGS |= FLG_CARRY;
		break;
	
	/* Terminate Program                                            */
	case 0x00:
		tsr = FALSE;
		return_mode = break_flg ? 1 : 0;
		return_code = r -> AL;
		DosMemCheck();
#ifdef TSC
		StartTrace();
#endif
		return_user();
		break;
	
	/* Read Keyboard with Echo                      */
	case 0x01:
		r -> AL = DosCharInputEcho();
		break;

	/* Display Character                                            */
	case 0x02:
		DosDisplayOutput(r -> DL);
		break;

	/* Auxiliary Input                                                      */
	case 0x03:
		r -> AL = _sti();
		break;

	/* Auxiliary Output                                                     */
	case 0x04:
		sto(r -> DL);
		break;

	/* Print Character                                                      */
	case 0x05:
		sto(r -> DL);
		break;

	/* Direct Cosole I/O                                            */
	case 0x06:
		DosDirectConsoleIO(r);
		break;

	/* Direct Console Input                                         */
	case 0x07:
		r -> AL = DosCharInput();
		break;

	/* Read Keyboard Without Echo                                   */
	case 0x08:
		r -> AL = _sti();
		break;

	/* Display String                                               */
	case 0x09:
		DosOutputString(MK_FP(r -> DS, r -> DX));
		r -> AL = '$';
		break;

	/* Buffered Keyboard Input                                      */
	case 0x0a:
		((keyboard FAR *)MK_FP(r -> DS, r -> DX)) -> kb_count = 0;
		sti((keyboard FAR *)MK_FP(r -> DS, r -> DX));
		((keyboard FAR *)MK_FP(r -> DS, r -> DX)) -> kb_count -= 2;
		break;

	/* Check Keyboard Status                                        */
	case 0x0b:
		if(KbdBusy())
			r -> AL = 0x00;
		else
			r -> AL = 0xff;
		
		break;

	/* Flush Buffer, Read Keayboard                                 */
	case 0x0c:
		KbdFlush();
		switch(r -> AL)
		{
			/* Read Keyboard with Echo                      */
			case 0x01:
				r -> AL = DosCharInputEcho();
				break;

			/* Direct Cosole I/O                            */
			case 0x06:
				DosDirectConsoleIO(r);
				break;

			/* Direct Console Input                         */
			case 0x07:
				r -> AL = DosCharInput();
				break;

			/* Read Keyboard Without Echo                   */
			case 0x08:
				r -> AL = _sti();
				break;

			/* Buffered Keyboard Input                      */
			case 0x0a:
				sti((keyboard FAR *)MK_FP(r -> DS, r -> DX));
				break;

			default:
				r -> AL = 0x00;
				break;
		}
		break;

	/* Reset Drive                                                  */
	case 0x0d:
		flush();
		break;

	/* Set Default Drive                                            */
	case 0x0e:
		if(((COUNT)r -> DL) >= 0 && r -> DL < nblkdev)
			default_drive = r -> DL;
		
		r -> AL = nblkdev;            
		break;

	case 0x0f:
		if(FcbOpen(MK_FP(r -> DS, r -> DX)))
			r -> AL = 0;
		else
			r -> AL = 0xff;
		break;

	case 0x10:
		if(FcbClose(MK_FP(r -> DS, r -> DX)))
			r -> AL = 0;
		else
			r -> AL = 0xff;
		break;

	case 0x11:
		if(FcbFindFirst(MK_FP(r -> DS, r -> DX)))
			r -> AL = 0;
		else
			r -> AL = 0xff;
		break;

	case 0x12:
		if(FcbFindNext(MK_FP(r -> DS, r -> DX)))
			r -> AL = 0;
		else
			r -> AL = 0xff;
		break;

	case 0x13:
		if(FcbDelete(MK_FP(r -> DS, r -> DX)))
			r -> AL = 0;
		else
			r -> AL = 0xff;
		break;

	case 0x14:
		{
			COUNT nErrorCode;

			if(FcbRead(MK_FP(r -> DS, r -> DX), &nErrorCode))
				r -> AL = 0;
			else
				r -> AL = nErrorCode;
			break;
		}

	case 0x15:
		{
			COUNT nErrorCode;

			if(FcbWrite(MK_FP(r -> DS, r -> DX), &nErrorCode))
				r -> AL = 0;
			else
				r -> AL = nErrorCode;
			break;
		}

	case 0x16:
		if(FcbCreate(MK_FP(r -> DS, r -> DX)))
			r -> AL = 0;
		else
			r -> AL = 0xff;
		break;

	case 0x17:
		if(FcbRename(MK_FP(r -> DS, r -> DX)))
			r -> AL = 0;
		else
			r -> AL = 0xff;
		break;

	/* CP/M compatibility functions                                 */
	case 0x18:
	case 0x1d:
	case 0x1e:
	case 0x20:
#ifndef TSC
	case 0x61:
#endif
	default:
		r -> AL = 0;
		break;

	/* Get Default Drive                                            */
	case 0x19:
		r -> AL = default_drive;
		break;

	/* Set DTA                                                      */
	case 0x1a:
		{
			psp FAR *p = MK_FP(cu_psp,0);

			p -> ps_dta = MK_FP(r -> DS, r -> DX);
			dos_setdta(p -> ps_dta);
		}
		break;

	/* Get Default Drive Data                                       */
	case 0x1b:
		{
			BYTE FAR *p;

			FatGetDrvData(0,
			 (COUNT FAR *)&r -> AX,
			 (COUNT FAR *)&r -> CX,
			 (COUNT FAR *)&r -> DX,
			 (BYTE FAR **)&p);
			r -> DS = FP_SEG(p);
			r -> BX = FP_OFF(p);
		}
		break;

	/* Get Drive Data                                               */
	case 0x1c:
		{
			BYTE FAR *p;

			FatGetDrvData(r -> DL,
			 (COUNT FAR *)&r -> AX,
			 (COUNT FAR *)&r -> CX,
			 (COUNT FAR *)&r -> DX,
			 (BYTE FAR **)&p);
			r -> DS = FP_SEG(p);
			r -> BX = FP_OFF(p);
		}
		break;

	/* Get default DPB                                              */
	case 0x1f:
		if (default_drive < nblkdev)
		{
			struct dpb FAR *dpb = &blk_devices[default_drive];
			r -> DS = FP_SEG(dpb);
			r -> BX = FP_OFF(dpb);
			r -> AL = 0;
		}
		else r -> AL = 0xff;
		break;

	case 0x21:
		{
			COUNT nErrorCode;

			if(FcbRandomRead(MK_FP(r -> DS, r -> DX), &nErrorCode))
				r -> AL = 0;
			else
				r -> AL = nErrorCode;
			break;
		}

	case 0x22:
		{
			COUNT nErrorCode;

			if(FcbRandomWrite(MK_FP(r -> DS, r -> DX), &nErrorCode))
				r -> AL = 0;
			else
				r -> AL = nErrorCode;
			break;
		}

	/* Get file size in records                                     */
	case 0x23:
		if(FcbGetFileSize(MK_FP(r -> DS, r -> DX)))
			r -> AL = 0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品色眯眯| 国产xxx精品视频大全| 欧美一区二区三区思思人| 蜜桃视频一区二区| 国产色产综合产在线视频| eeuss鲁片一区二区三区在线观看| 日韩理论在线观看| 51精品久久久久久久蜜臀| 国产乱人伦偷精品视频不卡| 日韩伦理免费电影| 国产精品无人区| 欧美α欧美αv大片| 色综合天天综合给合国产| 激情综合色丁香一区二区| 亚洲黄色小视频| 欧美激情一区二区三区四区| 在线播放视频一区| 欧美日韩一区成人| 色综合视频在线观看| 国产福利一区二区三区在线视频| 亚洲成人免费影院| 亚洲久草在线视频| 自拍视频在线观看一区二区| 精品国产乱码久久久久久浪潮| 在线观看av一区| 欧美视频精品在线| 欧美日韩亚州综合| 欧美日韩在线观看一区二区| eeuss国产一区二区三区| 福利电影一区二区| 99在线精品观看| 色综合一区二区三区| 日本乱人伦aⅴ精品| 欧美日本国产一区| 欧美一区二区三区日韩视频| 欧美一区二区三区在线视频| 日韩一级片在线播放| 精品理论电影在线| 国产精品色哟哟网站| 一级中文字幕一区二区| 琪琪久久久久日韩精品| 图片区小说区区亚洲影院| 蜜臀a∨国产成人精品| 成人午夜精品一区二区三区| 色婷婷狠狠综合| 欧美成人高清电影在线| 中文字幕精品一区二区精品绿巨人| 亚洲欧洲日韩av| 蜜臀久久久久久久| 99久久99久久精品国产片果冻| 欧美视频三区在线播放| 欧美高清在线视频| 蜜臀久久99精品久久久久久9| 国产91综合网| 精品欧美乱码久久久久久1区2区| 中文一区一区三区高中清不卡| 亚洲国产精品久久一线不卡| 成人午夜视频在线| 久久久久久日产精品| 日韩高清在线一区| 欧美在线不卡视频| 亚洲综合精品久久| 99久久精品免费观看| 久久久久久久久久久黄色| 手机精品视频在线观看| 欧美在线视频你懂得| 亚洲日本一区二区| 在线一区二区三区四区五区 | 免费看欧美女人艹b| 91久久国产最好的精华液| 最新高清无码专区| 99精品久久免费看蜜臀剧情介绍| 久久久噜噜噜久久中文字幕色伊伊| 三级在线观看一区二区| 欧美在线色视频| 美女www一区二区| 日韩一级黄色大片| 福利一区二区在线观看| 国产精品久久99| 色婷婷亚洲综合| 一区二区三区免费观看| 欧美午夜影院一区| 天天综合网 天天综合色| 欧美片网站yy| 国产传媒日韩欧美成人| 亚洲免费观看高清完整版在线| 91老司机福利 在线| 丝袜美腿亚洲色图| 久久久一区二区| 91久久人澡人人添人人爽欧美| 亚洲大型综合色站| 国产亚洲女人久久久久毛片| 色哟哟一区二区三区| 日本不卡的三区四区五区| 中文字幕第一区二区| 91精品国产综合久久福利软件 | 亚洲国产毛片aaaaa无费看| 精品捆绑美女sm三区| 色呦呦国产精品| 国产成人超碰人人澡人人澡| 午夜成人免费视频| 中文字幕精品综合| 国产午夜精品一区二区三区嫩草 | 日本欧美一区二区在线观看| 国产精品人妖ts系列视频| 久久综合999| 精品国产一区二区三区不卡| 欧美精品色一区二区三区| 99久久777色| 91色九色蝌蚪| 色婷婷久久综合| 欧美羞羞免费网站| 在线播放91灌醉迷j高跟美女| 色综合久久六月婷婷中文字幕| jvid福利写真一区二区三区| 国产传媒久久文化传媒| 成人黄色大片在线观看| 99久久久无码国产精品| 在线观看国产日韩| 欧美绝品在线观看成人午夜影视| 在线观看精品一区| 欧美一激情一区二区三区| 久久蜜桃av一区精品变态类天堂| 日韩精品一区二区三区视频 | 欧美精品一区二区在线播放| 精品国产99国产精品| 国产亚洲精品bt天堂精选| 国产欧美日韩在线| 夜夜精品浪潮av一区二区三区| 爽好久久久欧美精品| 国产在线观看一区二区| 成人午夜视频免费看| 欧美高清你懂得| 中文字幕+乱码+中文字幕一区| 亚洲高清中文字幕| 风间由美一区二区av101| 9191精品国产综合久久久久久| 国产午夜精品久久久久久免费视| 亚洲日本在线观看| 国产精品一区二区在线播放| 色综合久久久久久久久久久| 欧美精品一区二区三区蜜桃视频| 亚洲欧美日韩在线| 北岛玲一区二区三区四区| 91精品国产色综合久久久蜜香臀| 亚洲色图在线播放| 国产综合久久久久影院| 欧美顶级少妇做爰| 洋洋av久久久久久久一区| 国产成人aaa| 久久久99久久| 国产精品白丝jk白祙喷水网站| 91精品国模一区二区三区| 亚洲精选视频免费看| 成人精品视频.| 综合色中文字幕| 91丝袜呻吟高潮美腿白嫩在线观看| 久久久www成人免费毛片麻豆| 精品亚洲成a人| 国产精品看片你懂得| 不卡一区中文字幕| 亚洲一级二级在线| 欧美丰满少妇xxxbbb| 久草中文综合在线| 欧美高清在线视频| 91成人看片片| 久久99精品国产.久久久久久| 久久久久久亚洲综合影院红桃| 国产91清纯白嫩初高中在线观看| 中文字幕在线不卡一区二区三区| 97国产精品videossex| 午夜精品免费在线| 久久免费看少妇高潮| 在线观看成人小视频| 久久99久国产精品黄毛片色诱| 国产精品少妇自拍| 欧美电影一区二区| 91农村精品一区二区在线| 日本不卡不码高清免费观看| 国产精品午夜久久| 欧美一区二区三区影视| 国产91丝袜在线播放九色| 五月综合激情日本mⅴ| 亚洲欧美一区二区三区久本道91| 欧美巨大另类极品videosbest| 国产经典欧美精品| 午夜国产精品一区| 亚洲天堂久久久久久久| 久久综合五月天婷婷伊人| 欧美日韩一区二区三区四区| 国产成人免费视频网站高清观看视频 | 欧美性大战久久久久久久| 精品一区二区三区欧美| 一区二区三区四区av| 自拍偷拍亚洲综合| 亚洲伦在线观看| 亚洲妇熟xx妇色黄| 亚洲成人7777| 久久精品国产久精国产爱| 麻豆精品在线观看|