]> git.lizzy.rs Git - plan9front.git/blobdiff - sys/src/boot/pc/l.s
9boot: replace strrchr() call with a loop and strchr() for ignoring bang path prefixes
[plan9front.git] / sys / src / boot / pc / l.s
index 347f403e566c68c97d8b1cd453960a35b5598529..0858288ecf38815a2c57a74bed4b2d31e2dcd545 100644 (file)
@@ -25,14 +25,6 @@ TEXT origin(SB), $0
 TEXT pmode32(SB), $0
        CLI
 
-       /* disable nmi */
-       PUSHA
-       LWI(0x70, rDX)
-       INB
-       ANDB $0x7F, AL
-       OUTB
-       POPA
-
        /* get return pc */
        POPR(rDI)
 
@@ -79,9 +71,6 @@ TEXT rmode16(SB), $0
        JMP _segret
 
 TEXT rmode16x(SB), $0
-       /* reload idt */
-       SEGSS; LIDT(tidtptr(SB))
-
        /* disable protected mode */
        MFCR(rCR0, rCX)
        ANDB $0xfe, CL
@@ -124,10 +113,6 @@ TEXT tgdtptr(SB), $0
          WORD $(5*8) 
          LONG $tgdt(SB)
 
-TEXT tidtptr(SB), $0
-       WORD $0x3ff
-       LONG $0
-
 TEXT jump(SB), $0
        MOVL 4(SP), AX
        JMP *AX
@@ -136,21 +121,9 @@ TEXT halt(SB), $0
 _halt:
        JMP _halt
 
-TEXT spllo(SB), $0
-       /* enable nmi */
-       PUSHA
-       LWI(0x70, rDX)
-       INB
-       ORB $0x80, AL
-       OUTB
-       POPA
-
-       STI
-       RET
-
 TEXT getc(SB), $0
        CALL rmode16(SB)
-       CALL16(spllo(SB))
+       STI
        MOVB $0x00, AH
        BIOSCALL(0x16)
 _getcret:
@@ -160,7 +133,7 @@ _getcret:
 
 TEXT gotc(SB), $0
        CALL rmode16(SB)
-       CALL16(spllo(SB))
+       STI
        MOVB $0x01, AH
        BIOSCALL(0x16)
        JNZ _getcret
@@ -170,7 +143,7 @@ TEXT gotc(SB), $0
 TEXT putc(SB), $0
        MOVL 4(SP),AX
        CALL rmode16(SB)
-       CALL16(spllo(SB))
+       STI
        MOVB $0x0E, AH
        BIOSCALL(0x10)
 _pret32:
@@ -178,8 +151,46 @@ _pret32:
        ANDL $0xFFFF, AX
        RET
 
+TEXT usleep(SB), $0
+       MOVL t+4(SP), AX
+       PUSHL AX
+       CALL rmode16(SB)
+       STI
+       POPR(rDX)
+       POPR(rCX)
+       MOVB $0x86, AH
+       BIOSCALL(0x15)
+       JMP _pret32
+
 #ifdef PXE
 
+TEXT pxeinit(SB), $0
+       CALL rmode16(SB)
+
+       /* get pxe env structure in ES:BX */
+       LWI(0x5650, rAX)
+       BIOSCALL(0x1A)
+       JC _pret32
+
+       /* !PXE or PXEENV+ signature */
+       SEGES; LXW(0, xBX, rAX)
+       CMPI((('!'<<0)|('P'<<8)), rAX)
+       JEQ _getentry
+       CMPI((('P'<<0)|('X'<<8)), rAX)
+       JNE _pret32
+
+       SEGES; LXW(0x2A, xBX, rAX)
+       SEGES; LXW(0x28, xBX, rBX)
+       MTSR(rAX, rES)
+
+_getentry:
+       SEGES; LXW(0x12, xBX, rAX)
+       SW(rAX, pxepseg(SB))
+       SEGES; LXW(0x10, xBX, rAX)
+       SW(rAX, pxepoff(SB))
+       CLR(rAX)
+       JMP _pret32
+
 TEXT pxecallret(SB), $0
        ADDI(6, rSP)
        JMP _pret32
@@ -200,29 +211,12 @@ TEXT pxecall(SB), $0
        PUSHR(rCX)
        PUSHI(pxecallret(SB))
 
-       /* get pxe env structure in ES:BX */
-       LWI(0x5650, rAX)
-       BIOSCALL(0x1A)
-       JC _farret
-
-       /* !PXE or PXEENV+ signature */
-       SEGES; LXW(0, xBX, rAX)
-       CMPI((('!'<<0)|('P'<<8)), rAX)
-       JEQ _getentry
-       CMPI((('P'<<0)|('X'<<8)), rAX)
-       JNE _farret
-
-       SEGES; LXW(0x2A, xBX, rAX)
-       SEGES; LXW(0x28, xBX, rBX)
-       MTSR(rAX, rES)
-
-_getentry:
-       SEGES; LXW(0x12, xBX, rAX)
+       LW(pxepseg(SB), rAX)
        PUSHR(rAX)
-       SEGES; LXW(0x10, xBX, rAX)
+       LW(pxepoff(SB), rAX)
        PUSHR(rAX)
 
-       CALL16(spllo(SB))
+       STI
 
        CLR(rAX)
        CLR(rBX)
@@ -230,9 +224,13 @@ _getentry:
        CLR(rDX)
        CLR(rDI)
        CLR(rSI)
-_farret:
        FARRET
 
+TEXT pxepseg(SB), $0
+       WORD $0
+TEXT pxepoff(SB), $0
+       WORD $0
+
 #else /* PXE */
 
 /*
@@ -279,7 +277,7 @@ TEXT readsect(SB), $0
        MOVW 10(SP), BX
        MOVL 12(SP), SI 
        CALL rmode16(SB)
-       CALL16(spllo(SB))
+       STI
        CALL16(readsect16(SB))
        CALL16(pmode32(SB))
        ANDL $0xFFFF, AX