diff --git a/mach/i86/libem/LIST b/mach/i86/libem/LIST index 79c36416b..42f99f0d0 100644 --- a/mach/i86/libem/LIST +++ b/mach/i86/libem/LIST @@ -8,6 +8,8 @@ cmu4.s com.s csa2.s csb2.s +csa4.s +csb4.s cuu.s dup.s dvi.s diff --git a/mach/i86/libem/csa4.s b/mach/i86/libem/csa4.s new file mode 100644 index 000000000..43157fcec --- /dev/null +++ b/mach/i86/libem/csa4.s @@ -0,0 +1,30 @@ +.sect .text; .sect .rom; .sect .data; .sect .bss +.define .csa4 + +.sect .text +.csa4: + ! bx, descriptor address + ! ax, dx: index + mov cx,(bx) ! default + sub ax,2(bx) + ! ignore high order word; if non-zero, the + ! case descriptor would not fit anyway + cmp ax,6(bx) + ja 1f +2: + sal ax,1 + add bx,ax + mov bx,10(bx) + test bx,bx + jnz 2f +1: + mov bx,cx + test bx,bx + jnz 2f +.extern ECASE +.extern .fat + mov ax,ECASE + push ax + jmp .fat +2: + jmp bx diff --git a/mach/i86/libem/csb4.s b/mach/i86/libem/csb4.s new file mode 100644 index 000000000..bdb812f1c --- /dev/null +++ b/mach/i86/libem/csb4.s @@ -0,0 +1,33 @@ +.sect .text; .sect .rom; .sect .data; .sect .bss +.define .csb4 + +.sect .text +.csb4: + !bx: descriptor address + !ax, dx: index + push (bx) ! default + mov cx,2(bx) ! count (ignore high order word, the descriptor + ! would not fit anyway) +1: + add bx,6 + dec cx + jl 4f + cmp ax,(bx) + jne 1b + cmp dx,2(bx) + jne 1b + pop bx + mov bx,4(bx) +2: + test bx,bx + jnz 3f +.extern ECASE +.extern .fat + mov ax,ECASE + push ax + jmp .fat +3: + jmp bx +4: + pop bx + jmp 2b