INITNEW.A 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. (* Release 3.10 *)
  2. (*-------------------------------------------------------------------------*
  3. * *
  4. * INITNEW.A - Modula program startup *
  5. * *
  6. * COPYRIGHT (C) 1989..1992 Clarion Software Corporation. *
  7. * All Rights Reserved *
  8. * *
  9. *--------------------------------------------------------------------------*)
  10. module initnew
  11. section
  12. segment ENTERCODE(CODE,28H)
  13. segment INITCODE(CODE,28H)
  14. segment CODE(none,28H);
  15. segment SIG_TEXT(CODE,68H)
  16. segment EMU_TEXT(EMU_CODE,28H)
  17. segment PROC_TEXT(CODE,68H)
  18. segment MP_CODE(MP_CODE,68H)
  19. segment _TEXT(CODE,28H)
  20. segment _INIT(INIT_CODE,28H)
  21. segment EMU_STATE(DATA,28H)
  22. segment CONST(CONST,28H)
  23. segment _CONST(DATA,28H)
  24. segment _DATA(DATA,28H)
  25. segment BSS_START(BSS,28H)
  26. segment _BSS(BSS,28H)
  27. segment BSS_END(BSS,28H)
  28. segment _FAR_DATA(FAR_DATA,28H)
  29. segment FAR_BSS(FAR_BSS,28H)
  30. segment STACK(STACK,74H)
  31. section
  32. segment ENTERCODE(CODE,28H)
  33. segment INITCODE(CODE,28H)
  34. segment CODE(none,28H);
  35. segment SIG_TEXT(CODE,68H)
  36. segment EMU_TEXT(EMU_CODE,28H)
  37. segment PROC_TEXT(CODE,68H)
  38. segment MP_CODE(MP_CODE,68H)
  39. segment _TEXT(CODE,28H)
  40. segment _INIT(INIT_CODE,28H)
  41. segment EMU_STATE(DATA,28H)
  42. reserved:
  43. dw 0,0,0,0,0,0,0,0
  44. segment CONST(CONST,28H)
  45. segment _CONST(DATA,28H)
  46. segment _DATA(DATA,28H)
  47. segment BSS_START(BSS,28H)
  48. segment _BSS(BSS,28H)
  49. segment BSS_END(BSS,28H)
  50. segment _FAR_DATA(FAR_DATA,28H)
  51. segment FAR_BSS(FAR_BSS,28H)
  52. segment STACK(STACK,74H)
  53. segment NEAR_STACK(BSS, 28H)
  54. segment NEAR_HEAP(BSS, 28H)
  55. group DGROUP(EMU_STATE,CONST,_CONST,_DATA,BSS_START,_BSS,BSS_END,NEAR_STACK,NEAR_HEAP)
  56. select _DATA
  57. SSisDS = 8
  58. HeapSize = 6
  59. StackSize = 4
  60. InitRec: dw 0, 0, 0, _INIT
  61. select BSS_START
  62. public __bss_start:
  63. public _edata: db 0
  64. select BSS_END
  65. public __bss_end:
  66. public _end:
  67. select _TEXT
  68. text_dummy : org 6
  69. select ENTERCODE
  70. extrn __startup
  71. extrn _x_main
  72. extrn _x_initx
  73. extrn __initx
  74. extrn __heap_size
  75. extrn _x_bss_end
  76. extrn _x_bss_start
  77. extrn __near_stack_start
  78. extrn __x_near_stack_start
  79. extrn __InitLink
  80. push ds
  81. mov dx, seg __initx
  82. mov ds, dx
  83. mov cx, [__initx]
  84. mov si, [__initx][2]
  85. push [__initx][StackSize]
  86. push ax
  87. push bx
  88. mov ax, [__initx][HeapSize]
  89. dec ax
  90. mov dx, seg _x_main
  91. mov ds, dx
  92. mov [_x_initx], cx
  93. mov [_x_initx][2], si
  94. mov [__heap_size], ax
  95. mov word [__x_near_stack_start], __near_stack_start
  96. mov ax, cs:[main_ptr]
  97. mov word [_x_main][0], ax
  98. mov ax, cs:[main_ptr][2]
  99. mov word [_x_main][2], ax
  100. mov bx, InitRec
  101. mov ax, _DATA
  102. extrn __InitLink
  103. call far __InitLink
  104. pop bx
  105. pop ax
  106. mov word [_x_bss_end], __bss_end
  107. mov word [_x_bss_start], __bss_start
  108. mov dx, seg __initx
  109. mov ds, dx
  110. mov cl, [__initx][SSisDS]
  111. sub ch, ch
  112. pop si
  113. pop ds
  114. jmp far __startup
  115. dw EMU_STATE
  116. dw CONST
  117. dw _CONST
  118. dw _DATA
  119. dw BSS_START
  120. dw _BSS
  121. dw BSS_END (* establishs order ! *)
  122. dw NEAR_STACK
  123. dw NEAR_HEAP
  124. dw text_dummy
  125. dw reserved
  126. dw 0
  127. extrn _main
  128. main_ptr: dd _main
  129. end *
  130.