Hello fjrp2 !
It looks to me like program executes INT 01 instead of INT 21 to prevent single stepping through the code.
So both INT 01 and INT 21 point to the old INT 21 handler. I don't know why you want to know when INT 01 and when INT 21 are executed, since they're equal, and I don't know what you want to do with it. If you plan to single-step through the application, you must redirect the INT 01 handler a bit. However, I don't know how to do this in SoftICE, but Turbo Debugger will handle this fine.
You should redirect the INT 01 to some memory location where you some bytes for your own code. (I use 9F?0:0000 most time)
At this location you place some code like
Code:
Push BP
Mov BP, SP
Cmp Word Ptr SS:[BP+4], 01CDh ; Look if called by INT 01
Pop BP
Je EmulateINT
Jmp SegmentOldINT01:OffsetOldINT01 ; normal INT 01 by TF, call debugger INT 01
EmulateINT:
Jmp SegmentINT21:OffsetINT21 ; call was by direct INT 01, call INT 21 instead
I didn't care about the flags here, but you can add some code to handle them if you like.
So when you're tracing code, TD's INT 01 will be called, but if you step over an INT 01 call, the original INT 21 will be called, since TD places an INT 03 after the INT 01 call and executes the INT 01 call normally. You can even set breakpoints with this.