home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / kernex32.zip / mwdd_src.zip / 32bits / ext2-os2 / skeleton / ses / sec32_pre_init_base.asm < prev    next >
Assembly Source File  |  1997-03-16  |  4KB  |  148 lines

  1. ;
  2. ; $Header: d:\\32bits\\ext2-os2\\skeleton\\ses\\rcs\\sec32_pre_init_base.asm,v 1.2 1997/03/16 13:13:43 Willm Exp $
  3. ;
  4.  
  5. ; 32 bits OS/2 device driver and IFS support. Provides 32 bits kernel 
  6. ; services (DevHelp) and utility functions to 32 bits OS/2 ring 0 code 
  7. ; (device drivers and installable file system drivers).
  8. ; Copyright (C) 1995, 1996, 1997  Matthieu WILLM (willm@ibm.net)
  9. ;
  10. ; This program is free software; you can redistribute it and/or modify
  11. ; it under the terms of the GNU General Public License as published by
  12. ; the Free Software Foundation; either version 2 of the License, or
  13. ; (at your option) any later version.
  14. ;
  15. ; This program is distributed in the hope that it will be useful,
  16. ; but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. ; GNU General Public License for more details.
  19. ;
  20. ; You should have received a copy of the GNU General Public License
  21. ; along with this program; if not, write to the Free Software
  22. ; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  
  24.         .386p
  25.  
  26.         include devhlp.inc
  27.         include sec32_segdef.inc
  28.  
  29. reqPacket       struc
  30. reqLenght       db ?
  31. reqUnit         db ?
  32. reqCommand      db ?
  33. reqStatus       dw ?
  34. reqFlags        db ?
  35.                 db 3 dup (?)    ; Reserved field
  36. reqLink         dd ?
  37. reqPacket       ends
  38.  
  39. rpInitIn        struc
  40. i_rph           db size reqPacket dup (?)
  41. i_unit          db ?
  42. i_devHelp       dd ?
  43. i_initArgs      dd ?
  44. i_driveNum      db ?
  45. rpInitIn        ends
  46.  
  47.  
  48. DATA32 segment
  49.     extrn  TKSSBase  : dword
  50.     extrn  DevHelp32 : dword
  51. DATA32 ends
  52.  
  53. CODE16 segment
  54. ASSUME CS:CODE16, DS:NOTHING, ES:FLAT
  55.  
  56.         public thunk16$sec32_pre_init_base_1
  57.         public thunk16$sec32_pre_init_base_2
  58.  
  59. thunk16$sec32_pre_init_base_1:
  60.         call dword ptr [ebp - 24]
  61.         jmp far ptr FLAT:thunk32$sec32_pre_init_base_1
  62.  
  63. ASSUME CS:CODE16, DS:FLAT, ES:FLAT
  64.  
  65. thunk16$sec32_pre_init_base_2:
  66.         call dword ptr [ebp - 6]
  67.         jmp far ptr FLAT:thunk32$sec32_pre_init_base_2
  68.  
  69. CODE16 ends
  70.  
  71. CODE32 segment
  72. ASSUME CS:FLAT, DS:FLAT, ES:FLAT
  73.  
  74.         public thunk32$sec32_pre_init_base_1
  75.         public thunk32$sec32_pre_init_base_2
  76.         public         sec32_pre_init_base
  77.  
  78. ;
  79. ; int DH32ENTRY sec32_pre_init_base(
  80. ;                                   PTR16 reqpkt      /* ebp + 8 */
  81. ;                                  );
  82. ;
  83. sec32_pre_init_base proc near
  84.         enter 24,0
  85. ;
  86. ;ebp - 24 (4 bytes) DevHelp
  87. ;ebp - 20 (8 bytes) "mwdd32$ "
  88. ;ebp - 12 (12 bytes) ddtable
  89. ;
  90.  
  91.         push es
  92.         push ebx
  93.         push esi
  94.         push edi
  95.  
  96.         ;
  97.         ; Saves the DevHelp entry point
  98.         ;
  99.         push es
  100.         les bx, dword ptr[ebp + 8]   ; es:bx points to the INIT request packet
  101.         movzx ebx, bx
  102.         mov ecx, es:[ebx].i_devHelp  ; Device Helper entry point
  103.         mov [ebp - 24], ecx          ; saved into DevHelp2
  104.         mov es:[ebx].i_devHelp, 0    ; codeend = dataend = 0
  105.         pop es
  106.  
  107.  
  108.         ;
  109.         ; Try to attach to MWDD32.SYS
  110.         ;
  111.         mov eax, ss
  112.         mov ds, eax
  113.         lea ebx, [ebp - 20]             ; offset ddname
  114.         lea edi, [ebp - 12]             ; offset ddtable
  115.     mov dl, DevHlp_AttachDD
  116.         mov [ebp - 20], dword ptr 'ddwm'
  117.         mov [ebp - 16], dword ptr ' $23'
  118.         jmp far ptr thunk16$sec32_pre_init_base_1
  119. thunk32$sec32_pre_init_base_1:
  120.         mov ecx, es
  121.         mov ds, ecx
  122.         jc short @@error
  123.  
  124.         ;
  125.         ; Calls MWDD32.SYS to get 32 bits helper entry points
  126.         ;
  127.         push offset FLAT:TKSSBase
  128.         push offset FLAT:DevHelp32
  129.     push dword ptr 1        ; function
  130.     push dword ptr 061153275h    ; magic
  131.     push dword ptr 0        ; zero to recognize non V1.00 request
  132.         jmp far ptr thunk16$sec32_pre_init_base_2
  133. thunk32$sec32_pre_init_base_2:
  134.     add esp, 20
  135. @@error:
  136.         movzx eax, ax
  137.         pop edi
  138.         pop esi
  139.         pop ebx
  140.         pop es
  141.         leave
  142.         ret
  143. sec32_pre_init_base endp
  144.  
  145. CODE32 ends
  146.  
  147.         end
  148.