pivec.s
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:3k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. ; :ts=8
  2. include asmglobal.h
  3. extrn Stktop,Spsave,Sssave,piint:proc,doret:proc,eoi:proc
  4. DMAEN equ 4
  5. .DATA
  6. public acc_delay
  7. acc_delay dw 0
  8. .CODE
  9. dbase dw @Data ; save loc for ds (must be in code segment)
  10. public mloop
  11. mloop proc
  12. mov cx,65535
  13. Loop7:
  14. nop
  15. loop Loop7
  16. ret
  17. mloop endp
  18. public wrtscc
  19. wrtscc proc
  20. arg cbase:word,ctl:word,reg:word,val:word
  21. pushf
  22. cli
  23. mov dx,cbase ; get address of dma enable port
  24. add dx,DMAEN
  25. mov al,0 ; Write a 0 to disable DMA while we touch the scc
  26. out dx,al
  27. mov cx,acc_delay
  28. Loop1: nop
  29. loop Loop1
  30. mov dx,ctl ; Get address of scc control reg
  31. mov ax,reg ; Select register
  32. out dx,al
  33. mov cx,acc_delay
  34. Loop2: nop
  35. loop Loop2
  36. mov ax,val ; Output value
  37. out dx,al
  38. mov cx,acc_delay
  39. Loop3: nop
  40. loop Loop3
  41. mov dx,cbase ; get address of dma enable port
  42. add dx,DMAEN
  43. mov al,1 ; Enable DMA
  44. out dx,al
  45. POPFLAGS
  46. ret
  47. wrtscc endp
  48. public rdscc
  49. rdscc proc
  50. arg cbase:word,ctl:word,reg:byte
  51. pushf
  52. cli
  53. mov dx,cbase ; Get address of dma enable port
  54. add dx,DMAEN;
  55. mov al,0 ; Disable DMA while we touch the scc
  56. out dx,al;
  57. mov cx,acc_delay
  58. Loop4: nop
  59. loop Loop4
  60. mov dx,ctl ; Get address of SCC control reg
  61. mov al,reg ; Select register
  62. out dx,al;
  63. mov cx,acc_delay
  64. Loop5: nop
  65. loop Loop5
  66. in al,dx ; read register
  67. xor ah,ah
  68. push ax ; save return value
  69. mov cx,acc_delay
  70. Loop6: nop
  71. loop Loop6
  72. mov dx,cbase ; get address of dma enable port
  73. add dx,DMAEN
  74. mov al,1 ; Enable DMA
  75. out dx,al
  76. pop ax ; recover return value
  77. POPFLAGS
  78. ret
  79. rdscc endp
  80. ; pi0vec - Pi card #0 interrupt handler
  81. public pi0vec
  82. label pi0vec far
  83. cld
  84. push ds ; save on user stack
  85. mov ds,cs:dbase ; establish interrupt data segment
  86. mov Sssave,ss ; stash user stack context
  87. mov Spsave,sp
  88. mov ss,cs:dbase
  89. lea sp,Stktop
  90. PUSHALL
  91. push es
  92. call eoi
  93. mov ax,0 ; arg for service routine
  94. push ax
  95. call piint
  96. inc sp
  97. inc sp
  98. jmp doret
  99. ; pi1vec - Pi card #1 interrupt handler
  100. public pi1vec
  101. label pi1vec far
  102. cld
  103. push ds ; save on user stack
  104. mov ds,cs:dbase ; establish interrupt data segment
  105. mov Sssave,ss ; stash user stack context
  106. mov Spsave,sp
  107. mov ss,cs:dbase
  108. lea sp,Stktop
  109. PUSHALL
  110. push es
  111. call eoi
  112. mov ax,1 ; arg for service routine
  113. push ax
  114. call piint
  115. inc sp
  116. inc sp
  117. jmp doret
  118. ; pi2vec - Pi card #2 interrupt handler
  119. public pi2vec
  120. label pi2vec far
  121. cld
  122. push ds ; save on user stack
  123. mov ds,cs:dbase ; establish interrupt data segment
  124. mov Sssave,ss ; stash user stack context
  125. mov Spsave,sp
  126. mov ss,cs:dbase
  127. lea sp,Stktop
  128. PUSHALL
  129. push es
  130. call eoi
  131. mov ax,2 ; arg for service routine
  132. push ax
  133. call piint
  134. inc sp
  135. inc sp
  136. jmp doret
  137. end