@@ -8,6 +8,8 @@ cmu4.s
com.s
csa2.s
csb2.s
+csa4.s
+csb4.s
cuu.s
dup.s
dvi.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
+.extern ECASE
+.extern .fat
+ mov ax,ECASE
+ push ax
+ jmp .fat
+ jmp bx
@@ -0,0 +1,33 @@
+.define .csb4
+.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)
+ add bx,6
+ dec cx
+ jl 4f
+ cmp ax,(bx)
+ jne 1b
+ cmp dx,2(bx)
+ pop bx
+ mov bx,4(bx)
+ jnz 3f
+3:
+4:
+ jmp 2b