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.