SELECTOR.ASM 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. ; THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
  2. ; SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
  3. ; END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
  4. ; ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
  5. ; IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
  6. ; SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
  7. ; FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
  8. ; CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
  9. ; AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
  10. ; COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
  11. .386
  12. option oldstructs
  13. .nolist
  14. include pstypes.inc
  15. include psmacros.inc
  16. .list
  17. assume cs:_TEXT, ds:_DATA
  18. _DATA segment dword public USE32 'DATA'
  19. rcsid db "$Id: selector.asm 1.5 1995/12/21 14:30:01 matt Exp $"
  20. align 4
  21. new_selector dd ?
  22. new_base dd ?
  23. new_size dd ?
  24. _DATA ends
  25. _TEXT segment dword public USE32 'CODE'
  26. ; int get_selector( void * address, int size, unsigned short * selector );
  27. PUBLIC get_selector_
  28. ; EAX = 32-bit base address
  29. ; EDX = Size in bytes
  30. ; EBX = &selector
  31. ; Returns: EAX = 0 if ok, otherwise, EAX = non-zero (1)
  32. get_selector_:
  33. pusha
  34. mov new_base, eax
  35. mov new_size, edx
  36. mov new_selector, ebx
  37. mov eax, 0
  38. mov ecx, 1
  39. int 31h
  40. jc failed
  41. mov ecx, new_selector
  42. mov [ecx], ax
  43. ; Set the selector's base address using DPMI
  44. mov ecx, new_selector
  45. mov bx, [ecx]
  46. mov eax, 7
  47. mov ecx, new_base
  48. mov edx, ecx
  49. shr ecx, 16
  50. int 31h
  51. jc failed
  52. ; Set the selector's size using DPMI
  53. mov ecx, new_selector
  54. mov bx, [ecx]
  55. mov ax, 08h
  56. mov ecx, new_size
  57. mov edx, ecx
  58. shr ecx, 16
  59. int 31h
  60. jc failed
  61. popa
  62. mov eax, 0
  63. ret
  64. failed:
  65. popa
  66. mov eax, 1
  67. ret
  68. _TEXT ends
  69. end