home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / c / c_tutor / h / mhdr_asm < prev   
Encoding:
Text File  |  1992-11-14  |  8.9 KB  |  242 lines

  1.         PAGE    60, 132
  2. TITLE   HDR     22-Feb-85       Device Driver Header                    |
  3.  
  4. ;-----------------------------------------------------------------------|
  5. ;                                                                       |
  6. ;       Device Driver Library                                           |
  7. ;               Device Driver Header                                    |
  8. ;                                                                       |
  9. ;-----------------------------------------------------------------------|
  10. ;       REVISION HISTORY                                                |
  11. ;                                                                       |
  12. ; Number    DD-MMM-YY             WHO                   WHY             |
  13. ;-------|---------------|-----------------------|-----------------------|
  14. ; 0.0   |   22-Feb-85   | Frank Whaley          | Initial Release       |
  15. ;-----------------------------------------------------------------------|
  16.  
  17.         PAGE
  18. ;-----------------------------------------------------------------------|
  19. ;       Equates                                                         |
  20. ;-----------------------------------------------------------------------|
  21.  
  22. StkSiz  EQU     256                     ; local stack size
  23.  
  24.         PAGE
  25. ;-----------------------------------------------------------------------|
  26. ;       Group Selection                                                 |
  27. ;-----------------------------------------------------------------------|
  28.  
  29. PGROUP  Group   PROG, TAIL
  30. DGROUP  Group   DATA, DTAIL
  31.  
  32. PROG    Segment Para Public 'PROG'
  33. PROG    EndS
  34.  
  35. DATA    Segment Para Public 'DATA'      ; define first
  36. DATA    EndS
  37.  
  38.         Assume  CS:PROG, DS:DATA, ES:DATA, SS:DATA
  39.  
  40.         PAGE
  41. ;-----------------------------------------------------------------------|
  42. ;       Program Segment                                                 |
  43. ;-----------------------------------------------------------------------|
  44.  
  45. PROG    Segment Para Public 'PROG'
  46.  
  47.         Extrn   Init:Near,      MediaChe:Near,  BuildBPB:Near
  48.         Extrn   IoCtlIn:Near,   Input:Near,     ndInput:Near
  49.         Extrn   InputSta:Near,  InputFlu:Near,  Output:Near
  50.         Extrn   OutVerif:Near,  OutStatu:Near,  OutFlush:Near
  51.         Extrn   IoCtlOut:Near,  DevOpen:Near,   DevClose:Near
  52.         Extrn   RemMedia:Near
  53.  
  54.         ORG     0
  55.  
  56. HDR     Proc    Far
  57.  
  58. ;-----------------------------------------------------------------------|
  59. ;       Device Header                                                   |
  60. ;-----------------------------------------------------------------------|
  61.  
  62.         DD      -1                      ; -> next device
  63.         DW      8000H                   ; character only device
  64.         DW      Strategy                ; -> device strategy
  65.         DW      Interrupt               ; -> device interrupt
  66.         DB      "MON     "              ; mono
  67.  
  68. ;-----------------------------------------------------------------------|
  69. ;       Code Segment Variables                                          |
  70. ;-----------------------------------------------------------------------|
  71.  
  72. RHptr   DD      (?)                     ; -> Request Header
  73. ssEntry DW      (?)                     ; entry SS
  74. spEntry DW      (?)                     ; entry SP
  75.  
  76.         PAGE
  77. ;-----------------------------------------------------------------------|
  78. ;       Device Strategy                                                 |
  79. ;                                                                       |
  80. ;       ENTRY : ES:BX -> Request Header                                 |
  81. ;                                                                       |
  82. ;       EXIT :  Request Header copied to ReqHdr                         |
  83. ;               all registers preserved                                 |
  84. ;                                                                       |
  85. ;-----------------------------------------------------------------------|
  86.  
  87. Strategy:
  88.  
  89.         MOV     Word Ptr CS:RHptr,BX    ; save request header ptr
  90.         MOV     Word Ptr CS:RHptr + 2,ES
  91.  
  92.         PUSHF                           ; (+1) save the world
  93.         PUSH    ES                      ; (+2)
  94.         PUSH    DS                      ; (+3)
  95.         PUSH    SI                      ; (+4)
  96.         PUSH    DI                      ; (+5)
  97.         PUSH    CX                      ; (+6)
  98.         PUSH    BX                      ; (+7)
  99.  
  100.         MOV     SI,BX
  101.         MOV     BX,ES
  102.         MOV     DS,BX                   ; DS:SI -> Request Header
  103.  
  104.         MOV     BX,Offset PGROUP:TAIL
  105.         MOV     CL,4
  106.         SHR     BX,CL
  107.         MOV     CX,CS
  108.         ADD     BX,CX
  109.         MOV     ES,BX
  110.         MOV     DI,Offset DGROUP:ReqHdr ; ES:DI -> ReqHdr
  111.  
  112.         CLD
  113.         XOR     CH,CH
  114.         MOV     CL,[SI]
  115.         REP     MOVSB                   ; copy Request Header
  116.         
  117.         POP     BX                      ; (+6) restore
  118.         POP     CX                      ; (+5)
  119.         POP     DI                      ; (+4)
  120.         POP     SI                      ; (+3)
  121.         POP     DS                      ; (+2)
  122.         POP     ES                      ; (+1)
  123.         POPF                            ; (+0)
  124.         RET
  125.  
  126.         PAGE
  127. ;-----------------------------------------------------------------------|
  128. ;       Device Interrupt                                                |
  129. ;                                                                       |
  130. ;       ENTRY : anything                                                |
  131. ;                                                                       |
  132. ;       EXIT :  all registers preserved                                 |
  133. ;                                                                       |
  134. ;-----------------------------------------------------------------------|
  135.  
  136. Interrupt:
  137.  
  138.         PUSH    DS                      ; (+1) save the world
  139.         PUSH    ES                      ; (+2)
  140.         PUSH    AX                      ; (+3)
  141.         PUSH    BX                      ; (+4)
  142.         PUSH    CX                      ; (+5)
  143.         PUSH    DX                      ; (+6)
  144.         PUSH    SI                      ; (+7)
  145.         PUSH    DI                      ; (+8)
  146.         PUSH    BP                      ; (+9)
  147.  
  148.         MOV     CS:ssEntry,SS           ; save entry SS
  149.         MOV     CS:spEntry,SP           ; and SP
  150.  
  151.         MOV     AX,Offset PGROUP:TAIL   ; set our DS, SS, BP, and SP
  152.         MOV     CL,4
  153.         SHR     AX,CL
  154.         MOV     CX,CS
  155.         ADD     AX,CX
  156.         MOV     BX,Offset DGROUP:MyStack
  157.         MOV     DS,AX
  158.         MOV     ES,AX
  159.         MOV     SS,AX
  160.         MOV     SP,BX
  161.         MOV     BP,BX
  162.  
  163.         ;
  164.         ; call our function
  165.         ;
  166.         MOV     AL,ReqHdr + 2           ; AL = Command Code
  167.         SHL     AL,1
  168.         CBW
  169.         MOV     SI,Offset DGROUP:FuncTab
  170.         ADD     SI,AX
  171.         CALL    Word Ptr [SI]
  172.  
  173.         ;
  174.         ; copy back Request Header
  175.         ;
  176.         LES     DI,RHptr                ; ES:DI -> original space
  177.         MOV     SI,Offset DGROUP:ReqHdr ; DS:SI -> our (updated) copy
  178.         CLD
  179.         XOR     CH,CH
  180.         MOV     CL,[SI]
  181.         REP     MOVSB                   ; copy Request Header
  182.  
  183.         MOV     SS,CS:ssEntry           ; restore original stuff
  184.         MOV     SP,CS:spEntry
  185.  
  186.         POP     BP                      ; (+8) restore
  187.         POP     DI                      ; (+7)
  188.         POP     SI                      ; (+6)
  189.         POP     DX                      ; (+5)
  190.         POP     CX                      ; (+4)
  191.         POP     BX                      ; (+3)
  192.         POP     AX                      ; (+2)
  193.         POP     ES                      ; (+1)
  194.         POP     DS                      ; (+0)
  195.         RET
  196.  
  197. HDR     EndP
  198.  
  199. PROG    EndS
  200.  
  201. TAIL    Segment Public 'PROG'           ; for finding end of code segment
  202. TAIL    EndS
  203.  
  204.         PAGE
  205. ;-----------------------------------------------------------------------|
  206. ;       Data Segment                                                    |
  207. ;-----------------------------------------------------------------------|
  208.  
  209. DATA    Segment Para Public 'DATA'
  210.  
  211.         Public  ReqHdr
  212.  
  213.         DB      StkSiz DUP (?)          ; our stack, overflows into code
  214. MyStack Label   Word
  215.  
  216. FuncTab Label Word
  217.         DW      Offset PGROUP:Init
  218.         DW      Offset PGROUP:MediaChe
  219.         DW      Offset PGROUP:BuildBPB
  220.         DW      Offset PGROUP:IoCtlIn
  221.         DW      Offset PGROUP:Input
  222.         DW      Offset PGROUP:ndInput
  223.         DW      Offset PGROUP:InputSta
  224.         DW      Offset PGROUP:InputFlu
  225.         DW      Offset PGROUP:Output
  226.         DW      Offset PGROUP:OutVerif
  227.         DW      Offset PGROUP:OutStatu
  228.         DW      Offset PGROUP:OutFlush
  229.         DW      Offset PGROUP:IoCtlOut
  230.         DW      Offset PGROUP:DevOpen
  231.         DW      Offset PGROUP:DevClose
  232.         DW      Offset PGROUP:RemMedia
  233.  
  234. ReqHdr  DB      256 DUP (?)             ; copy of Request Header
  235.  
  236. DATA    EndS
  237.  
  238. DTAIL   Segment Public 'DATA'           ; for finding end of data segment
  239. DTAIL   EndS
  240.  
  241.         END     HDR                     ; of HDR.ASM
  242.