newexe.inc
上传用户:xiaoan1112
上传日期:2013-04-11
资源大小:19621k
文件大小:5k
源码类别:

操作系统开发

开发平台:

Visual C++

  1. ; SCCSWHAT( "@(#)newexe.inc 1.1 87/12/19 16:42:42 " )
  2. ;*
  3. ;* COW : Character Oriented Windows
  4. ;*
  5. ;* newexe.inc : Munged version of NEWEXE
  6. ;* * things that are not used for COW have been removed
  7. EMAGIC = 05A4Dh
  8. ERESWDS =  0010h
  9. EXE_HDR     STRUC
  10. e_magic     DW ? ; magic in same location
  11. e_cblp     DW ?
  12. e_cp     DW ?
  13. e_crlc     DW ?
  14. e_cparhdr   DW ?
  15. e_minalloc  DW ?
  16. e_maxalloc  DW ?
  17. e_ss     DW ?
  18. e_sp     DW ?
  19. e_csum     DW ?
  20. e_cs     DW ?
  21. e_ip     DW ?
  22. e_lfarlc    DW ?
  23. e_ovno     DW ?
  24. e_res     DW ERESWDS DUP (?)
  25. e_lfanew    DD ?
  26. EXE_HDR     ENDS
  27. magicNe = 336Eh ;* 'n3' for fast boot format
  28. NERESBYTES = 2
  29. NEW_EXE  STRUC
  30. ne_magic DW  ? ; Magic value 'ne'
  31. ne_ver DB  ? ; version number
  32. ne_rev DB  ? ; revision number
  33. ne_enttab DW  ? ; offset to entry table
  34. ne_cbenttab DW  ? ; number of bytes in entry table
  35. ne_crc DD  ? ; CRC of file
  36. ne_flags DW  ? ; flag word
  37. ne_autodata DW  ? ; segment number of auto data segment
  38. ne_heap  DW  ? ; initial size of local heap
  39. ne_stack DW  ? ; initial size of stack
  40. ne_csip  DD  ? ; CS:IP start address
  41. ne_sssp  DD  ? ; SS:SP initial stack pointer. 0 if
  42. ; stack size word non-zero
  43. ne_cseg  DW  ? ; number of segment in segment table
  44. IFDEF DUAL
  45. ne_cmod  DW  ? ; number of entries in module reference table
  46. ne_cbnrestab DW  ? ; number of bytes in non-resident name table
  47. ELSE ;!DUAL
  48. ne_sectorFix DW  ? ;* sector where Fixed stuff starts
  49. ne_cparaFix DW  ? ;* # of fixed paragraphs to read
  50. ENDIF ;!DUAL
  51. ne_segtab DW  ? ; NE relative offset to segment table
  52. ;;;ne_rsrctab DW  ? ; NE relative offset to resource table
  53. ne_cbRlbMax DW  ? ;* Maximum size of rlb tables
  54. ne_restab DW  ? ; NE relative offset to resident name table
  55. IFDEF DUAL
  56. ne_rlbtab DW  ? ;* offset of Rle entries
  57. ne_imptab DW  ? ; NE relative offset to imported name table
  58. ne_nrestab DD  ? ; file offset to non-resident name table
  59. ELSE ;!DUAL
  60. ne_cbRlbFix DW  ? ;* size of rlbFix
  61. ne_cbRlbMove DW  ? ;* size of rlbMove
  62. ne_lfaRlbMove DD  ? ;* where rlbMove is located
  63. ENDIF ;!DUAL
  64. ne_cmovent DW  ? ; Count of movable entries
  65. ne_align DW  ? ; Alignment shift count for segment data
  66. ne_res DB  NERESBYTES DUP (?)
  67. ne_cparaReserve DW  ? ;* # of reserved paragraphs for code
  68. ;* set by fixstub
  69. ne_rgentmove DW  ? ;* offset to array of ENTMOVE
  70. ne_psegcsum DW  ? ; offset to segment chksums.
  71. ne_pretthunks DW  ? ; offset to return thunks
  72. ne_psegrefbytes DW  ? ; offset to segment ref. bytes
  73. NEW_EXE  ENDS
  74. ;* * Mini-header for swap files:
  75. EXH STRUC
  76. magicExh DW ? ;* magic value (magicNe)
  77. chStampExh DB ? ;* application version stamp
  78. ifileExh DB ? ;* ifile index check
  79. lfaRlbExh DD ? ;* address of RLB
  80. cbRlbExh DW ? ;* size of RLB
  81. EXH ENDS
  82. ;* * Segment Table Info
  83. NEW_SEG  STRUC
  84. ns_sector DW  ? ; logical sector number in file of start of segment
  85. ns_cbseg DW  ? ; number bytes in file
  86. ns_flags DW  ? ; segment flags
  87. ns_minalloc DW  ? ; minimum number bytes to allocate for segment
  88. NEW_SEG  ENDS
  89. NEW_SEG1        STRUC
  90.                 DB  SIZE NEW_SEG DUP (?)
  91. ns_handle       DW  ?   ; Handle to segment (0 if not loaded)
  92. NEW_SEG1        ENDS
  93. NSTYPE =  0007h    ; Segment type mask
  94. NSCODE =  0000h    ; Code segment
  95. NSDATA =  0001h    ; Data segment
  96. NSMOVE =  0010h    ; Moveable segment
  97. NSPRELOAD =  0040h    ; Preload this segment
  98. NSRELOC  =  0100h    ; Relocation information following segment data
  99. NSDPL =  0C00h ;;* IO priv level (for file index !!)
  100. SHIFTDPL =  10
  101. ;* * Entry Table Info
  102. ENT_UNUSED = 000h
  103. ENT_MOVEABLE = 0FFh
  104. ENT_PUBLIC = 001h
  105. ENT_DATA = 002h
  106. ENT STRUC
  107. ent_flags DB ?
  108. ENT ENDS
  109. ENTM STRUC
  110. DB SIZE ENT DUP (?)
  111. entm_int3f DW ?
  112. entm_seg DB ?
  113. entm_offset DW ?
  114. ENTM ENDS
  115. ENTF STRUC
  116. DB SIZE ENT DUP (?)
  117. entf_offset DW ?
  118. ENTF ENDS
  119. ;* * Moveable entry in RAM - already reloaded & re-lru'd
  120. ENTMOVE STRUC
  121. opcEntmove DB  ? ;* JMPF opcode
  122. offEntmove DW  ? ;* offset
  123. segEntmove DW  ? ;* segment
  124. segnoEntmove DB  ? ;* segment #
  125. ENTMOVE ENDS
  126. ;* * Moveable entry in RAM - Near jump to LOM far jump
  127. ENTMOVE1 STRUC
  128. opcEntmove1 DB  ? ;* CALLN opcode
  129. relEntmove1 DW  ? ;* relative jump - Reload or Relru
  130. offDestEntmove1 DW  ? ;* destination offset
  131. segnoEntmove1 DB  ? ;* segment #
  132. ENTMOVE1 ENDS
  133. ;* * Return thunk (in RAM)
  134. ENTRET STRUC ;* Return thunk
  135. opcEntret DB ? ;* CALLN opcode
  136. relEntret DW ? ;* relative jump - RetThunk
  137. segnoEntret DB ? ;* segment to return to
  138. offEntret DW ? ;* offset of top return thunk
  139. ENTRET ENDS
  140. ;* * Opcodes *
  141. opcCallf = 09ah ;* CALLF opcode
  142. opcCalln = 0e8h ;* CALLN opcode
  143. opcJmpn = 0e9h ;* JMPN opcode
  144. opcJmpf = 0eah ;* JMPF opcode
  145. ;* * SEGREF byte info (i.e. LRU)
  146. segrefFixed = 0F0h ;* fixed segment no LRU
  147. segrefLoaded = 000h ;* just loaded
  148. segrefDiscarded = 0D0h ;* not resident
  149. segrefBound = 0B0h ;* bound segment