home *** CD-ROM | disk | FTP | other *** search
/ Groovy Bytes: Behind the Moon / groovybytes.iso / GROOVY / DISKMAGS / IMPHOB_8.ZIP / IMP8_EX!.ZIP / FLATMODE.ZIP / MEM32.INC < prev    next >
Encoding:
Text File  |  1994-08-19  |  1.8 KB  |  115 lines

  1. start_GDT macro
  2. mem32_GDT dw 4 dup(0)
  3. mem32_ptr_GDT_act=8
  4. endm
  5.  
  6. GDT_seg macro name,type
  7. mem32_ptr_GDT_&name&=mem32_ptr_GDT_act
  8. mem32_ptr_GDT_act=mem32_ptr_GDT_act+8
  9. ifidni <type>,<c16>
  10.     dw 0ffffh,0,9a00h,0
  11. elseifidni <type>,<c32>
  12. if enable_c32 eq 1
  13.     dw 0ffffh,0,9a00h,0cfh
  14. else
  15.     dw 0ffffh,0,9a00h,0
  16. endif
  17. elseifidni <type>,<d16>
  18.     dw 0ffffh,0,9200h,0
  19. elseifidni <type>,<d32>
  20.     dw 0ffffh,0,9200h,8fh
  21. else
  22. %out type incorrect dans GDT_seg
  23. endif
  24. endm
  25.  
  26. end_GDT macro seg_name
  27. mem32_ptr_GDT label fword
  28.     dw mem32_ptr_GDT_act-1
  29.     dd offset seg_name:mem32_GDT
  30.     dw 0
  31. endm
  32.  
  33. init_GDT macro
  34.     movzx eax,ax
  35.     shl eax,4
  36.     add dword ptr mem32_ptr_GDT+2,eax
  37.     mov si,offset ds:mem32_GDT
  38.     lgdt fword ptr mem32_ptr_GDT
  39. endm
  40.  
  41. init_GDT_base_seg macro name
  42.     movzx eax,ax
  43.     shl eax,4
  44.     mov word ptr [si+mem32_ptr_GDT_&name&+2],ax
  45.     ror eax,16
  46.     mov byte ptr [si+mem32_ptr_GDT_&name&+4],al
  47. endm
  48.  
  49. init_GDT_base_addr macro name
  50.     mov word ptr [si+mem32_ptr_GDT_&name&+2],ax
  51.     ror eax,16
  52.     mov byte ptr [si+mem32_ptr_GDT_&name&+4],al
  53.     mov byte ptr [si+mem32_ptr_GDT_&name&+7],ah
  54. endm
  55.  
  56. disable_NMI macro
  57. if use_NMI eq 1
  58.     in al,70h
  59.     mov ah,al
  60.     mov al,80h
  61.     out 70h,al
  62. endif
  63. endm
  64.  
  65. enable_NMI macro
  66. if use_NMI eq 1
  67.     out 70h,al
  68. endif
  69. endm
  70.  
  71. disable_interrupts macro
  72.     cli
  73.     disable_NMI
  74. endm
  75.  
  76. enable_interrupts macro
  77.     enable_NMI
  78.     sti
  79. endm
  80.  
  81. mem32_find_segment_type macro
  82. mem32_here=$
  83. push ax
  84. mem32_size=$-mem32_here
  85. org mem32_here
  86. endm
  87.  
  88. switch_prot macro seg,off
  89. mem32_find_segment_type
  90.     mov eax,cr0
  91.     or al,1
  92.     mov cr0,eax
  93.     db 0eah
  94. if mem32_size eq 1
  95.     dw offset off
  96. else
  97.     dd offset off
  98. endif
  99.     dw mem32_ptr_GDT_&seg
  100. endm
  101.  
  102. switch_real macro seg,off
  103. mem32_find_segment_type
  104.     mov eax,cr0
  105.     and al,0feh
  106.     mov cr0,eax
  107.     db 0eah
  108. if mem32_size eq 1
  109.     dw offset off
  110. else
  111.     dd offset off
  112. endif
  113.     dw seg
  114. endm
  115.