Arrgh, Ghidra keeps creating thunk functions when there are none :/ This code is particularly Ghidra-unfriendly. I feel like I should switch to some old-school x86 disassembler instead of Ghidra T_T
@nina_kali_nina https://misc.tcp80.org/listing.zip <-- MASM 6.11 compatible syntax disassembly and xrefs of vision.exe and visionat.exe
(from http://toastytech.com/guis/visionzip.zip)

https://misc.tcp80.org/sourcer7.zip <-- Sourcer 7 for DOS
IIRC, it runs correctly but very slowly under dosbox. I just run it in PC-DOS 7 under qemu.

I personally can't imagine it'll have better output than Ghidra, but I never have been good at reverse engineering.
@be0ba thanks a lot! I checked the listings, they're about the same as what Ghidra gives, of course. I will continue with Ghidra as it can decompile some of the C code and save me the trouble of unwinding the stack frame
@nina_kali_nina You're quite welcome. Sorry they weren't more useful, but it's hard for 1997 tech to beat a modern decompiler. :P