亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
色狠狠色狠狠综合| 亚洲线精品一区二区三区| 国产电影一区二区三区| 国产日韩欧美在线一区| 国产福利一区二区| 美女久久久精品| 久久99精品国产麻豆婷婷| 欧美唯美清纯偷拍| 青青青伊人色综合久久| 国产一区二区电影| 国产日本欧美一区二区| 国产精品一区二区在线观看网站| 欧美精品少妇一区二区三区| 欧美日韩精品欧美日韩精品| 欧美三级日本三级少妇99| 精品国产一区二区国模嫣然| 久久精品在线观看| 91精品国产欧美一区二区| 日韩一级高清毛片| 在线观看日韩国产| 三级不卡在线观看| 精品福利一二区| 丁香啪啪综合成人亚洲小说| 国产精品蜜臀在线观看| 欧美午夜片在线看| 日本欧美加勒比视频| 久久久久久久国产精品影院| 色综合色综合色综合 | 人人超碰91尤物精品国产| 欧美大片日本大片免费观看| 国产91精品免费| 一区二区三区视频在线观看| 亚洲精品在线观| 91麻豆123| 韩国中文字幕2020精品| 综合欧美亚洲日本| 欧美一区二区三区思思人| 99精品视频一区| 日本不卡123| 亚洲欧美国产77777| 日韩午夜激情免费电影| 91小宝寻花一区二区三区| 久久成人久久爱| 亚洲小说欧美激情另类| 国产午夜一区二区三区| 欧美日韩精品福利| 97精品国产露脸对白| 国产伦精品一区二区三区视频青涩| 一区二区在线看| 国产亚洲婷婷免费| 欧美精品精品一区| 日本精品视频一区二区三区| 国产一区二区三区高清播放| 丝袜亚洲精品中文字幕一区| 亚洲欧洲99久久| 久久婷婷成人综合色| 欧美日韩国产一级| 91亚洲精品一区二区乱码| 国产做a爰片久久毛片| 午夜精品久久久久久不卡8050| 亚洲啪啪综合av一区二区三区| 久久久不卡网国产精品二区| 91精品国产综合久久久蜜臀图片 | 亚洲人成在线观看一区二区| 久久久精品国产免大香伊| 日韩欧美中文字幕制服| 欧美日韩高清一区二区不卡| 色噜噜狠狠色综合欧洲selulu| 成人夜色视频网站在线观看| 国产美女精品人人做人人爽| 麻豆精品视频在线观看| 丝袜诱惑亚洲看片 | 久久99精品国产.久久久久久| 五月开心婷婷久久| 亚洲欧美国产高清| 亚洲嫩草精品久久| 最好看的中文字幕久久| 国产精品国产三级国产aⅴ中文 | 国产欧美日韩三区| 色欧美88888久久久久久影院| 美国欧美日韩国产在线播放| 日本中文字幕一区| 精品日韩99亚洲| 国产91精品免费| 国产一区91精品张津瑜| 国产精品一区专区| 亚洲免费av在线| 精品一区二区三区视频| 久久久久久免费| 精品国产乱码久久久久久久久 | 狠狠网亚洲精品| 欧美性猛交xxxxxxxx| 久久久国产综合精品女国产盗摄| 曰韩精品一区二区| 久久精品国产精品亚洲红杏| 亚洲va欧美va人人爽午夜| 中文成人综合网| 久久伊99综合婷婷久久伊| 在线成人小视频| 欧美高清视频不卡网| 国产精品美女久久久久久| 久久国产精品露脸对白| 日韩美女精品在线| 亚洲欧美一区二区三区久本道91| 亚洲少妇30p| 石原莉奈一区二区三区在线观看| 免费不卡在线观看| 高清不卡在线观看av| 一本久道中文字幕精品亚洲嫩| 欧美色国产精品| 欧美大黄免费观看| 中文字幕高清不卡| 一区二区三国产精华液| 日韩高清在线观看| 国产高清久久久| 在线观看国产日韩| 91精品在线免费观看| 国产日韩欧美精品综合| 亚洲裸体xxx| 久久99精品久久只有精品| 99在线精品观看| 欧美一区二区三区视频在线| 国产日本欧洲亚洲| 水蜜桃久久夜色精品一区的特点| 国内精品第一页| 在线一区二区观看| 久久久亚洲精华液精华液精华液| 亚洲精品ww久久久久久p站| 免费欧美在线视频| 色狠狠av一区二区三区| 久久综合一区二区| 一区二区三区 在线观看视频| 国产一区福利在线| 欧美日韩一区在线观看| 国产农村妇女精品| 免费在线观看一区| 91国产精品成人| 国产欧美视频一区二区| 日韩精品一二三四| 91丨九色丨国产丨porny| 精品国产乱码久久久久久牛牛 | 欧美偷拍一区二区| 国产欧美日韩精品一区| 日本在线不卡视频| 一本到不卡免费一区二区| 久久中文娱乐网| 免费日韩伦理电影| 欧美日韩一级片在线观看| 亚洲国产成人在线| 国产专区欧美精品| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 午夜精品久久久久久久| 91久久国产综合久久| 中文字幕的久久| 国产在线视频一区二区三区| 日韩一级片在线观看| 午夜av一区二区| 欧美天天综合网| 亚洲色图制服丝袜| 97精品国产露脸对白| 中文字幕精品—区二区四季| 成人永久aaa| 国产精品久久久久婷婷| 国产.欧美.日韩| 国产精品少妇自拍| 成人免费视频视频| 国产欧美日韩亚州综合 | 日韩成人伦理电影在线观看| 欧美日韩一区二区三区视频| 亚洲最快最全在线视频| 色老汉一区二区三区| 亚洲欧美一区二区三区久本道91| 91天堂素人约啪| 亚洲一区视频在线观看视频| 欧美性生活一区| 亚洲高清久久久| 欧美精品粉嫩高潮一区二区| 青青草伊人久久| 日韩久久久久久| 国产精品自拍一区| 中文一区在线播放| 91在线小视频| 亚洲国产精品久久艾草纯爱 | 91精品国产综合久久蜜臀| 久久精品国内一区二区三区| 一个色在线综合| 成人av电影观看| 中文字幕一区二区三区在线不卡| 99热在这里有精品免费| 一区二区三区日韩| 91麻豆精品国产综合久久久久久| 久久精品国产亚洲aⅴ| 精品久久久久久综合日本欧美| 国产原创一区二区三区| 亚洲国产高清aⅴ视频| 91精品91久久久中77777| 视频一区欧美日韩| 久久午夜羞羞影院免费观看| jlzzjlzz国产精品久久| 婷婷成人激情在线网|