many fixes, found by actually running the code
authorceriel <none@none>
Tue, 10 Oct 1989 11:38:18 +0000 (11:38 +0000)
committerceriel <none@none>
Tue, 10 Oct 1989 11:38:18 +0000 (11:38 +0000)
12 files changed:
mach/i386/libem/cii.s
mach/i386/libem/exg.s
mach/i386/libem/iaar.s
mach/i386/libem/ior.s
mach/i386/libem/lar4.s
mach/i386/libem/loi.s
mach/i386/libem/nop.s
mach/i386/libem/sar4.s
mach/i386/libem/set.s
mach/i386/libem/sti.s
mach/i386/libem/stop.s
mach/i386/libem/trp.s

index 60a3c5b..0ad7ce3 100644 (file)
@@ -9,9 +9,7 @@
                                ! eax is source
        cmp     edx,1
        jne     2f
-       o16 cbw                 ! needs operand size toggle to convert
-                               ! from one to two bytes.
-       cwde
+       movsxb  eax,al
        mov     edx,4
        jmp     1f
 2:
index d491dff..ad693db 100644 (file)
@@ -5,7 +5,7 @@
 .sect .text
 .exg:
        push    edi
-       mov     esp,edi
+       mov     edi,esp
        add     edi,8
        mov     ebx,edi
        add     ebx,ecx
@@ -14,6 +14,8 @@
        mov     eax,(ebx)
        xchg    eax,(edi)
        mov     (ebx),eax
+       add     edi,4
+       add     ebx,4
        loop    1b
 2:
        pop     edi
index af9fd28..b74dc3f 100644 (file)
@@ -8,12 +8,11 @@
        cmp     edx,4
 .extern .unknown
        jne     .unknown
-       pop     ebx      ! descriptor address
-       pop     eax      ! index
-       pop     edx      ! array base
+       pop     ebx     ! descriptor address
+       pop     eax     ! index
        sub     eax,(ebx)
        mul     8(ebx)
-       mov     ebx,edx
+       pop     ebx     ! array base
        add     ebx,eax
        push    ecx
        ret
index ac40fb4..3981ff5 100644 (file)
@@ -8,7 +8,7 @@
        mov     edx,edi
        mov     edi,esp
        add     edi,ecx
-       sar     ecx,1
+       sar     ecx,2
 1:
        pop     eax
        or      eax,(edi)
index 4eaa070..643ec96 100644 (file)
@@ -5,18 +5,16 @@
 .lar4:
                                ! ebx, descriptor address
                                ! eax, index
-       pop     ecx
-       pop     edx             ! base address
-       push    ecx
        sub     eax,(ebx)
        mov     ecx,8(ebx)
        imul    ecx
+       pop     ebx
+       pop     edx             ! base address
        add     edx,eax
        sar     ecx,1
        jnb     1f
        xor     eax,eax
        movb    al,(edx)
-       pop     ebx
        push    eax
        jmp     ebx
 1:
        jnb     1f
        xor     eax,eax
        o16 mov ax,(edx)
-       pop     ebx
        push    eax
        jmp     ebx
 1:
-       mov     edx,esi         ! saved esi
-       mov     eax,8(ebx)
-       pop     ebx             ! return address
+       xchg    edx,esi         ! saved esi
+       mov     eax,ecx
+       sal     eax,2
        sub     esp,eax
        mov     eax,edi         ! save edi
        mov     edi,esp
index b1919ee..c0ed170 100644 (file)
        mov     eax,ecx
        sar     ecx,1
        jnb     1f
-       xor     eax,eax
-       movb    al,(edx)
+       movsxb  eax,(ebx)
        push    eax
        jmp     edx
 1:
        sar     ecx,1
        jnb     1f
-       xor     eax,eax
-       o16 mov ax,(edx)
+       movsx   eax,(ebx)
        push    eax
        jmp     edx
 1:
-       mov     ebx,edx
+       push    edx
        mov     edx,esi
+       mov     esi,ebx
+       pop     ebx
        sub     esp,eax
        jmp     1f
 
index c0f59f2..46fbbb7 100644 (file)
@@ -3,22 +3,8 @@
 .define .nop
 .extern printd, printc, hol0
 
-SIO_S           = 0xDA
-SIO_D           = 0xD8
-RXRDY           = 0x02
-
 .nop:
        mov     eax,(hol0)
        call    printd
-!       movb    al,' '
-!       call    printc
-!       mov     eax,esp
-!       call    printd
-!1:
-!       inb     SIO_S
-!       andb    al,RXRDY
-!       jz      1b
-!       inb     SIO_D
-!       call    printc
        movb    al,'\n'
        jmp     printc
index 2cbeef6..52a1f61 100644 (file)
@@ -5,30 +5,24 @@
 .sar4:
                                ! ebx, descriptor address
                                ! eax, index
-       pop     ecx
-       pop     edx             ! base address
-       push    ecx
        sub     eax,(ebx)
        mov     ecx,8(ebx)
-       push    edx
        imul    ecx
-       pop     edx
+       pop     ebx
+       pop     edx             ! base address
        add     edx,eax
        sar     ecx,1
        jnb     1f
-       pop     ebx
        pop     eax
        movb    (edx),al
        jmp     ebx
 1:
        sar     ecx,1
        jnb     1f
-       pop     ebx
        pop     eax
        o16 mov (edx),ax
        jmp     ebx
 1:
-       pop     ebx
        xchg    edi,edx         ! edi = base address, edx is saved edi
        mov     eax,esi
        mov     esi,esp
index 0f334bc..3493eac 100644 (file)
@@ -13,9 +13,9 @@
        push    edi
        mov     ebx,esp
        xor     edi,edi
-       sar     ecx,1
+       sar     ecx,2
 1:
-       mov     4(ebx)(edi),edx
+       mov     8(ebx)(edi),edx
        add     edi,4
        loop    1b
 !endif
index 4bd0e1a..12385ee 100644 (file)
        o16 mov (ebx),ax
        jmp     edx
 1:
-       mov     ebx,edx
+       push    edx
        mov     edx,edi
+       mov     edi,ebx
+       pop     ebx
        jmp     1f
 .sti:
        ! only called with count >> 4
index fbf0e69..16d55c6 100644 (file)
@@ -2,4 +2,4 @@
 .sect .text
 .define .stop
 .stop:
-       int     3
+       jmp     _exit
index 4292fe3..24af0e6 100644 (file)
@@ -14,4 +14,5 @@
        pop     eax
        ret
 2:
+       push    eax
        call    .stop