⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setup.s

📁 linux1.1源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	inc	dx	in	al,dx	cmp	al,#0x20	je	isahed	cmp	al,#0x21	jne	noahedisahed:	lea	si,dscahead	lea	di,moahead	br	selmodnoahed:	mov	dx,#0x3c3		! Check Chips & Tech. 'clues'	in	al,dx	or	al,#0x10	out	dx,al	mov	dx,#0x104			in	al,dx	mov	bl,al	mov	dx,#0x3c3	in	al,dx	and	al,#0xef	out	dx,al	cmp	bl,[idcandt]	jne	nocant	lea	si,dsccandt	lea	di,mocandt	br	selmodnocant:	mov	dx,#0x3d4		! Check Cirrus 'clues'	mov	al,#0x0c	out	dx,al	inc	dx	in	al,dx	mov	bl,al	xor	al,al	out	dx,al	dec	dx	mov	al,#0x1f	out	dx,al	inc	dx	in	al,dx	mov	bh,al	xor	ah,ah	shl	al,#4	mov	cx,ax	mov	al,bh	shr	al,#4	add	cx,ax	shl	cx,#8	add	cx,#6	mov	ax,cx	mov	dx,#0x3c4	out	dx,ax	inc	dx	in	al,dx	and	al,al	jnz	nocirr	mov	al,bh	out	dx,al	in	al,dx	cmp	al,#0x01	jne	nocirr	call	rst3d4		lea	si,dsccirrus	lea	di,mocirrus	br	selmodrst3d4:	mov	dx,#0x3d4	mov	al,bl	xor	ah,ah	shl	ax,#8	add	ax,#0x0c	out	dx,ax	ret	nocirr:	call	rst3d4			! Check Everex 'clues'	mov	ax,#0x7000	xor	bx,bx	int	0x10	cmp	al,#0x70	jne	noevrx	shr	dx,#4	cmp	dx,#0x678	je	istrid	cmp	dx,#0x236	je	istrid	lea	si,dsceverex	lea	di,moeverex	br	selmodistrid:	lea	cx,ev2tri	jmp	cxnoevrx:	lea	si,idgenoa		! Check Genoa 'clues'	xor 	ax,ax	seg es	mov	al,[0x37]	mov	di,ax	mov	cx,#0x04	dec	si	dec	dil1:	inc	si	inc	di	mov	al,(si)	test	al,al	jz	l2	seg es	cmp	al,(di)l2:	loope 	l1	cmp	cx,#0x00	jne	nogen	lea	si,dscgenoa	lea	di,mogenoa	br	selmodnogen:	cld	lea	si,idoakvga	mov	di,#0x08	mov	cx,#0x08	repe	cmpsb	jne	nooak	lea	si,dscoakvga	lea	di,mooakvga	br	selmodnooak:	cld	lea	si,idparadise		! Check Paradise 'clues'	mov	di,#0x7d	mov	cx,#0x04	repe	cmpsb	jne	nopara	lea	si,dscparadise	lea	di,moparadise	br	selmodnopara:	mov	dx,#0x3c4		! Check Trident 'clues'	mov	al,#0x0e	out	dx,al	inc	dx	in	al,dx	xchg	ah,al	xor	al,al	out	dx,al	in	al,dx	xchg	al,ah	mov	bl,al		! Strange thing ... in the book this wasn't	and	bl,#0x02	! necessary but it worked on my card which	jz	setb2		! is a trident. Without it the screen goes	and	al,#0xfd	! blurred ...	jmp	clrb2		!setb2:	or	al,#0x02	!clrb2:	out	dx,al	and	ah,#0x0f	cmp	ah,#0x02	jne	notridev2tri:	lea	si,dsctrident	lea	di,motrident	jmp	selmodnotrid:	mov	dx,#0x3cd		! Check Tseng 'clues'	in	al,dx			! Could things be this simple ! :-)	mov	bl,al	mov	al,#0x55	out	dx,al	in	al,dx	mov	ah,al	mov	al,bl	out	dx,al	cmp	ah,#0x55 	jne	notsen	lea	si,dsctseng	lea	di,motseng	jmp	selmodnotsen:	mov	dx,#0x3cc		! Check Video7 'clues'	in	al,dx	mov	dx,#0x3b4	and	al,#0x01	jz	even7	mov	dx,#0x3d4even7:	mov	al,#0x0c	out	dx,al	inc	dx	in	al,dx	mov	bl,al	mov	al,#0x55	out	dx,al	in	al,dx	dec	dx	mov	al,#0x1f	out	dx,al	inc	dx	in	al,dx	mov	bh,al	dec	dx	mov	al,#0x0c	out	dx,al	inc	dx	mov	al,bl	out	dx,al	mov	al,#0x55	xor	al,#0xea	cmp	al,bh	jne	novid7	lea	si,dscvideo7	lea	di,movideo7	jmp	selmodnovid7:	lea	si,dsunknown	lea	di,mounknownselmod:	xor	cx,cx	mov	cl,(di)	mov	ax,modesave	cmp	ax,#ASK_VGA	je	askmod	cmp	ax,#NORMAL_VGA	je	askmod	cmp	al,cl	jl	gotmode	push	si	lea	si,msg4	call	prtstr	pop	siaskmod:	push	si	lea	si,msg2	call	prtstr	pop	si	push	si	push	cxtbl:	pop	bx	push	bx	mov	al,bl	sub	al,cl	call	modepr	lodsw	xchg	al,ah	call	dprnt	xchg	ah,al	push	ax	mov	al,#0x78	call	prnt1	pop	ax	call	dprnt	push	si	lea	si,crlf		! print CR+LF	call	prtstr	pop	si	loop	tbl	pop	cx	lea	si,msg3	call	prtstr	pop	si	add	cl,#0x30	jmp	nonumnonumb:	call	beepnonum:	call	getkey	cmp	al,#0x30	! ascii `0'	jb	nonumb	cmp	al,#0x3a	! ascii `9'	jbe	number	cmp	al,#0x61	! ascii `a'	jb	nonumb	cmp	al,#0x7a	! ascii `z'	ja	nonumb	sub	al,#0x27	cmp	al,cl	jae	nonumb	sub	al,#0x30	jmp	gotmodenumber: cmp	al,cl	jae	nonumb	sub	al,#0x30gotmode:	xor	ah,ah	or	al,al	beq	vga50	push	ax	dec	ax	beq	vga28	add	di,ax	mov	al,(di)	int 	0x10	pop	ax	shl	ax,#1	add	si,ax	lodsw	pop	ds	ret! Routine to print asciiz-string at DS:SIprtstr:	lodsb	and	al,al	jz	fin	call	prnt1	jmp	prtstrfin:	ret! Routine to print a decimal value on screen, the value to be! printed is put in al (i.e 0-255). dprnt:	push	ax	push	cx	xor	ah,ah		! Clear ah	mov	cl,#0x0a	idiv	cl	cmp	al,#0x09	jbe	lt100	call	dprnt	jmp	skip10lt100:	add	al,#0x30	call	prnt1skip10:	mov	al,ah	add	al,#0x30	call	prnt1		pop	cx	pop	ax	ret!! Routine to print the mode number key on screen. Mode numbers! 0-9 print the ascii values `0' to '9', 10-35 are represented by! the letters `a' to `z'. This routine prints some spaces around the! mode no.!modepr:	push	ax	cmp	al,#0x0a	jb	digit		! Here is no check for number > 35	add	al,#0x27digit:	add	al,#0x30	mov	modenr, al	push 	si	lea	si, modestring	call	prtstr	pop	si	pop	ax	ret! Part of above routine, this one just prints ascii alprnt1:	push	ax	push	cx	xor	bh,bh	mov	cx,#0x01	mov	ah,#0x0e	int	0x10	pop	cx	pop	ax	retbeep:	mov	al,#0x07	jmp	prnt1	gdt:	.word	0,0,0,0		! dummy	.word	0,0,0,0		! unused	.word	0x07FF		! 8Mb - limit=2047 (2048*4096=8Mb)	.word	0x0000		! base address=0	.word	0x9A00		! code read/exec	.word	0x00C0		! granularity=4096, 386	.word	0x07FF		! 8Mb - limit=2047 (2048*4096=8Mb)	.word	0x0000		! base address=0	.word	0x9200		! data read/write	.word	0x00C0		! granularity=4096, 386idt_48:	.word	0			! idt limit=0	.word	0,0			! idt base=0Lgdt_48:	.word	0x800		! gdt limit=2048, 256 GDT entries	.word	512+gdt,0x9	! gdt base = 0X9xxxxmsg1:		.ascii	"Press <RETURN> to see SVGA-modes available, <SPACE> to continue or wait 30 secs."		db	0x0d, 0x0a, 0x0a, 0x00msg2:		.ascii	"Mode:  COLSxROWS:"		db	0x0d, 0x0a, 0x0a, 0x00msg3:		db	0x0d, 0x0a		.ascii	"Choose mode by pressing the corresponding number or letter."crlf:		db	0x0d, 0x0a, 0x00msg4:		.ascii	"You passed an undefined mode number to setup. Please choose a new mode."		db	0x0d, 0x0a, 0x0a, 0x07, 0x00modestring:	.ascii	"   "modenr:		db	0x00	! mode number		.ascii	":    "		db	0x00		idati:		.ascii	"761295520"idcandt:	.byte	0xa5idgenoa:	.byte	0x77, 0x00, 0x99, 0x66idparadise:	.ascii	"VGA="idoakvga:	.ascii  "OAK VGA "idf1280:	.ascii	"Orchid Technology Fahrenheit 1280"id9GXE:		.ascii  "Graphics Power By"idVRAM:		.ascii	"Stealth VRAM"! Manufacturer:	  Numofmodes+2:	Mode:! Number of modes is the number of chip-specific svga modes plus the extended! modes available on any vga (currently 2)moati:		.byte	0x04,	0x23, 0x33 moahead:	.byte	0x07,	0x22, 0x23, 0x24, 0x2f, 0x34mocandt:	.byte	0x04,	0x60, 0x61mocirrus:	.byte	0x06,	0x1f, 0x20, 0x22, 0x31moeverex:	.byte	0x0c,	0x03, 0x04, 0x07, 0x08, 0x0a, 0x0b, 0x16, 0x18, 0x21, 0x40mogenoa:	.byte	0x0c,	0x58, 0x5a, 0x60, 0x61, 0x62, 0x63, 0x64, 0x72, 0x74, 0x78moparadise:	.byte	0x04,	0x55, 0x54motrident:	.byte	0x09,	0x50, 0x51, 0x52, 0x57, 0x58, 0x59, 0x5amotseng:	.byte	0x07,	0x26, 0x2a, 0x23, 0x24, 0x22movideo7:	.byte	0x08,	0x40, 0x43, 0x44, 0x41, 0x42, 0x45mooakvga:	.byte   0x08,   0x00, 0x07, 0x4e, 0x4f, 0x50, 0x51mo9GXE:		.byte	0x04,	0x54, 0x55mof1280:	.byte	0x04,	0x54, 0x55mounknown:	.byte	0x02!			msb = Cols lsb = Rows:! The first two modes are standard vga modes available on any vga.! mode 0 is 80x50 and mode 1 is 80x28dscati:		.word	0x5032, 0x501c, 0x8419, 0x842cdscahead:	.word	0x5032, 0x501c, 0x842c, 0x8419, 0x841c, 0xa032, 0x5042dsccandt:	.word	0x5032, 0x501c, 0x8419, 0x8432dsccirrus:	.word	0x5032, 0x501c, 0x8419, 0x842c, 0x841e, 0x6425dsceverex:	.word	0x5032, 0x501c, 0x5022, 0x503c, 0x642b, 0x644b, 0x8419, 0x842c, 0x501e, 0x641b, 0xa040, 0x841edscgenoa:	.word	0x5032, 0x501c, 0x5020, 0x642a, 0x8419, 0x841d, 0x8420, 0x842c, 0x843c, 0x503c, 0x5042, 0x644bdscparadise:	.word	0x5032, 0x501c, 0x8419, 0x842bdsctrident:	.word 	0x5032, 0x501c, 0x501e, 0x502b, 0x503c, 0x8419, 0x841e, 0x842b, 0x843cdsctseng:	.word	0x5032, 0x501c, 0x503c, 0x6428, 0x8419, 0x841c, 0x842cdscvideo7:	.word	0x5032, 0x501c, 0x502b, 0x503c, 0x643c, 0x8419, 0x842c, 0x841cdscoakvga:	.word   0x5032, 0x501c, 0x2819, 0x5019, 0x503c, 0x843c, 0x8419, 0x842bdscf1280:	.word	0x5032, 0x501c, 0x842b, 0x8419dsc9GXE:	.word	0x5032, 0x501c, 0x842b, 0x8419dsunknown:	.word	0x5032, 0x501cmodesave:	.word	SVGA_MODE	.textendtext:.dataenddata:.bssendbss:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -