if (v3 != 0) then y :freev3
if (v4 == 0) then r v4 := 0FF1
if (v5 == 0) then r v5 := FF00
k testbigc.com
f 100 FFFF CC
a 100
 retn
 .
r bxcx := v5
w 100
r byte [cs:ip + 1] := -1			; workaround
l
if (rc) then goto :eof				; this doesn't work really
if (byte [cs:ip + 1] != CC) then goto :eof	; workaround
f 100 l 400 CC
a 100
 mov ah, 4A
 mov bx, 1000
 int 21
 xor ax, ax
 xchg ax, [2C]
 dec ax
 mov es, ax
 mov bx, word [es:3]
 inc ax
 mov es, ax
 mov ah, 49
 int 21
 add bx, (v4)
 mov ah, 48
 int 21
 jc 180
 push ax
 .
r v0 := aao
a
 mov ah, 48
 mov bx, -1
 int 21
 mov ah, 48
 int 21
 jnc (v0)
 pop es
 mov ah, 49
 int 21
 xor bx, bx
 .
r v1 := aao
a
 mov ah, 3E
 int 21
 inc bx
 cmp bx, 20
 jb (v1)
 mov ax, 3100
 mov dx, 1000
 int 21
 .
r v3 := psp
goto :eof

:freev3
. push es
. push bx
. push ax
. mov ah, 52
. int 21
r v10 := word [es:bx - 2]
. pop ax
. pop bx
. pop es
r v11 := 0
:freeloop
if (! value byte [$v10:0] in #'M', #'Z') then goto :freeerror
if (word [$v10:1] == v3) then r word [$v10:1] := 0
if (byte [$v10:0] == #'Z') then goto :freeend
r v10 += word [$v10:3] + 1
r v11 += 1
if (v11 > FFFF) then goto :freeerror
goto :freeloop

:freeerror
; Error during MCB freeing!
goto :eof

:freeend
; Freed
r v3 := 0
