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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dsk.c

?? 這是DOS操作系統(tǒng)啟動的源代碼 里面是匯編語言 包括了部分的驅(qū)動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
}


COUNT
blk_driver (rqptr rp)
{
	if(rp -> r_unit >= nUnits && rp-> r_command != C_INIT)
		return failure(E_UNIT);
	if(rp -> r_command > NENTRY)
	{
		return failure(E_FAILURE);	/* general failure */
	}
	else
		return ((*dispatch[rp -> r_command])(rp));
}


static WORD
init (rqptr rp)
{
	COUNT HardDrive, Unit;

	/* Reset the drives						*/
	fl_reset();

        /* Initial number of disk units                                 */
	nUnits = 2;
        /* Initial number of DOS partitions                             */
        nPartitions = 0;

        /* Setup media info and BPBs arrays                             */
        for (Unit = 0; Unit < NDEV; Unit++)
        {
                miarray[Unit].mi_size = 720l;
                miarray[Unit].mi_heads = 2;
                miarray[Unit].mi_cyls = 40;
                miarray[Unit].mi_sectors = 9;
                miarray[Unit].mi_offset = 0l;
                miarray[Unit].mi_drive = Unit;

                bpbarray[Unit].bpb_nbyte = SEC_SIZE;
                bpbarray[Unit].bpb_nsector = 2;
                bpbarray[Unit].bpb_nreserved = 1;
                bpbarray[Unit].bpb_nfat = 2;
                bpbarray[Unit].bpb_ndirent = 112;
                bpbarray[Unit].bpb_nsize = 720l;
                bpbarray[Unit].bpb_mdesc = 0xfd;
                bpbarray[Unit].bpb_nfsect = 2;

                bpbptrs[Unit] = &bpbarray[Unit];
        };

	for(HardDrive = 0; HardDrive <= 0; HardDrive++) /* only one hard drive for now */
	{
                /* Process primary partition table                      */
                if (!processtable ((HardDrive | 0x80), 0, 0l, 1, 0l))
                   /* Exit if no hard drive                             */
                   break;
        };

	rp -> r_nunits = nUnits;
	rp -> r_bpbptr = bpbptrs;
        rp -> r_endaddr = device_end();
	return S_DONE;
}


static WORD
mediachk (rqptr rp)
{
	if(hd(miarray[rp -> r_unit].mi_drive))
		rp -> r_mcretcode = M_NOT_CHANGED;
	else
		rp -> r_mcretcode = tdelay((LONG)37) ? M_DONT_KNOW : M_NOT_CHANGED;
	return S_DONE;
}


static WORD
bldbpb (rqptr rp)
{
	REG retry = N_RETRY;
	ULONG count;
	byteptr trans;
	WORD local_word;

	if(hd(miarray[rp -> r_unit].mi_drive))
	{
                COUNT partidx = miarray[rp -> r_unit].mi_partidx;
		head = dos_partition[partidx].peBeginHead;
		sector = dos_partition[partidx].peBeginSector;
		track = dos_partition[partidx].peBeginCylinder;
	}
	else
	{
		head = 0;
		sector = 1;
		track = 0;
	}

	do
	{
		ret = fl_read((WORD)miarray[rp -> r_unit].mi_drive,
                      (WORD)head, (WORD)track, (WORD)sector, (WORD)1, (byteptr)&buffer);
	} while (ret != 0 && --retry > 0);
	if(ret != 0)
		return(dskerr(ret));

	getword(&((((BYTE *)&buffer.bytes[BT_BPB]))[BPB_NBYTE]), &bpbarray[rp -> r_unit].bpb_nbyte);
	getbyte(&((((BYTE *)&buffer.bytes[BT_BPB]))[BPB_NSECTOR]), &bpbarray[rp -> r_unit].bpb_nsector);
	getword(&((((BYTE *)&buffer.bytes[BT_BPB]))[BPB_NRESERVED]), &bpbarray[rp -> r_unit].bpb_nreserved);
	getbyte(&((((BYTE *)&buffer.bytes[BT_BPB]))[BPB_NFAT]), &bpbarray[rp -> r_unit].bpb_nfat);
	getword(&((((BYTE *)&buffer.bytes[BT_BPB]))[BPB_NDIRENT]), &bpbarray[rp -> r_unit].bpb_ndirent);
	getword(&((((BYTE *)&buffer.bytes[BT_BPB]))[BPB_NSIZE]), &bpbarray[rp -> r_unit].bpb_nsize);
	getword(&((((BYTE *)&buffer.bytes[BT_BPB]))[BPB_NSIZE]), &bpbarray[rp -> r_unit].bpb_nsize);
	getbyte(&((((BYTE *)&buffer.bytes[BT_BPB]))[BPB_MDESC]), &bpbarray[rp -> r_unit].bpb_mdesc);
	getword(&((((BYTE *)&buffer.bytes[BT_BPB]))[BPB_NFSECT]), &bpbarray[rp -> r_unit].bpb_nfsect);
	getword(&((((BYTE *)&buffer.bytes[BT_BPB]))[BPB_NSECS]), &bpbarray[rp -> r_unit].bpb_nsecs);
	getword(&((((BYTE *)&buffer.bytes[BT_BPB]))[BPB_NHEADS]), &bpbarray[rp -> r_unit].bpb_nheads);
	getlong(&((((BYTE *)&buffer.bytes[BT_BPB])[BPB_HIDDEN])), &bpbarray[rp -> r_unit].bpb_hidden);
	getlong(&((((BYTE *)&buffer.bytes[BT_BPB])[BPB_HUGE])), &bpbarray[rp -> r_unit].bpb_huge);
#ifdef DSK_DEBUG
	printf("BPB_NBYTE     = %04x\n", bpbarray[rp -> r_unit].bpb_nbyte);
	printf("BPB_NSECTOR   = %02x\n", bpbarray[rp -> r_unit].bpb_nsector);
	printf("BPB_NRESERVED = %04x\n", bpbarray[rp -> r_unit].bpb_nreserved);
	printf("BPB_NFAT      = %02x\n", bpbarray[rp -> r_unit].bpb_nfat);
	printf("BPB_NDIRENT   = %04x\n", bpbarray[rp -> r_unit].bpb_ndirent);
	printf("BPB_NSIZE     = %04x\n", bpbarray[rp -> r_unit].bpb_nsize);
	printf("BPB_MDESC     = %02x\n", bpbarray[rp -> r_unit].bpb_mdesc);
	printf("BPB_NFSECT    = %04x\n", bpbarray[rp -> r_unit].bpb_nfsect);
#endif
	rp -> r_bpptr = &bpbarray[rp -> r_unit];
	count = miarray[rp -> r_unit].mi_size =
	 bpbarray[rp -> r_unit].bpb_nsize == 0 ?
	  bpbarray[rp -> r_unit].bpb_huge :
	  bpbarray[rp -> r_unit].bpb_nsize;
	getword((&(((BYTE *)&buffer.bytes[BT_BPB])[BPB_NHEADS])), &miarray[rp -> r_unit].mi_heads);
	head = miarray[rp -> r_unit].mi_heads;
	getword((&(((BYTE *)&buffer.bytes[BT_BPB])[BPB_NSECS])), &miarray[rp -> r_unit].mi_sectors);
	if(miarray[rp -> r_unit].mi_size == 0)
		getlong(&((((BYTE *)&buffer.bytes[BT_BPB])[BPB_HUGE])), &miarray[rp -> r_unit].mi_size);
	sector = miarray[rp -> r_unit].mi_sectors;
	if(head == 0 || sector == 0)
	{
		tmark();
		return failure(E_FAILURE);
	}
	miarray[rp -> r_unit].mi_cyls = count / (head * sector);
	tmark();
#ifdef DSK_DEBUG
	printf("BPB_NSECS     = %04x\n", sector);
	printf("BPB_NHEADS    = %04x\n", head);
	printf("BPB_HIDDEN    = %08lx\n", bpbarray[rp -> r_unit].bpb_hidden);
	printf("BPB_HUGE      = %08lx\n", bpbarray[rp -> r_unit].bpb_huge);
#endif
	return S_DONE;
}

static WORD 
blockio (rqptr rp)
{
	REG retry = N_RETRY, remaining;
	UWORD cmd, total;
	ULONG start;
	byteptr trans;

	cmd = rp -> r_command;
	total = 0;
	trans = rp -> r_trans;
	tmark();
	for
	(
		remaining = rp -> r_count,
		 start = (rp -> r_start != HUGECOUNT ? rp -> r_start : rp -> r_huge)
		  + miarray[rp -> r_unit].mi_offset;
		remaining > 0;
		remaining -= count, trans += count * SEC_SIZE, start += count
	)
	{
		if(ltop(&track, &sector, &head,  rp -> r_unit, 1, start, trans) != 1)
		{
/*			printf("split sector at 0x%lx", trans);*/
		}
		count = ltop(&track, &sector, &head,  rp -> r_unit, remaining, start, trans);
		total += count;
		do
		{
			switch(cmd)
			{
			case C_INPUT:
				ret = fl_read((WORD)miarray[rp -> r_unit].mi_drive, (WORD)head, (WORD)track, (WORD)sector, (WORD)count, trans);
				break;

			case C_OUTPUT:
			case C_OUTVFY:
				ret = fl_write((WORD)miarray[rp -> r_unit].mi_drive, (WORD)head, (WORD)track, (WORD)sector, (WORD)count, trans);
				break;

			default:
				return failure(E_FAILURE);
			}
		} while (ret != 0 && --retry > 0);
		if(ret != 0)
		{
			rp -> r_count = 0;
			return dskerr(ret);
		}
		if(cmd == C_OUTVFY)
		{
			ret = fl_verify((WORD)miarray[rp -> r_unit].mi_drive, (WORD)head, (WORD)track, (WORD)sector, (WORD)count, rp -> r_trans);
			if(ret != 0)
			{
				rp -> r_count = 0;
				return dskerr(ret);
			}
		}
	}
	rp -> r_count = total;
	return S_DONE;
}

static WORD
blk_error (rqptr rp)
{
	rp -> r_count = 0;
	return failure(E_FAILURE);	/* general failure */
}



static WORD
dskerr (COUNT code)
{
/*	printf("diskette error:\nhead = %d\ntrack = %d\nsector = %d\ncount = %d\n",
		head, track, sector, count);*/
	switch(code & 0x03)
	{
	case 1:		/* invalid command - general failure */
		if(code & 0x08)
			return(E_FAILURE);
		else
			return failure(E_CMD);

	case 2:		/* address mark not found - general  failure */
		return failure(E_FAILURE);

	case 3:		/* write protect */
		return failure(E_WRPRT);

	default:
		if(code & 0x80)		/* time-out */
			return failure(E_NOTRDY);
		else if(code & 0x40)	/* seek error */
			return failure(E_SEEK);
		else if(code & 0x10)	/* CRC error */
			return failure(E_CRC);
		else if(code & 0x04)
			return failure(E_NOTFND);
		else
			return failure(E_FAILURE);
	}
}

/*									*/
/* Do logical block number to physical head/track/sector mapping	*/
/*									*/
static COUNT
ltop (WORD *trackp, WORD *sectorp, WORD *headp, REG COUNT unit, COUNT count, LONG strt_sect, byteptr strt_addr)
{
#ifdef I86
	ULONG ltemp;
#endif
	REG ls, ps;

#ifdef I86
	/* Adjust for segmented architecture				*/
	ltemp = (((ULONG)mk_segment(strt_addr) << 4) + mk_offset(strt_addr)) & 0xffff;
	/* Test for 64K boundary crossing and return count large	*/
	/* enough not to exceed the threshold.				*/
	count = (((ltemp + SEC_SIZE * count) & 0xffff0000l) != 0l)
		? (0xffffl - ltemp) / SEC_SIZE
		: count;
#endif

	*trackp = strt_sect / (miarray[unit].mi_heads * miarray[unit].mi_sectors);
	*sectorp = strt_sect % miarray[unit].mi_sectors + 1;
	*headp = (strt_sect % (miarray[unit].mi_sectors * miarray[unit].mi_heads))
		/ miarray[unit].mi_sectors;
	if(((ls = *headp * miarray[unit].mi_sectors + *sectorp - 1) + count) >
		(ps = miarray[unit].mi_heads * miarray[unit].mi_sectors))
		count = ps - ls;
	return count;
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜在线观看视频在线| 国产99久久久精品| 国产成人av电影| 欧美日韩国产大片| 久久精品综合网| 日韩精品电影在线观看| 99久久免费国产| 久久综合久久综合久久综合| 亚洲一区二区av在线| av激情成人网| 久久久久久一级片| 激情伊人五月天久久综合| 欧日韩精品视频| 亚洲精品日韩一| 99re热视频精品| 国产精品成人免费| 风间由美一区二区av101 | 成人性生交大片免费看视频在线 | 国产片一区二区| 激情久久久久久久久久久久久久久久| 欧美日韩亚州综合| 亚洲综合在线第一页| 色偷偷成人一区二区三区91 | 91小视频免费观看| 中文字幕不卡的av| 国产99久久久国产精品| 久久色在线视频| 黑人精品欧美一区二区蜜桃 | 欧美日韩国产乱码电影| 一区二区三区精品久久久| 色视频一区二区| 亚洲免费观看在线视频| 一本色道**综合亚洲精品蜜桃冫| 国产精品丝袜一区| 色综合色狠狠综合色| 亚洲天堂2016| 日本韩国一区二区三区视频| 丝袜美腿亚洲色图| 欧美喷水一区二区| 亚洲成人av资源| 日韩视频一区二区| 国内精品不卡在线| 国产精品区一区二区三区| 91在线小视频| 亚洲国产精品自拍| 日韩一区二区免费在线电影| 蜜臀精品一区二区三区在线观看 | 中文字幕乱码日本亚洲一区二区| 成人高清免费观看| 亚洲天天做日日做天天谢日日欢 | 国产精品国产三级国产普通话99| 99久久综合色| 丝袜美腿成人在线| 久久久不卡网国产精品二区| www.视频一区| 午夜久久久影院| 欧美激情在线一区二区三区| 91免费视频网| 蜜桃91丨九色丨蝌蚪91桃色| 欧美国产亚洲另类动漫| 日本道免费精品一区二区三区| 午夜欧美大尺度福利影院在线看| 精品国产免费久久| 色婷婷久久综合| 蜜桃视频一区二区| 1024精品合集| 欧美一二三区在线观看| 9i在线看片成人免费| 日韩不卡一区二区| 国产精品国产三级国产专播品爱网 | 国产精品黄色在线观看| 51精品久久久久久久蜜臀| 黄页视频在线91| 一区二区三区四区激情| 久久尤物电影视频在线观看| 欧美午夜片在线看| 成人av资源在线| 久久精品国产精品青草| 亚洲丝袜自拍清纯另类| 精品不卡在线视频| 欧美三电影在线| 成人免费看片app下载| 免费三级欧美电影| 一区二区三区四区在线免费观看| 日韩欧美亚洲国产另类| 欧美亚洲一区三区| 白白色 亚洲乱淫| 韩国成人在线视频| 偷拍亚洲欧洲综合| 亚洲视频你懂的| 亚洲国产精品国自产拍av| 日韩美女主播在线视频一区二区三区| 在线国产亚洲欧美| 成人av一区二区三区| 韩国女主播成人在线| 日韩国产一二三区| 亚洲第一在线综合网站| 亚洲精品国产一区二区三区四区在线| 久久精品欧美日韩| 久久综合久久久久88| 6080日韩午夜伦伦午夜伦| 欧美色图免费看| 色猫猫国产区一区二在线视频| 国产成人亚洲精品青草天美| 激情伊人五月天久久综合| 美国av一区二区| 免费成人av在线| 久久精品99国产精品| 久久成人免费网| 老司机精品视频导航| 久久99精品视频| 精品综合免费视频观看| 久久99精品国产麻豆婷婷洗澡| 蜜臀国产一区二区三区在线播放| 日韩国产精品久久| 日韩国产欧美在线播放| 蜜臀av亚洲一区中文字幕| 免费欧美在线视频| 麻豆成人综合网| 狠狠色丁香久久婷婷综| 国产精品一区二区你懂的| 成人在线一区二区三区| 成人精品一区二区三区四区 | 日韩你懂的在线播放| 欧美白人最猛性xxxxx69交| 精品国产乱码久久久久久夜甘婷婷 | 亚洲天堂av一区| 夜夜夜精品看看| 人人狠狠综合久久亚洲| 久久av老司机精品网站导航| 激情久久五月天| 成人高清伦理免费影院在线观看| 91色婷婷久久久久合中文| 欧美日韩精品是欧美日韩精品| 欧美精品三级在线观看| 日韩欧美国产综合在线一区二区三区| 2017欧美狠狠色| 亚洲视频资源在线| 亚洲成a人片综合在线| 捆绑调教美女网站视频一区| 美女视频免费一区| 精品无人区卡一卡二卡三乱码免费卡| 久久久久国产精品麻豆| 国产精品成人午夜| 日韩精品亚洲一区| 国产一区在线看| 在线看日韩精品电影| 欧美一区二区黄| 中国色在线观看另类| 亚洲第一福利一区| 国产麻豆日韩欧美久久| 欧美私模裸体表演在线观看| 欧美成人r级一区二区三区| 国产精品青草久久| 石原莉奈一区二区三区在线观看| 国产高清成人在线| 91精选在线观看| 中文字幕中文乱码欧美一区二区| 亚洲线精品一区二区三区八戒| 色综合久久久久久久久久久| 91精品国产色综合久久不卡电影| 欧美国产乱子伦| 亚洲一级不卡视频| 成人丝袜高跟foot| 56国语精品自产拍在线观看| 成人免费一区二区三区视频| 久久精品国产99久久6| 91浏览器入口在线观看| 久久久久久亚洲综合影院红桃| 亚洲福利视频三区| 99久久免费视频.com| 精品国产凹凸成av人导航| 亚洲国产乱码最新视频 | 久久久久国产成人精品亚洲午夜| 亚洲高清免费视频| 99久久精品免费看国产免费软件| 日韩欧美www| 亚洲3atv精品一区二区三区| 97精品国产97久久久久久久久久久久| 欧美大度的电影原声| 日韩av电影免费观看高清完整版在线观看| 成人福利视频在线| 国产欧美精品一区aⅴ影院| 另类人妖一区二区av| 欧美精品色一区二区三区| 亚洲一区二区三区在线播放| 99麻豆久久久国产精品免费优播| 国产欧美日韩另类一区| 国产一区二区三区日韩| 欧美成人a∨高清免费观看| 日韩激情av在线| 欧美老肥妇做.爰bbww| 亚洲午夜久久久久中文字幕久| 91国产丝袜在线播放| 亚洲精品乱码久久久久| 在线免费视频一区二区| 国产寡妇亲子伦一区二区| 日韩精品中文字幕一区二区三区| 三级不卡在线观看| 91精品欧美综合在线观看最新|