It doesn't work because you use the same
segment pointer for array and screen:
mov bx,[di] -> mov bx, ds:[di] -> mov bx, 0B800h:[di]
but it should be
mov bx,[di] -> mov bx, ds:[di] -> mov bx, data:[di]
So, you can modify your example as following:
main proc
call outline
;this section...