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

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

?? main.c

?? OpenBIOS是一個開源的BIOS實現
?? C
字號:
/*  *   Creation Date: <2002/10/02 22:24:24 samuel> *   Time-stamp: <2004/03/27 01:57:55 samuel> *    *	<main.c> *	 *	 *    *   Copyright (C) 2002, 2003, 2004 Samuel Rydh (samuel@ibrium.se) *    *   This program 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 *    */#include "openbios/config.h"#include "openbios/bindings.h"#include "openbios/elfload.h"#include "openbios/nvram.h"#include "libc/diskio.h"#include "libc/vsprintf.h"#include "mol/mol.h"#include "ofmem.h"#include "osi_calls.h"#include "ablk_sh.h"#include "boothelper_sh.h"static void	patch_newworld_rom( char *start, size_t size );static void	newworld_timer_hack( char *start, size_t size );static voidtransfer_control_to_elf( ulong entry ){	extern void call_elf( ulong entry );	printk("Starting ELF boot loader\n");	call_elf( entry );	fatal_error("call_elf returned unexpectedly\n");}static intload_elf_rom( ulong *entry, int fd ){	int i, lszz_offs, elf_offs;	char buf[128], *addr;	Elf_ehdr ehdr;	Elf_phdr *phdr;	size_t s;	printk("Loading '%s' from '%s'\n", get_file_path(fd),	       get_volume_name(fd) );	/* the ELF-image (usually) starts at offset 0x4000 */	if( (elf_offs=find_elf(fd)) < 0 ) {		printk("----> %s is not an ELF image\n", buf );		exit(1);	}	if( !(phdr=elf_readhdrs(fd, elf_offs, &ehdr)) )		fatal_error("elf_readhdrs failed\n");	*entry = ehdr.e_entry;	/* load segments. Compressed ROM-image assumed to be located immediately	 * after the last segment */	lszz_offs = elf_offs;	for( i=0; i<ehdr.e_phnum; i++ ) {		/* p_memsz, p_flags */		s = MIN( phdr[i].p_filesz, phdr[i].p_memsz );		seek_io( fd, elf_offs + phdr[i].p_offset );		/* printk("filesz: %08lX memsz: %08lX p_offset: %08lX p_vaddr %08lX\n", 		   phdr[i].p_filesz, phdr[i].p_memsz, phdr[i].p_offset,		   phdr[i].p_vaddr ); */		if( phdr[i].p_vaddr != phdr[i].p_paddr )			printk("WARNING: ELF segment virtual addr != physical addr\n");		lszz_offs = MAX( lszz_offs, elf_offs + phdr[i].p_offset + phdr[i].p_filesz );		if( !s )			continue;		if( ofmem_claim( phdr[i].p_vaddr, phdr[i].p_memsz, 0 ) == -1 )			fatal_error("Claim failed!\n");		addr = (char*)phdr[i].p_vaddr;		if( read_io(fd, addr, s) != s )			fatal_error("read failed\n");		/* patch CODE segment */		if( *entry >= phdr[i].p_vaddr && *entry < phdr[i].p_vaddr + s ) {			patch_newworld_rom( (char*)phdr[i].p_vaddr, s );			newworld_timer_hack( (char*)phdr[i].p_vaddr, s );		}		flush_icache_range( addr, addr+s );		/* printk("ELF ROM-section loaded at %08lX (size %08lX)\n", 		   (ulong)phdr[i].p_vaddr, (ulong)phdr[i].p_memsz );*/	}	free( phdr );	return lszz_offs;}/************************************************************************//*	newworld ROM loading						*//************************************************************************/#define ROM_BASE	0x1100000		/* where we decide to put things *//* fix bug present in the 2.4 and the 3.0 Apple ROM */static voidpatch_newworld_rom( char *start, size_t size ){	int s;	ulong mark[] = { 0x7c7d1b78, 		/* mr r29,r3 */			 0x7c9c2378,		/* mr r28,r4 */			 0x7cc33378,		/* mr r3,r6 */			 0x7c864214,		/* add r4,r6,r8   <------ BUG -- */			 0x80b10000,		/* lwz r5,0(r17) */			 0x38a500e8 };		/* addi r5,r5,232 */	/* Correcting add r4,r6,r8  ---->  addi r4,r6,8 */	for( s=0; s<size-sizeof(mark); s+=4 )		if( memcmp( start+s, mark, sizeof(mark)) == 0 ) {			printk("FIXING ROM BUG @ %X!\n", s+12);			((ulong*)(start+s))[3] = 0x38860008;	/* addi r4,r6,8 */		}}/* This hack is only needed on machines with a timebase slower than 12.5 MHz * (50 MHz bus frequency). Typically only old, accelerated machines fall * into this category. The cause of the problem is an overflow in Apple's * calibration routine. */static voidnewworld_timer_hack( char *start, size_t size ){	int s;	ulong mark[] = { 0x7d0000a6, 0x5507045e, 0x7ce00124, 0x4c00012c,			 0x38e00000, 0x3c80000f, 0x6084ffff, 0x98830c00,			 0x7c0006ac, 0x98830a00, 0x7c0006ac, 0x7c9603a6,			 0x4c00012c, 0x7cb602a6, 0x2c050000, 0x4181fff8,			 0x7c0004ac, 0x88830a00, 0x7c0006ac, 0x88a30800,			 0x7c0006ac, 0x88c30a00, 0x7c0006ac, 0x7c043040,			 0x40a2ffe4, 0x5085442e, 0x7ca500d0, 0x54a5043e,			 0x7c053840, 0x7ca72b78, 0x4082ff9c, 0x7ca32b78,			 0x7d000124, 0x4c00012c, 0x4e800020	};	/* return #via ticks corresponding to 0xfffff DEC ticks (VIA frequency == 47/60 MHz) */	for( s=0; s < size-sizeof(mark); s+=4 ) {		if( !memcmp( start+s, mark, sizeof(mark)) ) {			extern char timer_calib_start[], timer_calib_end[];			extern ulong nw_dec_calibration;			int hz = OSI_UsecsToMticks(1000);			nw_dec_calibration = OSI_MticksToUsecs(0xfffff*47)/60;			memcpy( start + s, timer_calib_start, timer_calib_end - timer_calib_start );			printk("Timer calibration fix: %d.%02d MHz [%ld]\n", 			       hz/1000, (hz/10)%100, nw_dec_calibration );			break;		}	}}static ulongload_newworld_rom( int fd ){	int lszz_offs, lszz_size;	ulong entry, data[2];	phandle_t ph;		lszz_offs = load_elf_rom( &entry, fd );	seek_io( fd, -1 );	lszz_size = tell(fd) - lszz_offs;	seek_io( fd, lszz_offs );	/* printk("Compressed ROM image: offset %08X, size %08X loaded at %08x\n", 	   lszz_offs, lszz_size, ROM_BASE ); */	if( ofmem_claim(ROM_BASE, lszz_size, 0) == -1 )		fatal_error("Claim failure (lszz)!\n");		read_io( fd, (char*)ROM_BASE, lszz_size );		/* Fix the /rom/macos/AAPL,toolbox-image,lzss property (phys, size) */#if 0	if( (ph=prom_create_node("/rom/macos/")) == -1 )		fatal_error("Failed creating /rom/macos/");#else	ph = find_dev("/rom/macos");#endif	data[0] = ROM_BASE;	data[1] = lszz_size;	set_property( ph, "AAPL,toolbox-image,lzss", (char*)data, sizeof(data) );	/* The 7.8 rom (MacOS 9.2) uses AAPL,toolbox-parcels instead of 	 * AAPL,toolbox-image,lzss. It probably doesn't hurt to have it	 * always present (we don't have an easy way to determine ROM version...)	 */	set_property( ph, "AAPL,toolbox-parcels", (char*)data, sizeof(data) );	return entry;}static intsearch_nwrom( int fd, int fast ){	char *s, buf[128];	int found = 0;		if( fast ) {		int ind;		found = !reopen( fd, "\\\\:tbxi" );		for( ind=0; !found && (s=BootHGetStrResInd("macos_rompath", buf, sizeof(buf), ind++, 0)) ; )			found = !reopen( fd, s );		for( ind=0; !found && (s=BootHGetStrResInd("macos_rompath_", buf, sizeof(buf), ind++, 0)) ; )			found = !reopen( fd, s );	} else {		printk("Searching %s for a 'Mac OS ROM' file\n", get_volume_name(fd) );		if( !(found=reopen_nwrom(fd)) ) {			printk(" \n**** HINT ***************************************************\n");			printk("*  The booting can be speeded up by adding the line\n");			printk("*      macos_rompath: '%s'\n", get_file_path(fd) );			printk("*  to the /etc/mol/molrc.macos (recommended).\n");			printk("*************************************************************\n \n");		}	}	return found;}static voidencode_bootpath( const char *spec, const char *args ){	phandle_t chosen_ph = find_dev("/chosen");	set_property( chosen_ph, "bootpath", spec, strlen(spec)+1 );		set_property( chosen_ph, "bootargs", args, strlen(args)+1 );	}static char *newworld_load( const char *node_path, const char *spec, int do_search ){	char *p, *entry, buf[80];	int fd, len;	if( (fd=open_io(spec)) == -1 )		return NULL;	if( !search_nwrom(fd, do_search) ) {		close_io(fd);		return NULL;	}	printk("Boot Disk: %s [%s]\n", spec, get_fstype(fd) );	entry = (char*)load_newworld_rom( fd );#if 1	PUSH_ih( get_ih_from_fd(fd) );	fword("get-instance-path");	len = POP();	p = (char*)POP();	buf[0] = 0;	if( len < sizeof(buf) ) {		memcpy( buf, p, len );		buf[len] =0;	}	strcat( buf, "/x@:" );	printk("boot_path: %s\n", buf );	encode_bootpath( buf, "" );#endif	close_io( fd );	return entry;}static voidnewworld_startup( void ){	int i, j, bootunit, type, fd;	ablk_disk_info_t info;	char *entry = NULL;	char spec[80];	phandle_t ph;	char path[]="/pci/pci-bridge/mol-blk";	if( !(ph=find_dev(path)) )		fatal_error("MOLBlockDriver node not found\n");	/* user-specified newworld ROMs take precedence */	if( (fd=open_io("pseudo:,nwrom")) >= 0 ) {		entry = (char*)load_newworld_rom( fd );		close_io( fd );	}	/* determine boot volume */	for( bootunit=-1, type=0; bootunit==-1 && type<3 ; type++ ) {		for( i=0; !OSI_ABlkDiskInfo(0, i, &info) ; i++ ) {			if( type<=1 && !(info.flags & ABLK_BOOT_HINT) )				continue;			if( type>1 && (info.flags & ABLK_BOOT_HINT) )				continue;			for( j=0; !entry && j<32; j++ ) {				sprintf( spec, "%s/disk@%x:%d", path, i, j );				entry = newworld_load( path, spec, (!type || type==2) );			}			if( entry ) {				bootunit = i;				break;			}		}	}	if( entry ) {		OSI_ABlkBlessDisk( 0 /*channel*/, bootunit );		update_nvram();		transfer_control_to_elf( (ulong)entry );		/* won't come here */		return;	}	printk("\n--- No bootable disk was found! -----------------------------\n");	printk("If this is an oldworld machine, try booting from the MacOS\n");	printk("install CD and install MacOS from within MOL.\n");	printk("-------------------------------------------------------------\n");	exit(1);}/************************************************************************//*	yaboot booting							*//************************************************************************/static voidyaboot_startup( void ){	const char *paths[] = { "pseudo:,ofclient", "pseudo:,yaboot", NULL };	ulong entry;	int i, fd;	for( i=0; paths[i]; i++ ) {		if( (fd=open_io(paths[i])) == -1 )			continue;		(void) load_elf_rom( &entry, fd );		close_io( fd );		encode_bootpath( paths[i], "" );		update_nvram();		transfer_control_to_elf( entry );		/* won't come here */	}	printk("*** Boot failure! No secondary bootloader specified ***\n");	exit(1);}/************************************************************************//*	entry								*//************************************************************************/voidboot( void ){	fword("update-chosen");	if( find_dev("/mol-platform") )		yaboot_startup();	else		newworld_startup();}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久精品| 欧美国产欧美综合| 在线影视一区二区三区| 色久优优欧美色久优优| 中文天堂在线一区| 亚洲人成网站影音先锋播放| 一片黄亚洲嫩模| 香蕉影视欧美成人| 美腿丝袜一区二区三区| 国产精品影视网| 色域天天综合网| 欧美成人一级视频| 国产精品妹子av| av福利精品导航| 欧美主播一区二区三区| 久久亚洲综合av| 亚洲电影中文字幕在线观看| 国产成人av电影| 欧美日韩国产综合一区二区三区| 欧美一区二区三区免费| 久久99深爱久久99精品| 91捆绑美女网站| 国产精品丝袜久久久久久app| 成人午夜短视频| 日韩三级视频在线观看| 亚洲第一福利一区| 欧美成人性战久久| 成人高清免费观看| 精品国产不卡一区二区三区| 日韩av不卡在线观看| 日本高清视频一区二区| 舔着乳尖日韩一区| 欧美影片第一页| 亚洲精选免费视频| 91捆绑美女网站| 久久99这里只有精品| 中文字幕一区二区三区四区| 男人的天堂亚洲一区| 91精品国产高清一区二区三区| 国产精品资源在线| 亚洲韩国精品一区| 日本一区二区在线不卡| 国产又黄又大久久| 久久综合久久综合久久| 91成人免费在线视频| 国产精品99久久久久| 亚洲成人自拍网| 国产精品久久影院| 色噜噜狠狠色综合中国| 久久国内精品自在自线400部| 亚洲色欲色欲www| 色综合久久久久综合体| 国内成人免费视频| 国产精品美女久久久久久| 欧美电影免费观看高清完整版在线| 国内精品国产成人| 久久66热偷产精品| 久久精品夜色噜噜亚洲a∨| 成人深夜福利app| 国产精品系列在线播放| 久久国产精品99久久人人澡| 亚洲v中文字幕| 亚洲免费在线视频一区 二区| 国产嫩草影院久久久久| 久久精品欧美日韩| 精品国产免费一区二区三区四区 | 日本精品一级二级| 色噜噜夜夜夜综合网| 色激情天天射综合网| 色婷婷狠狠综合| 色猫猫国产区一区二在线视频| 97se亚洲国产综合在线| 奇米一区二区三区| 青青草国产成人av片免费| 久久国产尿小便嘘嘘| 国内一区二区视频| 国产综合一区二区| 国产精品99久久久久久久vr| 国产激情偷乱视频一区二区三区| 一区二区三区高清| 五月天激情小说综合| 青青草成人在线观看| 精品影院一区二区久久久| 国内精品伊人久久久久av影院 | 亚洲色图丝袜美腿| 亚洲第一电影网| 日韩高清不卡一区二区三区| 激情综合色播激情啊| av色综合久久天堂av综合| 欧美视频在线一区二区三区| 欧美成人官网二区| 国产精品乱码久久久久久| 亚洲国产人成综合网站| 激情六月婷婷综合| 色综合久久88色综合天天| 精品女同一区二区| 亚洲男人天堂一区| 精品影视av免费| 欧美优质美女网站| 久久免费看少妇高潮| 91精品一区二区三区久久久久久 | 精品久久国产字幕高潮| 亚洲精品美国一| 国产一区二区导航在线播放| 一本到高清视频免费精品| 日韩精品一区二区三区蜜臀 | 欧美日韩国产影片| 中文字幕国产一区| 麻豆成人在线观看| 欧美日韩一级片网站| 欧美日韩国产乱码电影| 亚洲色图视频免费播放| 国产美女视频91| 欧美久久久久久久久中文字幕| 51久久夜色精品国产麻豆| 亚洲另类一区二区| 国产69精品久久久久毛片| 精品国产人成亚洲区| 青娱乐精品在线视频| 欧美日韩一区二区三区不卡| 亚洲一区二区精品久久av| 国产欧美精品日韩区二区麻豆天美| 日韩美女视频一区二区| 国产伦精品一区二区三区免费迷 | 日韩视频一区二区三区在线播放 | 亚洲电影一级片| 色诱亚洲精品久久久久久| 中文字幕在线不卡一区二区三区| 国产精品123| 国产喂奶挤奶一区二区三区| 国产盗摄视频一区二区三区| 久久久噜噜噜久久人人看| 国产一区二区三区不卡在线观看 | 欧美日本在线看| 日日摸夜夜添夜夜添精品视频 | 欧美日韩免费高清一区色橹橹| 亚洲精品日韩一| 欧美日韩高清一区二区不卡| 午夜激情久久久| 欧美一卡2卡3卡4卡| 丝袜美腿亚洲一区| 欧美岛国在线观看| 国产成人精品在线看| 中文字幕日韩一区二区| 色婷婷av一区二区三区软件| 午夜欧美在线一二页| 日韩精品一区二区三区四区视频| 丁香激情综合国产| 亚洲综合色婷婷| www国产精品av| 一本色道久久综合亚洲91| 日本午夜精品一区二区三区电影| 久久亚区不卡日本| 欧美色综合久久| 懂色一区二区三区免费观看 | 一区二区三区中文字幕| 精品国产制服丝袜高跟| 91麻豆成人久久精品二区三区| 免费观看日韩电影| 亚洲精品中文在线观看| 精品国精品自拍自在线| 精品视频免费看| 不卡的av电影| 国产伦精一区二区三区| 五月天婷婷综合| 亚洲欧美国产77777| 日本一区免费视频| 精品国产一区二区在线观看| 欧美性高清videossexo| 成人午夜视频在线观看| 国产一区久久久| 午夜精品久久一牛影视| 中文字幕乱码亚洲精品一区| 亚洲精品一区二区精华| 欧美日韩亚洲不卡| 在线精品视频一区二区| jvid福利写真一区二区三区| 国产成人欧美日韩在线电影| 日本视频一区二区三区| 午夜免费欧美电影| 香蕉久久一区二区不卡无毒影院| 亚洲另类一区二区| 亚洲女同女同女同女同女同69| 国产欧美一区二区精品性色| 精品免费国产二区三区| 日韩欧美亚洲国产另类| 欧美一级电影网站| 精品国产亚洲在线| 国产喂奶挤奶一区二区三区 | 国产综合色在线| 国产乱码精品一区二区三区忘忧草| 老司机精品视频一区二区三区| 免费观看一级特黄欧美大片| 免费成人av在线| 国产一区二区三区综合| 国产成人亚洲综合a∨猫咪| 成人深夜福利app| 欧洲av一区二区嗯嗯嗯啊| 欧美日产在线观看| 国产婷婷色一区二区三区在线|