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

操作系统开发

开发平台:

Visual C++

  1. ;*
  2. ;* CW : Character Windows Drivers
  3. ;*
  4. ;* fx_syd3.asm : linked in DOS 3 SYD file
  5. ;*****************************************************************************
  6. include syd_head.inc
  7. include fxdrv.inc
  8. include syd_data.inc
  9. ;* * OS2 global info
  10. include glis.inc
  11. ;*****************************************************************************
  12. include fx_data.asm
  13. ;*****************************************************************************
  14. sBegin DRV
  15.     assumes CS,DRV
  16.     assumes ds,NOTHING
  17.     assumes ss,NOTHING
  18. IF cbDataSyd NE 0
  19. ;* * There is no low memory structure for the linked driver
  20. OFF_lpwDataSyd DW dataOffset rgwDataSyd
  21. ENDIF
  22. ;*****************************************************************************
  23. NonStandard DoSoundSyd
  24. NonStandard LGetTimeSyd
  25. ;*****************************************************************************
  26. ;********** DoSoundSyd **********
  27. ;* * SYD entry point (see documentation for interface)
  28. cProc DoSoundSyd, <FAR, PUBLIC, ATOMIC>
  29.     parmW  req
  30. cBegin DoSoundSyd
  31. mov cx,req ;* 0=> beep, 1=> click
  32. jcxz do_beep
  33. dec cx
  34. jnz end_sound
  35. ;* * do click (440Hz, 10ms)
  36. mov ax,440
  37. mov cx,10
  38. jmp short do_sound
  39. ;* * do beep (880Hz, 50ms)
  40. do_beep:
  41. mov ax,440*2
  42. mov cx,50
  43. do_sound:
  44. mov bx,pinos
  45. cCall [bx].lpfnDosBeepInos,<ax, cx>
  46. end_sound:
  47. cEnd DoSoundSyd
  48. ;*****************************************************************************
  49. ;*****************************************************************************
  50. ;********** LGetTimeSyd **********
  51. ;* * SYD entry point (see documentation for interface)
  52. cProc LGetTimeSyd, <FAR, PUBLIC, ATOMIC>
  53. cBegin LGetTimeSyd
  54. mov bx,pinos
  55. mov es,[bx].sdGlisInos
  56. xor bx,bx
  57. reget_loop:
  58. mov cx,word ptr es:[bx].msGlis ;* low word
  59. mov ax,word ptr es:[bx].msGlis + 2 ;* high word
  60. cmp cx,word ptr es:[bx].msGlis ;* tick changed ?
  61. jnz reget_loop
  62. ;* * ax:cx = ms tick resolution (convert to 1/18th sec)
  63. mov bx,55 ;* divide value
  64. xor dx,dx
  65. div bx ;* ax = quotient,
  66. ;*  dx = remainder
  67. push ax ;* high word
  68. mov ax,dx ;* remainder
  69. mul bx ;* dx:ax = remainder*55
  70. add ax,cx
  71. adc dx,0
  72. div bx ;* ax = remainder
  73. pop dx
  74. ;* * dx:ax = system time / 55
  75. cEnd LGetTimeSyd
  76. ;*****************************************************************************
  77. include syd_std.asm ;* standard init/term
  78. include syd_tail.asm ;* tail file
  79. ;*****************************************************************************
  80. END