| plan 9 kernel history: overview | file list | diff list |
1998/0401/pc/l.s (diff list | history)
| 1991/0614/sys/src/9/pc/l.s:1,6 – 1991/0619/sys/src/9/pc/l.s:1,6 (short | long) | ||
| 1991/0614 | /* | |
| 1991/0619 | * boot first processor | |
| 1991/0614 | */ TEXT start(SB),$0 | |
| 1991/0614/sys/src/9/pc/l.s:9,14 – 1991/0619/sys/src/9/pc/l.s:9,17 | ||
| 1991/0614 | /* never returns */ | |
| 1991/0619 | /* * trap vector, each instruction is 4 bytes long */ | |
| 1991/0614 | TEXT traptab(SB),$0 CALL noerrcode(SB) /* divide */ | |
| 1991/0614/sys/src/9/pc/l.s:270,292 – 1991/0619/sys/src/9/pc/l.s:273,317 | ||
| 1991/0614 | CALL noerrcode(SB) TEXT noerrcode(SB),$0 | |
| 1991/0619 | PUSHL EAX MOVL 4(ESP),EAX /* JMP george /**/ | |
| 1991/0614 | TEXT errcode(SB),$0 | |
| 1991/0619 | XCHGL (ESP),EAX /* fall through */ TEXT saveregs(SB),$0 george: PUSHL EBX MOVL $noerrcode(SB),EBX /* calculate trap number */ SUBL EAX,EBX /* ... */ SHRL $1,EBX /* ... */ PUSHL ECX PUSHL EDX PUSHL EBP PUSHL ESI PUSHL EDI PUSHL EBX /* save trap number */ | |
| 1991/0614 | CALL trap(SB) | |
| 1991/0619 | ADDL $4,ESP /* drop trap number */ POPL EDI POPL ESI POPL EBP POPL EDX POPL ECX POPL EBX POPL EAX ADDL $4,ESP /* drop error code */ | |
| 1991/0614 | IRET | |
| 1991/0619 | TEXT trap(SB),$0 RET TEXT main(SB),$0 RET | |
| 1991/0619/sys/src/9/pc/l.s:10,34 – 1991/0620/sys/src/9/pc/l.s:10,76 (short | long) | ||
| 1991/0614 | ||
| 1991/0619 | /* | |
| 1991/0620 | * standard traps | |
| 1991/0619 | */ | |
| 1991/0614 |
| |
| 1991/0620 | divtrap: PUSHL $0 PUSHL $0 JMP alltrap debtrap: PUSHL $0 PUSHL $1 JMP alltrap nmitrap: PUSHL $0 PUSHL $2 JMP alltrap bptrap: PUSHL $0 PUSHL $3 JMP alltrap oftrap: PUSHL $0 PUSHL $4 JMP alltrap boundtrap: PUSHL $0 PUSHL $5 JMP alltrap invtrap: PUSHL $0 PUSHL $6 JMP alltrap nocotrap: PUSHL $0 PUSHL $7 JMP alltrap dfault: PUSHL $8 JMP alltrap csotrap: PUSHL $0 PUSHL $9 JMP alltrap tsstrap: PUSHL $0 PUSHL $10 JMP alltrap segtrap: PUSHL $11 JMP alltrap stacktrap: PUSHL $12 JMP alltrap prottrap: PUSHL $13 JMP alltrap pagefault: PUSHL $14 JMP alltrap cetrap: PUSHL $0 PUSHL $15 JMP alltrap | |
| 1991/0614 | CALL noerrcode(SB) /* coprocessor error */ CALL noerrcode(SB) CALL noerrcode(SB) | |
| 1991/0620/sys/src/9/pc/l.s:1,6 – 1991/0622/sys/src/9/pc/l.s:1,6 (short | long) | ||
| 1991/0614 | /* | |
| 1991/0619 |
| |
| 1991/0622 | * boot processor | |
| 1991/0614 | */ TEXT start(SB),$0 | |
| 1991/0620/sys/src/9/pc/l.s:8,358 – 1991/0622/sys/src/9/pc/l.s:8,119 | ||
| 1991/0614 | CALL main(SB) /* never returns */ | |
| 1991/0619 | /* | |
| 1991/0620 | * standard traps | |
| 1991/0619 | */ | |
| 1991/0620 |
| |
| 1991/0622 | TEXT trap0(SB),$0 | |
| 1991/0620 | PUSHL $0 PUSHL $0 JMP alltrap | |
| 1991/0622 | TEXT trap1(SB),$0 | |
| 1991/0620 | PUSHL $0 PUSHL $1 JMP alltrap | |
| 1991/0622 | TEXT trap2(SB),$0 | |
| 1991/0620 | PUSHL $0 PUSHL $2 JMP alltrap | |
| 1991/0622 | TEXT trap3(SB),$0 | |
| 1991/0620 | PUSHL $0 PUSHL $3 JMP alltrap | |
| 1991/0622 | TEXT trap4(SB),$0 | |
| 1991/0620 | PUSHL $0 PUSHL $4 JMP alltrap | |
| 1991/0622 | TEXT trap5(SB),$0 | |
| 1991/0620 | PUSHL $0 PUSHL $5 JMP alltrap | |
| 1991/0622 | TEXT trap6(SB),$0 | |
| 1991/0620 | PUSHL $0 PUSHL $6 JMP alltrap | |
| 1991/0622 | TEXT trap7(SB),$0 | |
| 1991/0620 | PUSHL $0 PUSHL $7 JMP alltrap | |
| 1991/0622 | TEXT trap8(SB),$0 | |
| 1991/0620 | PUSHL $8 JMP alltrap | |
| 1991/0622 | TEXT trap9(SB),$0 | |
| 1991/0620 | PUSHL $0 PUSHL $9 JMP alltrap | |
| 1991/0622 | TEXT trap10(SB),$0 | |
| 1991/0620 | PUSHL $0 PUSHL $10 JMP alltrap | |
| 1991/0622 | TEXT trap11(SB),$0 | |
| 1991/0620 | PUSHL $11 JMP alltrap | |
| 1991/0622 | TEXT trap12(SB),$0 | |
| 1991/0620 | PUSHL $12 JMP alltrap | |
| 1991/0622 | TEXT trap13(SB),$0 | |
| 1991/0620 | PUSHL $13 JMP alltrap | |
| 1991/0622 | TEXT trap14(SB),$0 | |
| 1991/0620 | PUSHL $14 JMP alltrap | |
| 1991/0622 | TEXT trap15(SB),$0 | |
| 1991/0620 | PUSHL $0 PUSHL $15 JMP alltrap | |
| 1991/0614 |
| |
| 1991/0622 | TEXT invtrap(SB),$0 | |
| 1991/0619 |
| |
| 1991/0622 | PUSHL $0 PUSHL $16 JMP alltrap | |
| 1991/0619 | ||
| 1991/0614 |
| |
| 1991/0619 |
| |
| 1991/0622 | alltrap: PUSHAL | |
| 1991/0614 | CALL trap(SB) | |
| 1991/0619 |
| |
| 1991/0614 |
| |
| 1991/0619 |
| |
| 1991/0622 | POPAL IRETL | |
| 1991/0619 | TEXT main(SB),$0 | |
| 1991/0622/sys/src/9/pc/l.s:9,62 – 1991/0623/sys/src/9/pc/l.s:9,61 (short | long) | ||
| 1991/0614 | /* never returns */ | |
| 1991/0619 | /* | |
| 1991/0620 |
| |
| 1991/0623 | * first 16 ``standard'' traps | |
| 1991/0619 | */ | |
| 1991/0622 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0620 | PUSHL $0 | |
| 1991/0622 | TEXT trap1(SB),$0 | |
| 1991/0620 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0620 | PUSHL $1 JMP alltrap | |
| 1991/0622 | TEXT trap2(SB),$0 | |
| 1991/0620 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0620 | PUSHL $2 JMP alltrap | |
| 1991/0622 | TEXT trap3(SB),$0 | |
| 1991/0620 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0620 | PUSHL $3 JMP alltrap | |
| 1991/0622 | TEXT trap4(SB),$0 | |
| 1991/0620 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0620 | PUSHL $4 JMP alltrap | |
| 1991/0622 | TEXT trap5(SB),$0 | |
| 1991/0620 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0620 | PUSHL $5 JMP alltrap | |
| 1991/0622 | TEXT trap6(SB),$0 | |
| 1991/0620 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0620 | PUSHL $6 JMP alltrap | |
| 1991/0622 | TEXT trap7(SB),$0 | |
| 1991/0620 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0620 | PUSHL $7 JMP alltrap | |
| 1991/0622 | ||
| 1991/0622/sys/src/9/pc/l.s:67,79 – 1991/0623/sys/src/9/pc/l.s:66,78 | ||
| 1991/0622 | TEXT trap9(SB),$0 | |
| 1991/0620 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0620 | PUSHL $9 JMP alltrap | |
| 1991/0622 | TEXT trap10(SB),$0 | |
| 1991/0620 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0620 | PUSHL $10 JMP alltrap | |
| 1991/0622 | ||
| 1991/0622/sys/src/9/pc/l.s:99,120 – 1991/0623/sys/src/9/pc/l.s:98,134 | ||
| 1991/0622 | TEXT trap15(SB),$0 | |
| 1991/0620 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0620 | PUSHL $15 JMP alltrap | |
| 1991/0614 | ||
| 1991/0623 | /* * invalid trap */ | |
| 1991/0622 | TEXT invtrap(SB),$0 | |
| 1991/0619 | ||
| 1991/0622 |
| |
| 1991/0623 | PUSHL $0 /* put on an error code */ | |
| 1991/0622 | PUSHL $16 JMP alltrap | |
| 1991/0619 | ||
| 1991/0623 | /* * common trap code */ | |
| 1991/0622 | alltrap: | |
| 1991/0623 | ||
| 1991/0622 | PUSHAL | |
| 1991/0614 | CALL trap(SB) | |
| 1991/0622 | POPAL | |
| 1991/0623 | ADDL $#8,SP /* pop the trap and error codes */ | |
| 1991/0622 | IRETL | |
| 1991/0619 | ||
| 1991/0623 | /* * stubs */ | |
| 1991/0619 | TEXT main(SB),$0 | |
| 1991/0623 | RET TEXT trap(SB),$0 | |
| 1991/0619 | RET | |
| 1991/0623/sys/src/9/pc/l.s:1,10 – 1991/0625/sys/src/9/pc/l.s:1,26 (short | long) | ||
| 1991/0625 | #include "mem.h" | |
| 1991/0614 | ||
| 1991/0625 | GLOBL gdtptr(SB),$6 DATA gdtptr+0(SB)/2, $(6*8) DATA gdtptr+2(SB)/4, $gdt(SB) | |
| 1991/0614 | /* | |
| 1991/0622 | * boot processor | |
| 1991/0614 | */ TEXT start(SB),$0 | |
| 1991/0625 | CLI /* disable interrupts */ MOVW $NULLSEL,IDTR /* force shutdown on error */ /* point data segment at low memory */ XORL AX,AX MOVW AX,DS /* load gdt address (valid after paging) */ LEAL gdtptr(SB),AX MOVL -KZERO(AX),GDTR | |
| 1991/0614 | CALL main(SB) /* never returns */ | |
| 1991/0623/sys/src/9/pc/l.s:116,134 – 1991/0625/sys/src/9/pc/l.s:132,143 | ||
| 1991/0623 | */ | |
| 1991/0622 | alltrap: | |
| 1991/0623 | ||
| 1991/0625 | PUSHL DS | |
| 1991/0622 | PUSHAL | |
| 1991/0625 | MOVL $KDSEL, AX MOVW AX, DS | |
| 1991/0614 | CALL trap(SB) | |
| 1991/0622 | POPAL | |
| 1991/0623 |
| |
| 1991/0625 | POPL DS ADDL $8,SP /* pop the trap and error codes */ | |
| 1991/0622 | IRETL | |
| 1991/0619 | ||
| 1991/0623 |
| |
| 1991/0619 |
| |
| 1991/0623 |
| |
| 1991/0619 |
| |
| 1991/0625/sys/src/9/pc/l.s:1,25 – 1991/0626/sys/src/9/pc/l.s:1,39 (short | long) | ||
| 1991/0625 | #include "mem.h" | |
| 1991/0614 | ||
| 1991/0626 | /* * pointer to initial gdt (must be in first 64K of program) */ | |
| 1991/0625 | GLOBL gdtptr(SB),$6 | |
| 1991/0626 | DATA gdtptr+0(SB)/2, $(5*8) | |
| 1991/0625 | DATA gdtptr+2(SB)/4, $gdt(SB) | |
| 1991/0614 | /* | |
| 1991/0626 | * pointer to idt (must be in first 64K of program) */ GLOBL idtptr(SB),$6 DATA idtptr+0(SB)/2, $(6*8) DATA idtptr+2(SB)/4, $idt(SB) /* | |
| 1991/0622 | * boot processor | |
| 1991/0614 | */ TEXT start(SB),$0 | |
| 1991/0625 | CLI /* disable interrupts */ | |
| 1991/0626 | /* point CPU at the interrupt/trap table */ LEAL idtptr(SB),AX /* MOVL (AX),IDTR /**/ | |
| 1991/0625 | /* point data segment at low memory */ XORL AX,AX | |
| 1991/0626 | /* MOVW AX,DS /**/ | |
| 1991/0625 |
| |
| 1991/0626 | /* point CPU at the interrupt/trap table */ | |
| 1991/0625 | LEAL gdtptr(SB),AX | |
| 1991/0626 | /* MOVL (AX),GDTR /**/ | |
| 1991/0625 | ||
| 1991/0614 | CALL main(SB) /* never returns */ | |
| 1991/0625/sys/src/9/pc/l.s:132,143 – 1991/0626/sys/src/9/pc/l.s:146,157 | ||
| 1991/0623 | */ | |
| 1991/0622 | alltrap: | |
| 1991/0623 | ||
| 1991/0625 |
| |
| 1991/0626 | /* PUSHL DS /**/ | |
| 1991/0622 | PUSHAL | |
| 1991/0625 | MOVL $KDSEL, AX | |
| 1991/0626 | /* MOVW AX, DS /**/ | |
| 1991/0614 | CALL trap(SB) | |
| 1991/0622 | POPAL | |
| 1991/0625 |
| |
| 1991/0626 | /* POPL DS /**/ | |
| 1991/0625 | ADDL $8,SP /* pop the trap and error codes */ | |
| 1991/0622 | IRETL | |
| 1991/0626/sys/src/9/pc/l.s:1,41 – 1991/0627/sys/src/9/pc/l.s:1,97 (short | long) | ||
| 1991/0625 | #include "mem.h" | |
| 1991/0614 | ||
| 1991/0627 | TEXT start(SB),$0 JMP start16 | |
| 1991/0626 | /* | |
| 1991/0627 | * gdt to get us to 32-bit/segmented/unpaged mode | |
| 1991/0626 | */ | |
| 1991/0625 |
| |
| 1991/0627 | TEXT tgdt(SB),$0 | |
| 1991/0625 | ||
| 1991/0626 |
| |
| 1991/0625 |
| |
| 1991/0627 | /* null descriptor */ LONG $0 LONG $0 | |
| 1991/0625 | ||
| 1991/0627 | /* data segment descriptor for 4 gigabytes (PL 0) */ LONG SEGG|SEGB|(0xF<<16)|SEGP|SEGPL(0)|SEGDATA|SEGW LONG 0xFFFF /* exec segment descriptor for 4 gigabytes (PL 0) */ LONG SEGG|SEGD|(0xF<<16)|SEGP|SEGPL(p)|SEGEXEC|SEGR LONG 0xFFFF | |
| 1991/0614 | /* | |
| 1991/0626 |
| |
| 1991/0627 | * pointer to initial gdt | |
| 1991/0626 | */ | |
| 1991/0627 | TEXT tgdtptr(SB),$0 | |
| 1991/0626 |
| |
| 1991/0627 | WORD $(3*8) LONG $tgdt(SB) | |
| 1991/0626 | /* | |
| 1991/0622 |
| |
| 1991/0627 | * come here in (16bit) real-address mode | |
| 1991/0614 | */ | |
| 1991/0627 | start16: | |
| 1991/0625 | CLI /* disable interrupts */ | |
| 1991/0626 |
| |
| 1991/0625 | /* point data segment at low memory */ XORL AX,AX | |
| 1991/0626 |
| |
| 1991/0627 | MOVW AX,DS | |
| 1991/0625 | ||
| 1991/0626 |
| |
| 1991/0625 |
| |
| 1991/0626 |
| |
| 1991/0627 | /* point CPU at the interrupt descriptor table */ MOVL tgdt(SB),IDTR | |
| 1991/0625 | ||
| 1991/0614 |
| |
| 1991/0627 | /* point CPU at the global descriptor table */ MOVL gdtptr(SB),GDTR /* switch to protected mode */ MOVL CR0,AX ORL $1,AX MOVL AX,CR0 /* clear prefetch buffer */ JMP flush /* * come here in USE16 protected mode */ flush: /* map data and stack address to physical memory */ MOVW $SELECTOR(1, SELGDT, 0),AX MOVW AX,DS MOVW AX,ES MOVW AX,SS /* switch to 32 bit code */ JMPFAR SELECTOR(2, SELGDT, 0):start32 /* * come here in USE32 protected mode */ TEXT start32(SB),$0 /* clear bss (should use REP) */ MOVL $edata(SB),SI MOVL $edata+4(SB),DI MOVL $end(SB),CX SUBL DI,CX SHRL $2,CX XORL AX,AX MOVL AX,edata(SB) CLD REP MOVSL (SI),(DI) /* set up stack */ MOVL $mach0(SB),AX MOVL A0, m(SB) MOVL $0, 0(A0) MOVL A0, A7 ADDL $(MACHSIZE-4), A7 /* start stack under machine struct */ MOVL $0, u(SB) CALL main(SB),$0 | |
| 1991/0614 | /* never returns */ | |
| 1991/0619 | /* | |
| 1991/0627/sys/src/9/pc/l.s:1,7 – 1991/0628/sys/src/9/pc/l.s:1,6 (short | long) | ||
| 1991/0625 | #include "mem.h" | |
| 1991/0614 | ||
| 1991/0627 | TEXT start(SB),$0 | |
| 1991/0626 | /* | |
| 1991/0627/sys/src/9/pc/l.s:14,25 – 1991/0628/sys/src/9/pc/l.s:13,24 | ||
| 1991/0627 | LONG $0 | |
| 1991/0625 | ||
| 1991/0627 | /* data segment descriptor for 4 gigabytes (PL 0) */ | |
| 1991/0628 | LONG $(SEGG|SEGB|(0xF<<16)|SEGP|SEGPL(0)|SEGDATA|SEGW) LONG $(0xFFFF) | |
| 1991/0627 | /* exec segment descriptor for 4 gigabytes (PL 0) */ | |
| 1991/0628 | LONG $(SEGG|SEGD|(0xF<<16)|SEGP|SEGPL(0)|SEGEXEC|SEGR) LONG $(0xFFFF) | |
| 1991/0627 | ||
| 1991/0614 | /* | |
| 1991/0627 | * pointer to initial gdt | |
| 1991/0627/sys/src/9/pc/l.s:27,33 – 1991/0628/sys/src/9/pc/l.s:26,32 | ||
| 1991/0627 | TEXT tgdtptr(SB),$0 | |
| 1991/0626 | ||
| 1991/0627 | WORD $(3*8) | |
| 1991/0628 | LONG tgdt(SB) | |
| 1991/0626 | /* | |
| 1991/0627 | * come here in (16bit) real-address mode | |
| 1991/0627/sys/src/9/pc/l.s:64,70 – 1991/0628/sys/src/9/pc/l.s:63,69 | ||
| 1991/0627 | MOVW AX,SS /* switch to 32 bit code */ | |
| 1991/0628 | /* JMPFAR SELECTOR(2, SELGDT, 0):start32 /**/ | |
| 1991/0627 | /* * come here in USE32 protected mode | |
| 1991/0627/sys/src/9/pc/l.s:85,94 – 1991/0628/sys/src/9/pc/l.s:84,93 | ||
| 1991/0627 | /* set up stack */ MOVL $mach0(SB),AX | |
| 1991/0628 | MOVL AX, m(SB) MOVL $0, 0(AX) MOVL AX, SP ADDL $(MACHSIZE-4), AX /* start stack under machine struct */ | |
| 1991/0627 | MOVL $0, u(SB) CALL main(SB),$0 | |
| 1991/0628/sys/src/9/pc/l.s:1,212 – 1991/0629/sys/src/9/pc/l.s:1,177 (short | long) | ||
| 1991/0625 | #include "mem.h" | |
| 1991/0614 | ||
| 1991/0627 |
| |
| 1991/0626 | /* | |
| 1991/0627 | * gdt to get us to 32-bit/segmented/unpaged mode | |
| 1991/0626 | */ | |
| 1991/0627 |
| |
| 1991/0629 | GLOBL tgdt(SB),$(6*4) | |
| 1991/0625 | ||
| 1991/0627 | /* null descriptor */ | |
| 1991/0629 | DATA tgdt+0(SB)/4, $0 DATA tgdt+4(SB)/4, $0 | |
| 1991/0625 | ||
| 1991/0627 | /* data segment descriptor for 4 gigabytes (PL 0) */ | |
| 1991/0628 |
| |
| 1991/0629 | DATA tgdt+8(SB)/4, $(0xFFFF) DATA tgdt+12(SB)/4, $(SEGG|SEGB|(0xF<<16)|SEGP|SEGPL(0)|SEGDATA|SEGW) | |
| 1991/0627 | /* exec segment descriptor for 4 gigabytes (PL 0) */ | |
| 1991/0628 |
| |
| 1991/0629 | DATA tgdt+16(SB)/4, $(0xFFFF) DATA tgdt+20(SB)/4, $(SEGG|SEGD|(0xF<<16)|SEGP|SEGPL(0)|SEGEXEC|SEGR) | |
| 1991/0627 | ||
| 1991/0614 | /* | |
| 1991/0627 | * pointer to initial gdt | |
| 1991/0626 | */ | |
| 1991/0627 |
| |
| 1991/0629 | GLOBL tgdtptr(SB),$6 | |
| 1991/0626 | ||
| 1991/0627 |
| |
| 1991/0628 |
| |
| 1991/0629 | DATA tgdtptr+0(SB)/2, $(3*8) DATA tgdtptr+2(SB)/4, $tgdt(SB) | |
| 1991/0626 | ||
| 1991/0629 | TEXT start(SB),$0 | |
| 1991/0626 | /* | |
| 1991/0627 |
| |
| 1991/0629 | * about to walk all over ms/dos - turn off interrupts | |
| 1991/0614 | */ | |
| 1991/0627 |
| |
| 1991/0625 |
| |
| 1991/0629 | CLI | |
| 1991/0625 |
| |
| 1991/0627 |
| |
| 1991/0629 | /* * move the first 1k bytes down to low core and jump to them * - looks wierd because it is being assembled by a 32 bit * assembler for a 16 bit world */ MOVL $0,BX INCL BX SHLL $(10-1),BX MOVL BX,CX MOVL $0,SI MOVW SI,ES MOVL SI,DI CLD REP MOVSL /* JMPFAR* 00:$lowcore(SB) /**/ BYTE $0xEA WORD $lowcore(SB) WORD $0 | |
| 1991/0625 | ||
| 1991/0627 |
| |
| 1991/0629 | TEXT lowcore(SB),$0 | |
| 1991/0625 | ||
| 1991/0627 |
| |
| 1991/0629 | /* * move the next 63K down */ MOVL $0,CX INCL CX SHLL $(15-1),CX SUBL BX,CX SHLL $1,BX MOVL BX,SI MOVL BX,DI REP MOVSL | |
| 1991/0627 |
| |
| 1991/0629 | /* * now that we're in low core, update the DS */ MOVL $0,BX MOVW BX,DS /* * goto protected mode */ /* MOVL tgdtptr(SB),GDTR /**/ BYTE $0x0f BYTE $0x01 BYTE $0x16 WORD $tgdtptr(SB) | |
| 1991/0627 | MOVL CR0,AX ORL $1,AX MOVL AX,CR0 | |
| 1991/0629 | * clear prefetch queue (wierd 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 | |
| 1991/0629 | MOVW AX,ES | |
| 1991/0627 |
| |
| 1991/0628 |
| |
| 1991/0629 | /* JMPFAR* SELECTOR(2, SELGDT, 0):$protected(SB) /**/ BYTE $0xEA WORD $mode32bit(SB) WORD $SELECTOR(2, SELGDT, 0) | |
| 1991/0627 | ||
| 1991/0629 | TEXT mode32bit(SB),$0 | |
| 1991/0627 | /* | |
| 1991/0629 | * print a blue 3 on a red background | |
| 1991/0627 | */ | |
| 1991/0629 | MOVL $0xb8100,BX MOVB $0x33,AL MOVB AL,(BX) INCW BX MOVB $0x43,AL MOVB AL,(BX) | |
| 1991/0627 |
| |
| 1991/0629 | /* * Clear BSS */ LEAL edata(SB),SI LEAL edata+4(SB),DI MOVL $0,AX MOVL AX,(SI) LEAL end(SB),CX | |
| 1991/0627 | SUBL DI,CX SHRL $2,CX | |
| 1991/0629 | MOVSL | |
| 1991/0627 |
| |
| 1991/0628 |
| |
| 1991/0627 |
| |
| 1991/0614 |
| |
| 1991/0619 | /* | |
| 1991/0623 |
| |
| 1991/0629 | * print a blue 4 on a red background | |
| 1991/0619 | */ | |
| 1991/0622 |
| |
| 1991/0629 | MOVL $0xb8100,BX MOVB $0x34,AL MOVB AL,(BX) INCW BX MOVB $0x43,AL MOVB AL,(BX) here: JMP here | |
| 1991/0622 | ||
| 1991/0623 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0629 | /* * stack and mach */ MOVL $mach0(SB),SP MOVL SP,m(SB) MOVL $0,0(SP) ADDL $(MACHSIZE-4),SP /* start stack under machine struct */ MOVL $0, u(SB) | |
| 1991/0622 | ||
| 1991/0623 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0623 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0623 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0623 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0623 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0623 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0623 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0623 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0623 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0620 |
| |
| 1991/0622 |
| |
| 1991/0623 |
| |
| 1991/0620 |
| |
| 1991/0614 | ||
| 1991/0629 | CALL main(SB) | |
| 1991/0623 | /* | |
| 1991/0629 | * print a blue 4 on a red background | |
| 1991/0623 | */ | |
| 1991/0622 |
| |
| 1991/0629 | MOVL $0xb8100,BX MOVB $0x34,AL MOVB AL,(BX) INCW BX MOVB $0x43,AL MOVB AL,(BX) | |
| 1991/0619 | ||
| 1991/0623 |
| |
| 1991/0622 |
| |
| 1991/0629 | loop: JMP loop | |
| 1991/0619 | ||
| 1991/0623 |
| |
| 1991/0622 |
| |
| 1991/0623 | ||
| 1991/0626 |
| |
| 1991/0622 |
| |
| 1991/0625 |
| |
| 1991/0626 |
| |
| 1991/0614 |
| |
| 1991/0622 |
| |
| 1991/0626 |
| |
| 1991/0625 |
| |
| 1991/0622 |
| |
| 1991/0629 | GLOBL mach0+0(SB), $MACHSIZE GLOBL u(SB), $4 GLOBL m(SB), $4 | |
| 1991/0629/sys/src/9/pc/l.s:1,35 – 1991/0702/sys/src/9/pc/l.s:1,10 (short | long) | ||
| 1991/0625 | #include "mem.h" | |
| 1991/0614 | ||
| 1991/0626 | /* | |
| 1991/0627 |
| |
| 1991/0626 |
| |
| 1991/0629 |
| |
| 1991/0625 | ||
| 1991/0627 |
| |
| 1991/0629 |
| |
| 1991/0625 | ||
| 1991/0627 |
| |
| 1991/0629 |
| |
| 1991/0627 |
| |
| 1991/0629 |
| |
| 1991/0627 | ||
| 1991/0614 |
| |
| 1991/0627 |
| |
| 1991/0626 |
| |
| 1991/0629 |
| |
| 1991/0626 | ||
| 1991/0629 |
| |
| 1991/0626 | ||
| 1991/0629 |
| |
| 1991/0626 |
| |
| 1991/0629 | * about to walk all over ms/dos - turn off interrupts | |
| 1991/0614 | */ | |
| 1991/0702 | TEXT origin(SB),$0 | |
| 1991/0629 | CLI | |
| 1991/0625 | ||
| 1991/0629 | /* | |
| 1991/0629/sys/src/9/pc/l.s:47,53 – 1991/0702/sys/src/9/pc/l.s:22,28 | ||
| 1991/0629 | CLD REP MOVSL | |
| 1991/0702 | /* JMPFAR 00:$lowcore(SB) /**/ | |
| 1991/0629 | BYTE $0xEA WORD $lowcore(SB) WORD $0 | |
| 1991/0629/sys/src/9/pc/l.s:112,127 – 1991/0702/sys/src/9/pc/l.s:87,92 | ||
| 1991/0627 | ||
| 1991/0629 | TEXT mode32bit(SB),$0 | |
| 1991/0627 |
| |
| 1991/0629 |
| |
| 1991/0627 |
| |
| 1991/0629 |
| |
| 1991/0627 | ||
| 1991/0629 | /* * Clear BSS */ | |
| 1991/0629/sys/src/9/pc/l.s:135,154 – 1991/0702/sys/src/9/pc/l.s:100,105 | ||
| 1991/0627 | REP | |
| 1991/0629 | MOVSL | |
| 1991/0627 | ||
| 1991/0619 |
| |
| 1991/0629 |
| |
| 1991/0619 |
| |
| 1991/0629 |
| |
| 1991/0622 | ||
| 1991/0629 | /* * stack and mach */ | |
| 1991/0629/sys/src/9/pc/l.s:159,173 – 1991/0702/sys/src/9/pc/l.s:110,115 | ||
| 1991/0629 | MOVL $0, u(SB) | |
| 1991/0622 | ||
| 1991/0629 | CALL main(SB) | |
| 1991/0623 |
| |
| 1991/0629 |
| |
| 1991/0623 |
| |
| 1991/0629 |
| |
| 1991/0619 | ||
| 1991/0629 | loop: JMP loop | |
| 1991/0629/sys/src/9/pc/l.s:175,177 – 1991/0702/sys/src/9/pc/l.s:117,164 | ||
| 1991/0629 | GLOBL mach0+0(SB), $MACHSIZE GLOBL u(SB), $4 GLOBL m(SB), $4 | |
| 1991/0702 | /* * gdt to get us to 32-bit/segmented/unpaged mode */ TEXT tgdt(SB),$0 /* null descriptor */ LONG $0 LONG $0 /* data segment descriptor for 4 gigabytes (PL 0) */ LONG $(0xFFFF) LONG $(SEGG|SEGB|(0xF<<16)|SEGP|SEGPL(0)|SEGDATA|SEGW) /* exec segment descriptor for 4 gigabytes (PL 0) */ LONG $(0xFFFF) LONG $(SEGG|SEGD|(0xF<<16)|SEGP|SEGPL(0)|SEGEXEC|SEGR) /* * pointer to initial gdt */ TEXT tgdtptr(SB),$0 WORD $(3*8) LONG $tgdt(SB) /* * input a byte */ TEXT inb(SB),$0 MOVL p+0(FP),DX XORL AX,AX INB RET /* * output a byte */ TEXT outb(SB),$0 MOVL p+0(FP),DX MOVL b+4(FP),AX OUTB RET | |
| 1991/0702/sys/src/9/pc/l.s:162,164 – 1991/0703/sys/src/9/pc/l.s:162,300 (short | long) | ||
| 1991/0702 | MOVL b+4(FP),AX OUTB RET | |
| 1991/0703 | /* * test and set */ TEXT tas(SB),$0 MOVL $0xdeadead,AX MOVL l+0(FP),BX XCHGL AX,(BX) RET /* * load the idt */ GLOBL idtptr(SB),$6 TEXT lidt(SB),$0 MOVL t+0(FP),AX MOVL AX,idtptr+2(SB) MOVL l+4(FP),AX MOVW AX,idtptr(SB) MOVL idtptr(SB),IDTR RET /* * load the gdt */ GLOBL gdtptr(SB),$6 TEXT lgdt(SB),$0 MOVL t+0(FP),AX MOVL AX,gdtptr+2(SB) MOVL l+4(FP),AX MOVW AX,gdtptr(SB) MOVL gdtptr(SB),GDTR RET /* * special traps */ TEXT intr0(SB),$0 PUSHL $0 PUSHL $0 JMP intrcommon TEXT intr1(SB),$0 PUSHL $0 PUSHL $1 JMP intrcommon TEXT intr2(SB),$0 PUSHL $0 PUSHL $2 JMP intrcommon TEXT intr3(SB),$0 PUSHL $0 PUSHL $3 JMP intrcommon TEXT intr4(SB),$0 PUSHL $0 PUSHL $4 JMP intrcommon TEXT intr5(SB),$0 PUSHL $0 PUSHL $5 JMP intrcommon TEXT intr6(SB),$0 PUSHL $0 PUSHL $6 JMP intrcommon TEXT intr7(SB),$0 PUSHL $0 PUSHL $7 JMP intrcommon TEXT intr8(SB),$0 PUSHL $8 JMP intrscommon TEXT intr9(SB),$0 PUSHL $0 PUSHL $9 JMP intrcommon TEXT intr10(SB),$0 PUSHL $10 JMP intrscommon TEXT intr11(SB),$0 PUSHL $11 JMP intrscommon TEXT intr12(SB),$0 PUSHL $12 JMP intrscommon TEXT intr13(SB),$0 PUSHL $13 JMP intrscommon TEXT intr14(SB),$0 PUSHL $14 JMP intrscommon TEXT intr15(SB),$0 PUSHL $0 PUSHL $15 JMP intrcommon TEXT intr16(SB),$0 PUSHL $0 PUSHL $16 JMP intrcommon TEXT intrbad(SB),$0 PUSHL $0 PUSHL $0x1ff JMP intrcommon intrcommon: PUSHL DS PUSHAL LEAL 0(SP),AX PUSHL AX CALL trap(SB) POPL AX POPAL POPL DS ADDL $8,SP /* error code and trap type */ IRETL RET intrscommon: PUSHL DS PUSHAL LEAL 0(SP),AX PUSHL AX CALL trap(SB) POPL AX POPAL POPL DS ADDL $8,SP /* error code and trap type */ IRETL RET /* * turn on interrupts */ TEXT sti(SB),$0 STI RET | |
| 1991/0703/sys/src/9/pc/l.s:293,300 – 1991/0704/sys/src/9/pc/l.s:293,307 (short | long) | ||
| 1991/0703 | RET /* | |
| 1991/0704 | * turn interrupts and traps on | |
| 1991/0703 | */ | |
| 1991/0704 | TEXT spllo(SB),$0 | |
| 1991/0703 | STI | |
| 1991/0704 | RET /* * turn interrupts and traps off */ TEXT splhi(SB),$0 CLI | |
| 1991/0703 | RET | |
| 1991/0704/sys/src/9/pc/l.s:305,307 – 1991/0705/sys/src/9/pc/l.s:305,313 (short | long) | ||
| 1991/0704 | TEXT splhi(SB),$0 CLI | |
| 1991/0703 | RET | |
| 1991/0705 | /* * set interrupt level */ TEXT splx(SB),$0 RET | |
| 1991/0705/sys/src/9/pc/l.s:80,86 – 1991/0706/sys/src/9/pc/l.s:80,86 (short | long) | ||
| 1991/0627 | MOVW AX,SS | |
| 1991/0629 | MOVW AX,ES | |
| 1991/0627 | ||
| 1991/0629 |
| |
| 1991/0706 | /* JMPFAR SELECTOR(2, SELGDT, 0):$mode32bit(SB) /**/ | |
| 1991/0629 | BYTE $0xEA WORD $mode32bit(SB) WORD $SELECTOR(2, SELGDT, 0) | |
| 1991/0705/sys/src/9/pc/l.s:261,266 – 1991/0706/sys/src/9/pc/l.s:261,294 | ||
| 1991/0703 | PUSHL $0 PUSHL $16 JMP intrcommon | |
| 1991/0706 | TEXT intr17(SB),$0 PUSHL $0 PUSHL $17 JMP intrcommon TEXT intr18(SB),$0 PUSHL $0 PUSHL $18 JMP intrcommon TEXT intr19(SB),$0 PUSHL $0 PUSHL $19 JMP intrcommon TEXT intr20(SB),$0 PUSHL $0 PUSHL $20 JMP intrcommon TEXT intr21(SB),$0 PUSHL $0 PUSHL $21 JMP intrcommon TEXT intr22(SB),$0 PUSHL $0 PUSHL $22 JMP intrcommon TEXT intr23(SB),$0 PUSHL $0 PUSHL $23 JMP intrcommon | |
| 1991/0703 | TEXT intrbad(SB),$0 PUSHL $0 PUSHL $0x1ff | |
| 1991/0705/sys/src/9/pc/l.s:311,313 – 1991/0706/sys/src/9/pc/l.s:339,347 | ||
| 1991/0705 | */ TEXT splx(SB),$0 RET | |
| 1991/0706 | /* * */ TEXT idle(SB),$0 HLT | |
| 1991/0706/sys/src/9/pc/l.s:24,30 – 1991/0710/sys/src/9/pc/l.s:24,30 (short | long) | ||
| 1991/0629 | MOVSL | |
| 1991/0702 | /* JMPFAR 00:$lowcore(SB) /**/ | |
| 1991/0629 | BYTE $0xEA | |
| 1991/0710 | WORD $lowcore-KZERO(SB) | |
| 1991/0629 | WORD $0 | |
| 1991/0625 | ||
| 1991/0629 | TEXT lowcore(SB),$0 | |
| 1991/0706/sys/src/9/pc/l.s:56,62 – 1991/0710/sys/src/9/pc/l.s:56,62 | ||
| 1991/0629 | BYTE $0x0f BYTE $0x01 BYTE $0x16 | |
| 1991/0710 | WORD $tgdtptr-KZERO(SB) | |
| 1991/0627 | MOVL CR0,AX ORL $1,AX MOVL AX,CR0 | |
| 1991/0706/sys/src/9/pc/l.s:82,88 – 1991/0710/sys/src/9/pc/l.s:82,88 | ||
| 1991/0627 | ||
| 1991/0706 | /* JMPFAR SELECTOR(2, SELGDT, 0):$mode32bit(SB) /**/ | |
| 1991/0629 | BYTE $0xEA | |
| 1991/0710 | WORD $mode32bit-KZERO(SB) | |
| 1991/0629 | WORD $SELECTOR(2, SELGDT, 0) | |
| 1991/0627 | ||
| 1991/0629 | TEXT mode32bit(SB),$0 | |
| 1991/0706/sys/src/9/pc/l.s:90,100 – 1991/0710/sys/src/9/pc/l.s:90,101 | ||
| 1991/0629 | /* * Clear BSS */ | |
| 1991/0710 | LEAL edata-KZERO(SB),SI MOVL SI,DI ADDL $4,DI | |
| 1991/0629 | MOVL $0,AX MOVL AX,(SI) | |
| 1991/0710 | LEAL end-KZERO(SB),CX | |
| 1991/0627 | SUBL DI,CX SHRL $2,CX REP | |
| 1991/0706/sys/src/9/pc/l.s:101,106 – 1991/0710/sys/src/9/pc/l.s:102,138 | ||
| 1991/0629 | MOVSL | |
| 1991/0627 | ||
| 1991/0629 | /* | |
| 1991/0710 | * make a bottom level page table page that maps the first * 4 meg of physical memory */ LEAL tpt-KZERO(SB),AX /* get phys addr of temporary page table */ ADDL $(BY2PG-1),AX /* must be page alligned */ ANDL $(~(BY2PG-1)),AX /* ... */ MOVL $1024,CX /* pte's per page */ MOVL $(((1024-1)<<12)|PTEVALID|PTEKERNEL|PTEWRITE),BX setpte: MOVL BX,-4(AX)(CX*4) SUBL $(1<<12),BX LOOP setpte /* * make a top level page table page that maps the first * 4 meg of memory to 0 thru 4meg and to KZERO thru KZERO+4meg */ MOVL AX,BX ADDL $BY2PG,AX MOVL BX,0(AX) MOVL BX,((KZERO>>22)&(BY2PG-1))(AX) /* * point processor to top level page & turn on paging */ MOVL AX,CR3 MOVL CR0,AX ORL $1,AX MOVL AX,CR0 /* | |
| 1991/0629 | * stack and mach */ MOVL $mach0(SB),SP | |
| 1991/0706/sys/src/9/pc/l.s:117,122 – 1991/0710/sys/src/9/pc/l.s:149,155 | ||
| 1991/0629 | GLOBL mach0+0(SB), $MACHSIZE GLOBL u(SB), $4 GLOBL m(SB), $4 | |
| 1991/0710 | GLOBL tpt(SB), $(BY2PG*3) | |
| 1991/0702 | /* * gdt to get us to 32-bit/segmented/unpaged mode | |
| 1991/0706/sys/src/9/pc/l.s:141,147 – 1991/0710/sys/src/9/pc/l.s:174,180 | ||
| 1991/0702 | TEXT tgdtptr(SB),$0 WORD $(3*8) | |
| 1991/0710 | LONG $tgdt-KZERO(SB) | |
| 1991/0702 | /* * input a byte | |
| 1991/0706/sys/src/9/pc/l.s:289,294 – 1991/0710/sys/src/9/pc/l.s:322,331 | ||
| 1991/0706 | PUSHL $0 PUSHL $23 JMP intrcommon | |
| 1991/0710 | TEXT intr64(SB),$0 PUSHL $0 PUSHL $64 JMP intrcommon | |
| 1991/0703 | TEXT intrbad(SB),$0 PUSHL $0 PUSHL $0x1ff | |
| 1991/0706/sys/src/9/pc/l.s:324,329 – 1991/0710/sys/src/9/pc/l.s:361,368 | ||
| 1991/0704 | * turn interrupts and traps on | |
| 1991/0703 | */ | |
| 1991/0704 | TEXT spllo(SB),$0 | |
| 1991/0710 | PUSHFL POPL AX | |
| 1991/0703 | STI | |
| 1991/0704 | RET | |
| 1991/0706/sys/src/9/pc/l.s:331,336 – 1991/0710/sys/src/9/pc/l.s:370,377 | ||
| 1991/0704 | * turn interrupts and traps off */ TEXT splhi(SB),$0 | |
| 1991/0710 | PUSHFL POPL AX | |
| 1991/0704 | CLI | |
| 1991/0703 | RET | |
| 1991/0705 | ||
| 1991/0706/sys/src/9/pc/l.s:338,347 – 1991/0710/sys/src/9/pc/l.s:379,409 | ||
| 1991/0705 | * set interrupt level */ TEXT splx(SB),$0 | |
| 1991/0710 | MOVL s+0(FP),AX PUSHL AX POPFL | |
| 1991/0705 | RET | |
| 1991/0706 | /* | |
| 1991/0710 | * do nothing whatsoever till interrupt happens | |
| 1991/0706 | */ TEXT idle(SB),$0 HLT | |
| 1991/0710 | RET /* * label consists of a stack pointer and a PC */ TEXT gotolabel(SB),$0 MOVL l+0(FP),AX MOVL 0(AX),SP /* restore sp */ MOVL 4(AX),AX /* put return pc on the stack */ MOVL AX,0(SP) RET TEXT setlabel(SB),$0 MOVL l+0(FP),AX MOVL SP,0(AX) /* store sp */ MOVL 0(SP),BX /* store return pc */ MOVL BX,4(AX) RET | |
| 1991/0710/sys/src/9/pc/l.s:103,128 – 1991/0711/sys/src/9/pc/l.s:103,138 (short | long) | ||
| 1991/0627 | ||
| 1991/0629 | /* | |
| 1991/0710 | * make a bottom level page table page that maps the first | |
| 1991/0711 | * 16 meg of physical memory | |
| 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 | |
| 1991/0710 | setpte: MOVL BX,-4(AX)(CX*4) | |
| 1991/0711 | SUBL $(1<<PGSHIFT),BX | |
| 1991/0710 | LOOP setpte /* * make a top level page table page that maps the first | |
| 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 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 | |
| 1991/0710/sys/src/9/pc/l.s:129,135 – 1991/0711/sys/src/9/pc/l.s:139,145 | ||
| 1991/0710 | */ MOVL AX,CR3 MOVL CR0,AX | |
| 1991/0711 | ORL $0X80000000,AX | |
| 1991/0710 | MOVL AX,CR0 /* | |
| 1991/0710/sys/src/9/pc/l.s:149,155 – 1991/0711/sys/src/9/pc/l.s:159,165 | ||
| 1991/0629 | GLOBL mach0+0(SB), $MACHSIZE GLOBL u(SB), $4 GLOBL m(SB), $4 | |
| 1991/0710 |
| |
| 1991/0711 | GLOBL tpt(SB), $(BY2PG*6) | |
| 1991/0702 | /* * gdt to get us to 32-bit/segmented/unpaged mode | |
| 1991/0710/sys/src/9/pc/l.s:406,409 – 1991/0711/sys/src/9/pc/l.s:416,422 | ||
| 1991/0710 | MOVL SP,0(AX) /* store sp */ MOVL 0(SP),BX /* store return pc */ MOVL BX,4(AX) | |
| 1991/0711 | RET TEXT touser(SB),$0 | |
| 1991/0710 | RET | |
| 1991/0711/sys/src/9/pc/l.s:7,52 – 1991/0715/sys/src/9/pc/l.s:7,39 (short | long) | ||
| 1991/0702 | ||
| 1991/0629 | CLI | |
| 1991/0625 | ||
| 1991/0715 | #ifdef BOOT | |
| 1991/0629 | /* | |
| 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 | |
| 1991/0702 |
| |
| 1991/0715 | /* JMPFAR 0X8000:$lowcore(SB) /**/ | |
| 1991/0629 | BYTE $0xEA | |
| 1991/0710 |
| |
| 1991/0629 |
| |
| 1991/0715 | WORD $lowcore(SB) WORD $0X8000 | |
| 1991/0625 | ||
| 1991/0629 | TEXT lowcore(SB),$0 | |
| 1991/0625 | ||
| 1991/0629 | /* | |
| 1991/0627 | ||
| 1991/0629 |
| |
| 1991/0711/sys/src/9/pc/l.s:56,62 – 1991/0715/sys/src/9/pc/l.s:43,49 | ||
| 1991/0629 | BYTE $0x0f BYTE $0x01 BYTE $0x16 | |
| 1991/0710 |
| |
| 1991/0715 | WORD $tgdtptr(SB) | |
| 1991/0627 | MOVL CR0,AX ORL $1,AX MOVL AX,CR0 | |
| 1991/0711/sys/src/9/pc/l.s:81,91 – 1991/0715/sys/src/9/pc/l.s:68,81 | ||
| 1991/0629 | MOVW AX,ES | |
| 1991/0627 | ||
| 1991/0706 | /* JMPFAR SELECTOR(2, SELGDT, 0):$mode32bit(SB) /**/ | |
| 1991/0715 | BYTE $0x66 | |
| 1991/0629 | BYTE $0xEA | |
| 1991/0710 |
| |
| 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 | |
| 1991/0715/sys/src/9/pc/l.s:342,348 – 1991/0716/sys/src/9/pc/l.s:342,348 (short | long) | ||
| 1991/0703 | POPL DS ADDL $8,SP /* error code and trap type */ IRETL | |
| 1991/0716 | RET /* this has to be here because of ken */ | |
| 1991/0703 | intrscommon: PUSHL DS | |
| 1991/0715/sys/src/9/pc/l.s:355,364 – 1991/0716/sys/src/9/pc/l.s:355,364 | ||
| 1991/0703 | POPL DS ADDL $8,SP /* error code and trap type */ IRETL | |
| 1991/0716 | RET /* this has to be here because of ken */ | |
| 1991/0703 | /* | |
| 1991/0704 |
| |
| 1991/0716 | * interrupt level is interrupts on or off | |
| 1991/0703 | */ | |
| 1991/0704 | TEXT spllo(SB),$0 | |
| 1991/0710 | PUSHFL | |
| 1991/0715/sys/src/9/pc/l.s:366,374 – 1991/0716/sys/src/9/pc/l.s:366,371 | ||
| 1991/0703 | STI | |
| 1991/0704 | RET | |
| 1991/0710 | PUSHFL POPL AX | |
| 1991/0715/sys/src/9/pc/l.s:375,383 – 1991/0716/sys/src/9/pc/l.s:372,377 | ||
| 1991/0704 | CLI | |
| 1991/0703 | RET | |
| 1991/0705 |
| |
| 1991/0710 | MOVL s+0(FP),AX PUSHL AX | |
| 1991/0715/sys/src/9/pc/l.s:409,412 – 1991/0716/sys/src/9/pc/l.s:403,424 | ||
| 1991/0711 | RET TEXT touser(SB),$0 | |
| 1991/0716 | MOVL $(USERADDR+BY2PG-5*BY2WD),AX MOVL $(UTZERO+32),0(AX) /* header is in text */ MOVL $(UESEL),4(AX) MOVL $(IFLAG|2),8(AX) MOVL $(USTKTOP-4*BY2WD),12(AX) MOVL $(UDSEL),16(AX) MOVL AX,SP IRETL /* * save/restore floating point * - to be filled in at some future time */ TEXT fpsave(SB),$0 | |
| 1991/0710 | RET | |
| 1991/0716 | TEXT fprestore(SB),$0 RET | |
| 1991/0716/sys/src/9/pc/l.s:133,138 – 1991/0717/sys/src/9/pc/l.s:133,147 (short | long) | ||
| 1991/0710 | MOVL AX,CR0 /* | |
| 1991/0717 | * use a jump to an absolute location to get the PC into * KZERO. */ LEAL tokzero(SB),AX JMP* AX TEXT tokzero(SB),$0 /* | |
| 1991/0629 | * stack and mach */ MOVL $mach0(SB),SP | |
| 1991/0716/sys/src/9/pc/l.s:206,212 – 1991/0717/sys/src/9/pc/l.s:215,221 | ||
| 1991/0703 | RET /* | |
| 1991/0717 | * routines to load various system registers | |
| 1991/0703 | */ GLOBL idtptr(SB),$6 TEXT lidt(SB),$0 | |
| 1991/0716/sys/src/9/pc/l.s:217,225 – 1991/0717/sys/src/9/pc/l.s:226,231 | ||
| 1991/0703 | MOVL idtptr(SB),IDTR RET | |
| 1991/0716/sys/src/9/pc/l.s:229,234 – 1991/0717/sys/src/9/pc/l.s:235,250 | ||
| 1991/0703 | MOVL gdtptr(SB),GDTR RET | |
| 1991/0717 | TEXT lcr3(SB),$0 MOVL t+0(FP),AX MOVL AX,CR3 RET TEXT ltr(SB),$0 MOVL t+0(FP),AX MOVW AX,TASK RET | |
| 1991/0703 | /* * special traps */ | |
| 1991/0716/sys/src/9/pc/l.s:403,409 – 1991/0717/sys/src/9/pc/l.s:419,425 | ||
| 1991/0711 | RET TEXT touser(SB),$0 | |
| 1991/0716 |
| |
| 1991/0717 | MOVL $(USERADDR+BY2PG-6*BY2WD),AX | |
| 1991/0716 | MOVL $(UTZERO+32),0(AX) /* header is in text */ MOVL $(UESEL),4(AX) MOVL $(IFLAG|2),8(AX) | |
| 1991/0716/sys/src/9/pc/l.s:410,415 – 1991/0717/sys/src/9/pc/l.s:426,433 | ||
| 1991/0716 | MOVL $(USTKTOP-4*BY2WD),12(AX) MOVL $(UDSEL),16(AX) MOVL AX,SP | |
| 1991/0717 | MOVL $(UDSEL),AX /* set up data segment */ MOVW AX,DS | |
| 1991/0716 | IRETL /* | |
| 1991/0717/sys/src/9/pc/l.s:215,224 – 1991/0718/sys/src/9/pc/l.s:215,224 (short | long) | ||
| 1991/0703 | RET /* | |
| 1991/0717 |
| |
| 1991/0718 | * routines to load/read various system registers | |
| 1991/0703 | */ GLOBL idtptr(SB),$6 | |
| 1991/0718 | TEXT putidt(SB),$0 /* interrupt descriptor table */ | |
| 1991/0703 | MOVL t+0(FP),AX MOVL AX,idtptr+2(SB) MOVL l+4(FP),AX | |
| 1991/0717/sys/src/9/pc/l.s:227,233 – 1991/0718/sys/src/9/pc/l.s:227,233 | ||
| 1991/0703 | RET GLOBL gdtptr(SB),$6 | |
| 1991/0718 | TEXT putgdt(SB),$0 /* global descriptor table */ | |
| 1991/0703 | MOVL t+0(FP),AX MOVL AX,gdtptr+2(SB) MOVL l+4(FP),AX | |
| 1991/0717/sys/src/9/pc/l.s:235,250 – 1991/0718/sys/src/9/pc/l.s:235,254 | ||
| 1991/0703 | MOVL gdtptr(SB),GDTR RET | |
| 1991/0717 |
| |
| 1991/0718 | TEXT putcr3(SB),$0 /* top level page table pointer */ | |
| 1991/0717 | MOVL t+0(FP),AX MOVL AX,CR3 RET | |
| 1991/0718 | TEXT puttr(SB),$0 /* task register */ | |
| 1991/0717 | MOVL t+0(FP),AX MOVW AX,TASK RET | |
| 1991/0718 | TEXT getcr2(SB),$0 /* fault address */ MOVL CR2,AX RET | |
| 1991/0703 | /* * special traps */ | |
| 1991/0717/sys/src/9/pc/l.s:350,355 – 1991/0718/sys/src/9/pc/l.s:354,361 | ||
| 1991/0703 | intrcommon: PUSHL DS PUSHAL | |
| 1991/0718 | MOVL $(KDSEL),AX MOVW AX,DS | |
| 1991/0703 | LEAL 0(SP),AX PUSHL AX CALL trap(SB) | |
| 1991/0717/sys/src/9/pc/l.s:358,368 – 1991/0718/sys/src/9/pc/l.s:364,375 | ||
| 1991/0703 | POPL DS ADDL $8,SP /* error code and trap type */ IRETL | |
| 1991/0716 |
| |
| 1991/0703 | intrscommon: PUSHL DS PUSHAL | |
| 1991/0718 | MOVL $(KDSEL),AX MOVW AX,DS | |
| 1991/0703 | LEAL 0(SP),AX PUSHL AX CALL trap(SB) | |
| 1991/0717/sys/src/9/pc/l.s:371,377 – 1991/0718/sys/src/9/pc/l.s:378,383 | ||
| 1991/0703 | POPL DS ADDL $8,SP /* error code and trap type */ IRETL | |
| 1991/0716 |
| |
| 1991/0703 | /* | |
| 1991/0716 | * interrupt level is interrupts on or off | |
| 1991/0717/sys/src/9/pc/l.s:409,414 – 1991/0718/sys/src/9/pc/l.s:415,421 | ||
| 1991/0710 | MOVL 0(AX),SP /* restore sp */ MOVL 4(AX),AX /* put return pc on the stack */ MOVL AX,0(SP) | |
| 1991/0718 | MOVL $1,AX /* return 1 */ | |
| 1991/0710 | RET TEXT setlabel(SB),$0 | |
| 1991/0717/sys/src/9/pc/l.s:416,432 – 1991/0718/sys/src/9/pc/l.s:423,442 | ||
| 1991/0710 | MOVL SP,0(AX) /* store sp */ MOVL 0(SP),BX /* store return pc */ MOVL BX,4(AX) | |
| 1991/0718 | MOVL $0,AX /* return 0 */ | |
| 1991/0711 | RET | |
| 1991/0718 | /* * Used to get to the first process. * Set up an interrupt return frame and IRET to user level. */ | |
| 1991/0711 | TEXT touser(SB),$0 | |
| 1991/0717 |
| |
| 1991/0716 |
| |
| 1991/0717 |
| |
| 1991/0718 | PUSHL $(UDSEL) /* old ss */ PUSHL $(USTKTOP-4*BY2WD) /* old sp */ PUSHFL /* old flags */ PUSHL $(UESEL) /* old cs */ PUSHL $(UTZERO+32) /* old pc */ MOVL $(UDSEL),AX /* set up user's data segment */ | |
| 1991/0717 | MOVW AX,DS | |
| 1991/0716 | IRETL | |
| 1991/0718/sys/src/9/pc/l.s:432,443 – 1991/0719/sys/src/9/pc/l.s:432,444 (short | long) | ||
| 1991/0718 | */ | |
| 1991/0711 | TEXT touser(SB),$0 | |
| 1991/0718 | PUSHL $(UDSEL) /* old ss */ | |
| 1991/0719 | PUSHL $(USTKTOP-16) /* old sp */ | |
| 1991/0718 | PUSHFL /* old flags */ PUSHL $(UESEL) /* old cs */ PUSHL $(UTZERO+32) /* old pc */ | |
| 1991/0719 | MOVL $(UDSEL),AX | |
| 1991/0717 | MOVW AX,DS | |
| 1991/0719 | MOVW AX,ES | |
| 1991/0716 | IRETL /* | |
| 1991/0719/sys/src/9/pc/l.s:9,14 – 1991/0720/sys/src/9/pc/l.s:9,19 (short | long) | ||
| 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 | |
| 1991/0719/sys/src/9/pc/l.s:431,441 – 1991/0720/sys/src/9/pc/l.s:436,446 | ||
| 1991/0718 | * Set up an interrupt return frame and IRET to user level. */ | |
| 1991/0711 | TEXT touser(SB),$0 | |
| 1991/0718 |
| |
| 1991/0719 |
| |
| 1991/0718 |
| |
| 1991/0720 | PUSHL $(UDSEL) /* old ss */ PUSHL $(USTKTOP) /* old sp */ PUSHFL /* old flags */ PUSHL $(UESEL) /* old cs */ PUSHL $(UTZERO+32) /* old pc */ | |
| 1991/0719 | MOVL $(UDSEL),AX | |
| 1991/0717 | MOVW AX,DS | |
| 1991/0719 | MOVW AX,ES | |
| 1991/0720/sys/src/9/pc/l.s:347,352 – 1991/0731/sys/src/9/pc/l.s:347,384 (short | long) | ||
| 1991/0706 | PUSHL $0 PUSHL $23 JMP intrcommon | |
| 1991/0731 | TEXT intr24(SB),$0 PUSHL $0 PUSHL $24 JMP intrcommon TEXT intr25(SB),$0 PUSHL $0 PUSHL $25 JMP intrcommon TEXT intr26(SB),$0 PUSHL $0 PUSHL $26 JMP intrcommon TEXT intr27(SB),$0 PUSHL $0 PUSHL $27 JMP intrcommon TEXT intr28(SB),$0 PUSHL $0 PUSHL $28 JMP intrcommon TEXT intr29(SB),$0 PUSHL $0 PUSHL $29 JMP intrcommon TEXT intr30(SB),$0 PUSHL $0 PUSHL $30 JMP intrcommon TEXT intr31(SB),$0 PUSHL $0 PUSHL $31 JMP intrcommon | |
| 1991/0710 | TEXT intr64(SB),$0 PUSHL $0 PUSHL $64 | |
| 1991/0731/sys/src/9/pc/l.s:488,490 – 1991/0806/sys/src/9/pc/l.s:488,500 (short | long) | ||
| 1991/0716 | TEXT fprestore(SB),$0 RET | |
| 1991/0806 | /* * set configuration register */ TEXT config(SB),$0 MOVL l+0(FP),AX MOVL $0x3F3,DX OUTB OUTB RET | |
| 1991/0806/sys/src/9/pc/l.s:390,403 – 1991/0807/sys/src/9/pc/l.s:390,406 (short | long) | ||
| 1991/0703 | intrcommon: PUSHL DS | |
| 1991/0807 | PUSHL ES | |
| 1991/0703 | PUSHAL | |
| 1991/0718 | MOVL $(KDSEL),AX MOVW AX,DS | |
| 1991/0807 | MOVW AX,ES | |
| 1991/0703 | LEAL 0(SP),AX PUSHL AX CALL trap(SB) POPL AX POPAL | |
| 1991/0807 | POPL ES | |
| 1991/0703 | POPL DS ADDL $8,SP /* error code and trap type */ IRETL | |
| 1991/0806/sys/src/9/pc/l.s:404,417 – 1991/0807/sys/src/9/pc/l.s:407,423 | ||
| 1991/0703 | intrscommon: PUSHL DS | |
| 1991/0807 | PUSHL ES | |
| 1991/0703 | PUSHAL | |
| 1991/0718 | MOVL $(KDSEL),AX MOVW AX,DS | |
| 1991/0807 | MOVW AX,ES | |
| 1991/0703 | LEAL 0(SP),AX PUSHL AX CALL trap(SB) POPL AX POPAL | |
| 1991/0807 | POPL ES | |
| 1991/0703 | POPL DS ADDL $8,SP /* error code and trap type */ IRETL | |
| Too many diffs (26 > 25). Stopping. | ||