亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美日韩日日夜夜| 国产亚洲欧美色| 久久综合久久综合九色| 亚洲视频在线观看三级| 免费精品视频最新在线| 91蝌蚪porny| 久久这里只精品最新地址| 亚洲第一搞黄网站| 91视频在线观看| 国产三级三级三级精品8ⅰ区| 午夜精品视频一区| 欧美体内she精高潮| 国产精品丝袜一区| 国内成+人亚洲+欧美+综合在线 | 免费的国产精品| 欧美三级在线视频| 樱花影视一区二区| 99久久免费国产| 日本一区二区三区在线不卡| 久久99国产精品麻豆| 欧美日韩国产大片| 亚洲美女一区二区三区| 丁香六月久久综合狠狠色| 久久婷婷综合激情| 国产在线精品一区二区不卡了| 欧美一区二区三区白人| 日本一道高清亚洲日美韩| 欧美日韩一区久久| 亚洲va国产天堂va久久en| 欧美日韩精品高清| 三级精品在线观看| 欧美最猛性xxxxx直播| 亚洲精品免费在线| 在线观看日韩电影| 一区二区三区精品在线| 欧美三级乱人伦电影| 亚洲曰韩产成在线| 欧美久久久久久久久中文字幕| 一区二区三区在线视频播放| 欧美性大战久久久| 视频在线观看一区二区三区| 欧美日本乱大交xxxxx| 日本 国产 欧美色综合| 欧美videossexotv100| 国产精品一区在线观看你懂的| 欧美激情综合五月色丁香| 成人免费观看视频| 亚洲一区二区在线播放相泽| 欧美日韩mp4| 国产一区二区三区在线观看免费视频| 久久久精品天堂| 91麻豆国产自产在线观看| 亚洲综合一区二区| 欧美一级黄色录像| 国产宾馆实践打屁股91| 亚洲黄一区二区三区| 91精品国产91久久久久久一区二区 | 欧美成人国产一区二区| 国产一二精品视频| 亚洲毛片av在线| 欧美一级视频精品观看| 国产91精品欧美| 亚洲自拍偷拍欧美| 久久一日本道色综合| 色8久久人人97超碰香蕉987| 免费看欧美女人艹b| 国产精品九色蝌蚪自拍| 777久久久精品| 成人国产免费视频| 日韩成人精品在线| 国产精品久久久久久久浪潮网站| 欧美日韩国产综合视频在线观看| 久久91精品国产91久久小草| 亚洲欧美日韩一区| 精品久久久久久久人人人人传媒 | 91麻豆国产香蕉久久精品| 日韩经典一区二区| 亚洲色图.com| 久久精品欧美一区二区三区麻豆| 欧美性猛片xxxx免费看久爱| 国产麻豆精品在线观看| 香蕉av福利精品导航| 国产精品国产三级国产aⅴ入口| 欧美久久婷婷综合色| 99视频在线精品| 国产麻豆午夜三级精品| 天天综合色天天综合| 亚洲乱码国产乱码精品精98午夜| 久久九九久精品国产免费直播| 69av一区二区三区| 91成人国产精品| 波多野结衣的一区二区三区| 极品少妇xxxx精品少妇| 日韩精品91亚洲二区在线观看| 亚洲精品免费在线观看| 国产精品美女视频| 久久久不卡网国产精品二区| 日韩亚洲欧美综合| 欧美卡1卡2卡| 欧美性色综合网| 色综合久久六月婷婷中文字幕| 成人国产精品免费| 国产成人综合在线观看| 久久9热精品视频| 日本不卡视频一二三区| 日韩在线一区二区三区| 日韩综合小视频| 偷窥少妇高潮呻吟av久久免费| 亚洲国产中文字幕| 亚洲另类色综合网站| 亚洲三级在线播放| 亚洲免费在线观看视频| 亚洲女同女同女同女同女同69| 国产精品美女久久久久久2018| 国产精品女主播av| 国产精品电影一区二区| 亚洲欧洲美洲综合色网| 亚洲视频在线一区观看| 一区二区三区精密机械公司| 一区二区三区资源| 亚洲综合在线电影| 亚洲超丰满肉感bbw| 天堂蜜桃一区二区三区| 麻豆视频观看网址久久| 经典三级视频一区| 国产成人日日夜夜| 成人晚上爱看视频| 91污在线观看| 欧美三级视频在线观看| 91精品国产综合久久蜜臀| 日韩欧美国产精品一区| 久久久久久久国产精品影院| 欧美极品美女视频| 亚洲另类春色校园小说| 日本最新不卡在线| 国产精品99久久久久久久女警| www.一区二区| 欧美福利视频导航| ww亚洲ww在线观看国产| 成人免费小视频| 亚洲成av人片一区二区| 国产在线乱码一区二区三区| 成人免费观看男女羞羞视频| 欧美羞羞免费网站| 亚洲精品一线二线三线无人区| 国产精品美女久久久久久久久久久 | 91蜜桃婷婷狠狠久久综合9色| 在线观看www91| 久久午夜免费电影| 亚洲精品亚洲人成人网在线播放| 三级亚洲高清视频| 成人永久aaa| 制服.丝袜.亚洲.中文.综合| 欧美国产日本韩| 亚洲123区在线观看| 国精品**一区二区三区在线蜜桃| 色婷婷久久一区二区三区麻豆| 日韩一级完整毛片| 亚洲天堂精品在线观看| 久久精品噜噜噜成人av农村| 一本色道久久综合精品竹菊| 日韩欧美国产精品| 亚洲女人的天堂| 国产精品一区二区男女羞羞无遮挡| 欧美伊人久久久久久久久影院 | 国产一区二区在线免费观看| 日本高清不卡一区| 久久丝袜美腿综合| 日本不卡一二三| 91豆麻精品91久久久久久| 国产亚洲成aⅴ人片在线观看 | 欧美日韩一二区| 中文字幕日韩一区| 国产美女一区二区三区| 欧美精品久久一区二区三区| 亚洲人吸女人奶水| 国产精品一区二区91| 日韩视频在线永久播放| 亚洲一区二区三区视频在线| 99精品热视频| 中文字幕精品一区二区三区精品| 麻豆精品新av中文字幕| 欧美日韩久久不卡| 亚洲美女屁股眼交| 99久久er热在这里只有精品66| 久久久www免费人成精品| 久久国产生活片100| 7777精品伊人久久久大香线蕉经典版下载 | 国产精品久久久久国产精品日日| 精品一区二区三区久久| 欧美精品一级二级| 亚洲成国产人片在线观看| 色综合天天性综合| 日韩理论片一区二区| jvid福利写真一区二区三区| 国产精品久久久久国产精品日日| 成人性视频免费网站| 中文字幕国产一区| 99久久精品国产导航| 中文字幕一区不卡|