[comp.sys.ibm.pc] Scrambled DOS-to-BIOS Function Calls

tcamp@ecsvax.UUCP (Ted A. Campbell) (06/26/87)

I have written an interrupt handler that replaces interrrupt type 
0x10--the video display BIOS interrupt.  This interrupt handler
works well with direct calls to it, and with some DOS calls that
call it indirectly.

However, sometimes the function call in the AH register is odd when
it comes from DOS.  For example, if I do a DOS interrupt call 
(type 0x21) with function 2 to display an asterisk (ASCII code
0x2a), the DOS interrupt calls the video display interrupt (0x10)
with the correct value for the character in AL (0x2a), but with 
the function call for the BIOS interrupt set to 0xf1 (!), when 
it should be 0x9, 0xa, or (more likely) 0xe.  

Anyone have an idea as to why AH is getting scrambled between the
DOS interrupt and the video interrupt it calls?  Perhaps I've not
understood the process thoroughly.

tcamp@ecsvax
Ted A. Campbell
Duke University
Durham, NC

ward@chinet.UUCP (ward) (06/29/87)

You say that when hacking INT 10 you find that DOS doing function 2 with
an * sends a function of f1 to int 10?
  I tried your example on both DOS 2.0 and 3.2 - and found INT 10 being
called with function 9 in both cases.  I'm using the Periscope debugger,
and here's what I got:
>a   <-- assemble
42DC:0100 mov ax,200
42DC:0103 mov dx,2a
42DC:0106 int 21
42DC:0108 int 3
42DC:0109
>bi 10   <-- break when interrupt 10 executed
/E>/t #  <-- trace all interrupts
/E>gt    <-- go in trace mode
AX=092A  BX=0006  CX=0001  DX=002A  SP=0BA8  BP=0000  SI=00FD  DI=0000
DS=0526  ES=42DC  SS=00E5  CS=0526  IP=0154  FL=F206 NV UP EI PL NZ NA PE NC
 WR SS:0BA2 = 0154 0526 DFF0
0526:0154 CD10           INT    10
  The above is the register/instruction dump when the next int 10 was
executed.  As you can see, the function is 9.
  I suspect you have something "strange" in your system - a multi-tasker,
or some TSR or ??.  Try it on an autoexec-less and config-less system.