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

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

?? inthndlr.c

?? Free 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一区二区三区免费野_久草精品视频
欧美日韩aaaaa| 在线观看亚洲专区| 奇米影视一区二区三区小说| 中文字幕亚洲区| 国产精品免费免费| 中文字幕第一区第二区| 日本一区二区视频在线| 久久精品一区蜜桃臀影院| 久久久精品综合| 久久影视一区二区| 中文字幕不卡在线播放| 亚洲人午夜精品天堂一二香蕉| 亚洲欧美在线观看| 亚洲自拍偷拍麻豆| 日产精品久久久久久久性色| 美女在线一区二区| 国产在线日韩欧美| 岛国精品一区二区| 日本精品裸体写真集在线观看| 欧美日韩在线播放| 精品电影一区二区三区| 日本一区二区成人| 夜夜嗨av一区二区三区中文字幕 | 一区二区三区影院| 亚洲一区二区视频在线观看| 视频一区国产视频| 久久99国产精品久久| 国产自产v一区二区三区c| 成人av网在线| 欧美剧情电影在线观看完整版免费励志电影| 欧美精品黑人性xxxx| 欧美精品一区二区在线播放| 国产精品人人做人人爽人人添| 玉足女爽爽91| 狠狠色丁香婷婷综合| 91在线国内视频| 91精品国产综合久久久蜜臀粉嫩 | 91视视频在线观看入口直接观看www | 国产一区二区精品久久| 一本一道久久a久久精品| 欧美一二三四在线| 国产精品美女久久久久久久网站| 亚洲成人精品影院| 成人av综合在线| 7777精品久久久大香线蕉| 国产精品视频在线看| 日本亚洲欧美天堂免费| 97久久超碰国产精品电影| 日韩免费在线观看| 亚洲综合在线五月| 成人午夜私人影院| 日韩午夜激情电影| 亚洲自拍与偷拍| 不卡的av在线| 欧美高清在线一区| 精品写真视频在线观看| 欧美日本在线视频| 亚洲少妇30p| 成人动漫av在线| 久久午夜国产精品| 欧美aaa在线| 在线观看日韩高清av| 国产精品蜜臀在线观看| 国产精品一区二区在线观看网站| 欧美伦理电影网| 一区二区三区不卡在线观看| 成人免费视频caoporn| 久久只精品国产| 精品一区二区三区视频| 欧美一三区三区四区免费在线看 | www国产成人| 久久不见久久见中文字幕免费| 91久久精品国产91性色tv| 日本一二三四高清不卡| 国产成人精品一区二区三区网站观看| 日韩午夜三级在线| 韩国女主播成人在线观看| 久久综合丝袜日本网| 国产在线播放一区二区三区| 精品国产乱码久久久久久免费 | 91麻豆精品视频| 亚洲欧美另类图片小说| 日本乱人伦一区| 亚洲综合图片区| 在线成人免费视频| 久久国产综合精品| 国产欧美一区二区精品忘忧草 | 国产人成一区二区三区影院| 国产精品一区久久久久| 中文欧美字幕免费| 北岛玲一区二区三区四区| 日韩伦理av电影| 日本韩国一区二区三区| 午夜视频一区二区| 91精品蜜臀在线一区尤物| 韩国欧美国产一区| 欧美极品aⅴ影院| 91在线观看高清| 天天操天天综合网| 久久久久久免费网| 97精品国产97久久久久久久久久久久| 一区二区三区在线免费| 欧美一二三区在线| 国产91精品露脸国语对白| 自拍偷拍亚洲欧美日韩| 欧美日本视频在线| 国产成人三级在线观看| 亚洲欧美综合网| 777午夜精品视频在线播放| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩一区二区在线看片| 国内精品视频一区二区三区八戒 | 91国产精品成人| 麻豆精品国产传媒mv男同| 中文字幕av一区二区三区| 欧美在线观看视频一区二区三区| 奇米四色…亚洲| 国产精品伦一区二区三级视频| 欧美伊人精品成人久久综合97| 日本亚洲视频在线| 亚洲色图视频网站| 精品动漫一区二区三区在线观看| 91在线视频官网| 精品一区二区免费看| 亚洲自拍偷拍九九九| 久久精品一区八戒影视| 欧美日韩高清一区二区三区| 国产大陆a不卡| 亚洲第一二三四区| 国产精品国产精品国产专区不片| 欧美一区二区三区免费在线看| 99精品一区二区三区| 国内精品免费在线观看| 免费高清视频精品| 亚洲线精品一区二区三区| 中文字幕av免费专区久久| 精品第一国产综合精品aⅴ| 91精品国模一区二区三区| 91网站最新地址| 国产精品69毛片高清亚洲| 老司机午夜精品99久久| 亚洲3atv精品一区二区三区| 亚洲人精品午夜| 国产精品久久久久婷婷| 国产嫩草影院久久久久| 久久综合给合久久狠狠狠97色69| 欧美日高清视频| 欧美日韩一区二区三区四区五区| 色综合中文字幕国产| 久久草av在线| 久久精品99久久久| 日本特黄久久久高潮| 午夜久久久影院| 午夜久久久影院| 亚洲午夜久久久久中文字幕久| 亚洲日本丝袜连裤袜办公室| 国产精品国产三级国产aⅴ中文| 国产精品美女视频| 亚洲色图都市小说| 亚洲蜜臀av乱码久久精品 | 午夜激情久久久| 亚洲国产一区视频| 日韩中文欧美在线| 美女视频免费一区| 激情av综合网| 国产精品99久久久久久似苏梦涵| 国产一区视频网站| 国产精品一区二区91| 粉嫩在线一区二区三区视频| 国产99一区视频免费| a4yy欧美一区二区三区| 色悠久久久久综合欧美99| 色欧美日韩亚洲| 欧美肥妇bbw| 精品国产电影一区二区| 欧美高清在线视频| 一二三四社区欧美黄| 久久国产剧场电影| 成人在线视频首页| 欧美日韩专区在线| 精品福利av导航| 亚洲精品一二三| 日韩国产一区二| 国产传媒一区在线| 欧美三级电影网| 国产午夜亚洲精品不卡| 亚洲免费在线视频一区 二区| 午夜精品国产更新| 国产jizzjizz一区二区| 欧美日韩专区在线| 国产日韩精品一区| 午夜私人影院久久久久| 国产大陆a不卡| 欧美日韩国产小视频| 久久精品亚洲乱码伦伦中文| 亚洲在线视频一区| 国产福利一区在线观看| 欧美网站一区二区| 亚洲国产精品成人综合| 日本不卡一二三区黄网|