prtsc3.asm
上传用户:xiaoan1112
上传日期:2013-04-11
资源大小:19621k
文件大小:2k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. ;*
  2. ;* COW : Character Oriented Windows
  3. ;*
  4. ;* prtsc.asm : ^PrtSc stuff.
  5. include kernel.inc
  6. include inscr.inc ;* for inst
  7. ;----------------------------------------------------------------------------
  8. externFP <HandlerInt05Dead>
  9. ;----------------------------------------------------------------------------
  10. sBegin DATA
  11.     assumes DS,DATA
  12. externB fGrabInt05
  13. externW OFF_pfnHdlrInt05
  14. externW SEG_pfnHdlrInt05
  15. sEnd DATA
  16. ;----------------------------------------------------------------------------
  17. sBegin INIT
  18.     assumes CS,INIT
  19.     assumes SS,DATA
  20.     assumes DS,DATA
  21. ;----------------------------------------------------------------------------
  22. ;
  23. ; Reroute interrupt 05 (^PrtSc) if necessary.
  24. ;
  25. ;   entry:  ds:bx -> inst structure.
  26. ;
  27. ;   preserve BX!
  28. segROM equ 0F000h
  29.     assumes CS,INIT
  30.     assumes DS,DGROUP
  31.     assumes SS,DGROUP
  32.     assumes ES,NOTHING
  33. cProc ReroutePrtSc,<FAR,PUBLIC,ATOMIC>
  34. cBegin ReroutePrtSc
  35. cmp fGrabInt05,0 ; If latch is dropped, int05
  36. jne dontgrab ;   is already rerouted okay.
  37. mov ax,SEG_pfnHdlrInt05 ; AX:DX -> the original
  38. mov dx,OFF_pfnHdlrInt05 ;   int05 vector.
  39. cmp ax,segROM ; If the old int05 didn't
  40. jne @F ;   point to ROM, use it.
  41. test [bx].finstInst,finstGraphics ; If we're not going to gfx
  42. jz @F ;   mode, use old int05.
  43. mov ax,SEG kernelBase ; Gfx mode w/ ROM int05:
  44. mov dx,kernelOffset HandlerInt05Dead ;   reroute to dead routine.
  45. @@:
  46. push ds
  47. mov ds,ax ; DS:DX -> new int05 vector.
  48.     assumes ds,NOTHING
  49. mov ax,2505h
  50. int 21h
  51. pop ds
  52.     assumes ds,DGROUP
  53. dontgrab:
  54. cEnd ReroutePrtSc
  55. sEnd INIT
  56. ;----------------------------------------------------------------------------
  57. END