plan 9 kernel history: overview | file list | diff list

1993/0915/pc/l.s (diff list | history)

1993/0224/sys/src/9/pc/l.s:1,891993/0915/sys/src/9/pc/l.s:1,16 (short | long | prev | next)
Import from Plan 9 to Brazil.

Remove #ifdef'ed code from b.com.
Cut back from mapping initial 16 MB to 4 MB.
Move tpt as a result of using fewer page table pages.
Brazil: u becomes up.
Add inl and outl.
Add NOPs in interrupt handler (timing?).
Add dspoutb.

rsc Fri Mar 4 12:44:25 2005

1991/0625    
#include "mem.h" 
1991/0614    
 
1991/0809    
#define OP16	BYTE	$0x66 
1993/0915    
#define NOP	XCHGL	AX,AX 
1991/0809    
 
1991/0626    
/* 
1991/0629    
 *	about to walk all over ms/dos - turn off interrupts 
1993/0915    
 *	We assume that b.com got us into 32 bit mode already.  We are now 
 *	running with a PC == origin & ~KZERO. 
1991/0614    
 */ 
1991/0702    
TEXT	origin(SB),$0 
 
1991/0629    
	CLI 
1991/0625    
 
1991/0715    
#ifdef BOOT 
1991/0629    
/* 
1991/0720    
 *	This part of l.s is used only in the boot kernel. 
 *	It assumes that we are in real address mode, i.e., 
 *	that we look like an 8086. 
 */ 
/* 
1991/0715    
 *	relocate everything to a half meg and jump there 
1991/0629    
 *	- looks wierd because it is being assembled by a 32 bit 
 *	  assembler for a 16 bit world 
 */ 
	MOVL	$0,BX 
	INCL	BX 
1991/0715    
	SHLL	$15,BX 
1991/0629    
	MOVL	BX,CX 
1991/0715    
	MOVW	BX,ES 
1991/0629    
	MOVL	$0,SI 
	MOVL	SI,DI 
1991/1211    
	CLD; REP; MOVSL 
1991/0715    
/*	JMPFAR	0X8000:$lowcore(SB) /**/ 
1991/0629    
	 BYTE	$0xEA 
1991/0715    
	 WORD	$lowcore(SB) 
	 WORD	$0X8000 
1991/0625    
                 
1991/0629    
TEXT	lowcore(SB),$0 
1991/0625    
                 
1991/0629    
/* 
 *	now that we're in low core, update the DS 
 */ 
                 
	MOVW	BX,DS 
                 
/* 
 * 	goto protected mode 
 */ 
/*	MOVL	tgdtptr(SB),GDTR /**/ 
	 BYTE	$0x0f 
	 BYTE	$0x01 
	 BYTE	$0x16 
1991/0715    
	 WORD	$tgdtptr(SB) 
1991/0627    
	MOVL	CR0,AX 
	ORL	$1,AX 
	MOVL	AX,CR0 
                 
/* 
1992/0425    
 *	clear prefetch queue (weird code to avoid optimizations) 
1991/0627    
 */ 
1991/0629    
	CLC 
	JCC	flush 
	MOVL	AX,AX 
1991/0627    
flush: 
1991/0629    
                 
/* 
 *	set all segs 
 */ 
/*	MOVW	$SELECTOR(1, SELGDT, 0),AX	/**/ 
	 BYTE	$0xc7 
	 BYTE	$0xc0 
	 WORD	$SELECTOR(1, SELGDT, 0) 
1991/0627    
	MOVW	AX,DS 
	MOVW	AX,SS 
1991/0629    
	MOVW	AX,ES 
1991/1214    
	MOVW	AX,FS 
	MOVW	AX,GS 
1991/0627    
                 
1991/0706    
/*	JMPFAR	SELECTOR(2, SELGDT, 0):$mode32bit(SB) /**/ 
1991/0715    
	 BYTE	$0x66 
1991/0629    
	 BYTE	$0xEA 
1991/0715    
	 LONG	$mode32bit-KZERO(SB) 
1991/0629    
	 WORD	$SELECTOR(2, SELGDT, 0) 
1991/0627    
                 
1991/0629    
TEXT	mode32bit(SB),$0 
1991/0715    
                 
#endif BOOT 
1991/0629    
                 
	/* 
	 * Clear BSS 
	 */ 
1993/0224/sys/src/9/pc/l.s:104,1111993/0915/sys/src/9/pc/l.s:31,38
1991/0710    
	LEAL	tpt-KZERO(SB),AX	/* get phys addr of temporary page table */ 
	ADDL	$(BY2PG-1),AX		/* must be page alligned */ 
	ANDL	$(~(BY2PG-1)),AX	/* ... */ 
1991/0711    
	MOVL	$(4*1024),CX		/* pte's per page */ 
	MOVL	$((((4*1024)-1)<<PGSHIFT)|PTEVALID|PTEKERNEL|PTEWRITE),BX 
1993/0915    
	MOVL	$(1024),CX		/* pte's per page */ 
	MOVL	$((((1024)-1)<<PGSHIFT)|PTEVALID|PTEKERNEL|PTEWRITE),BX 
1991/0710    
setpte: 
	MOVL	BX,-4(AX)(CX*4) 
1991/0711    
	SUBL	$(1<<PGSHIFT),BX 
1993/0224/sys/src/9/pc/l.s:116,1341993/0915/sys/src/9/pc/l.s:43,52
1991/0711    
	 *  16 meg of memory to 0 thru 16meg and to KZERO thru KZERO+16meg 
1991/0710    
	 */ 
	MOVL	AX,BX 
1991/0711    
	ADDL	$(4*BY2PG),AX 
1993/0915    
	ADDL	$(BY2PG),AX 
1991/0711    
	ADDL	$(PTEVALID|PTEKERNEL|PTEWRITE),BX 
1991/0710    
	MOVL	BX,0(AX) 
1991/0711    
	MOVL	BX,((((KZERO>>1)&0x7FFFFFFF)>>(2*PGSHIFT-1-4))+0)(AX) 
	ADDL	$BY2PG,BX 
	MOVL	BX,4(AX) 
	MOVL	BX,((((KZERO>>1)&0x7FFFFFFF)>>(2*PGSHIFT-1-4))+4)(AX) 
	ADDL	$BY2PG,BX 
	MOVL	BX,8(AX) 
	MOVL	BX,((((KZERO>>1)&0x7FFFFFFF)>>(2*PGSHIFT-1-4))+8)(AX) 
	ADDL	$BY2PG,BX 
	MOVL	BX,12(AX) 
	MOVL	BX,((((KZERO>>1)&0x7FFFFFFF)>>(2*PGSHIFT-1-4))+12)(AX) 
1991/0710    
 
	/* 
	 *  point processor to top level page & turn on paging 
1993/0224/sys/src/9/pc/l.s:155,1611993/0915/sys/src/9/pc/l.s:73,79
1991/0629    
	MOVL	SP,m(SB) 
	MOVL	$0,0(SP) 
	ADDL	$(MACHSIZE-4),SP	/* start stack under machine struct */ 
	MOVL	$0, u(SB) 
1993/0915    
	MOVL	$0, up(SB) 
1991/0622    
 
1991/1211    
	/* 
	 *  clear flags 
1993/0224/sys/src/9/pc/l.s:172,1781993/0915/sys/src/9/pc/l.s:90,96
1991/0629    
GLOBL	mach0+0(SB), $MACHSIZE 
GLOBL	u(SB), $4 
GLOBL	m(SB), $4 
1991/0711    
GLOBL	tpt(SB), $(BY2PG*6) 
1993/0915    
GLOBL	tpt(SB), $(BY2PG*3) 
1991/0702    
 
/* 
 *  gdt to get us to 32-bit/segmented/unpaged mode 
1993/0224/sys/src/9/pc/l.s:251,2571993/0915/sys/src/9/pc/l.s:169,174
1992/0922    
	OP16; INL 
1992/0911    
	RET 
 
                 
/* 
1991/0809    
 *  input a string of shorts from a port 
 */ 
1993/0224/sys/src/9/pc/l.s:264,2691993/0915/sys/src/9/pc/l.s:181,196
1991/0809    
	RET 
 
/* 
1993/0915    
 * input a long from a port 
 */ 
TEXT	inl(SB), $0 
 
	MOVL	p+0(FP), DX 
	XORL	AX, AX 
	INL 
	RET 
 
/* 
1992/0917    
 *  input a string of longs from a port 
 */ 
TEXT	insl(SB),$0 
1993/0224/sys/src/9/pc/l.s:295,3001993/0915/sys/src/9/pc/l.s:222,236
1992/0917    
	RET 
 
/* 
1993/0915    
 * output a long to a port 
 */ 
TEXT	outl(SB), $0 
	MOVL	p+0(FP), DX 
	MOVL	s+4(FP), AX 
	OUTL 
	RET 
 
/* 
1992/0917    
 *  output a string of longs to a port 
 */ 
TEXT	outsl(SB),$0 
1993/0224/sys/src/9/pc/l.s:553,5621993/0915/sys/src/9/pc/l.s:489,500
1991/0703    
	CALL	trap(SB) 
	POPL	AX 
	POPAL 
1993/0915    
	NOP 
1991/1214    
	POPL	GS 
	POPL	FS 
1991/0807    
	POPL	ES 
1991/0703    
	POPL	DS 
1993/0915    
	NOP 
1991/0703    
	ADDL	$8,SP	/* error code and trap type */ 
	IRETL 
 
1993/0224/sys/src/9/pc/l.s:574,5831993/0915/sys/src/9/pc/l.s:512,523
1991/0703    
	CALL	trap(SB) 
	POPL	AX 
	POPAL 
1993/0915    
	NOP 
1991/1214    
	POPL	GS 
	POPL	FS 
1991/0807    
	POPL	ES 
1991/0703    
	POPL	DS 
1993/0915    
	NOP 
1991/0703    
	ADDL	$8,SP	/* error code and trap type */ 
	IRETL 
 
1993/0224/sys/src/9/pc/l.s:793,7961993/0915/sys/src/9/pc/l.s:733,772
1993/0212    
	MOVL	AX,AX 
 
_dp8390outb0: 
1993/0915    
	RET 
 
/* 
 * dsp outb string called from devdsp.c 
 */ 
	TEXT	dspoutb+0(SB), $0 
 
	MOVL	a+4(FP), BX 
	MOVL	n+8(FP), CX 
 
	MOVL	base+0(FP), DX 
	ADDL	$2, DX			/* Pcontrol */ 
 
	MOVL	c2+12(FP), DI 
	MOVL	c3+16(FP), SI 
 
dsploop: 
	MOVL	DI, AX			/* normal */ 
	OUTB 
 
	SUBL	$1, CX 
	CMPL	CX, $0 
	JLT	dspout 
 
	SUBL	$2, DX			/* Pdata */ 
	MOVB	(BX), AX 
	ADDL	$1, BX 
	OUTB 
 
	ADDL	$2, DX			/* Pcontrol */ 
	MOVL	SI, AX			/* strobe */ 
	OUTB 
 
	JMP	dsploop 
 
dspout: 
1993/0212    
	RET 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)