
r word [0:413] -= 2
r v0 = word [0:413]
r v1 = v0 + 1
r v0 *= #1024 / #16
r v1 *= #1024 / #16

f v0:0 l #1024 26
f v1:0 l #1024 CC
f v1:0 l 10 0
a v1:10
 cmp ax, 4300
 je 20
 cmp ax, 4310
 je 30
 jmp 0:0
 .
r v2 = aao - 4
a v1:20
 mov al, 80
 iret
 .
a v1:30
 push cs
 pop es
 mov bx, 40
 iret
 .
a v1:40
 jmp short 45
 nop
 nop
 nop
 cmp ah, 10
 je 50
 .
r v3 = aao
a
 xor ax, ax		; error
 mov bl, 80		; not implemented
 retf
 .
a v1:50
 cmp byte [cs:10], EB
 je 80
 cmp dx, (#1024 / #16 - v4)
 ja 70
 jb (v3)		; if requested smaller -->
 mov ax, 1		; success
 mov bx, (v0 + v4)	; => UMB, dx = size
 mov word [cs:10], (EB + (v2 - 1 - 12) * 100)
 retf
 .
a v1:70
 xor ax, ax		; error
 mov bl, B0		; only a smaller UMB
 mov dx, (#1024 / #16 - v4)
 retf
 .
a v1:80
 xor ax, ax		; error
 mov bl, B1		; no UMB available
 xor dx, dx		; largest available
 retf
 .
rc.replace r vf = ri2Fp; r dword [v1:v2] = vf; r dword [0:2F * 4] = v1*10000 + 10
