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.
@nina_kali_nina Oh, and I've got Soft-Ice 2.8 for DOS lying around as well for live debugging. https://misc.tcp80.org/sidos-28.zip

Used to be very well regarded.
@be0ba yep, this is what I used for this project before I managed to cobble up a working Bochs install. For some reason VisiOn crashes under SoftIce, I think SoftIce might notn be catching all the required interrupts