home *** CD-ROM | disk | FTP | other *** search
/ Mega CD-ROM 1 / megacd_rom_1.zip / megacd_rom_1 / GNUISH / SWALIB0.ZIP / _SWAP_L.ASM next >
Assembly Source File  |  1990-09-10  |  46KB  |  2,466 lines

  1. ;    Static Name Aliases
  2. ;
  3. ;    $S476__swap_kernel_orig_mcbs    EQU    _swap_kernel_orig_mcbs
  4. ;    $S459__swap_kernel_handle    EQU    _swap_kernel_handle
  5. ;    $S464__swap_kernel_environment_ptr    EQU    _swap_kernel_environment_ptr
  6. ;    $S588__swap_kernel_err_msg_3    EQU    _swap_kernel_err_msg_3
  7. ;    $S584__swap_kernel_err_msg_head    EQU    _swap_kernel_err_msg_head
  8. ;    $S587__swap_kernel_err_msg_2    EQU    _swap_kernel_err_msg_2
  9. ;    $S586__swap_kernel_err_msg_1    EQU    _swap_kernel_err_msg_1
  10. ;    $S585__swap_kernel_err_msg_0    EQU    _swap_kernel_err_msg_0
  11. ;    $S484__swap_kernel_swap_out    EQU    _swap_kernel_swap_out
  12. ;    $S485__swap_kernel_xms_control    EQU    _swap_kernel_xms_control
  13. ;    $S569__swap_kernel_int23_message    EQU    _swap_kernel_int23_message
  14. ;    $S467__swap_kernel_parameter_block    EQU    _swap_kernel_parameter_block
  15. ;    $S568__swap_kernel_user_interrupt    EQU    _swap_kernel_user_interrupt
  16. ;    $S472__swap_kernel_environ_seg    EQU    _swap_kernel_environ_seg
  17. ;    $S474__swap_kernel_return_code    EQU    _swap_kernel_return_code
  18. ;    $S463__swap_kernel_environment    EQU    _swap_kernel_environment
  19. ;    $S487__swap_kernel_xms_move_table    EQU    _swap_kernel_xms_move_table
  20. ;    $S488__swap_kernel_local_stack    EQU    _swap_kernel_local_stack
  21. ;    $S471__swap_kernel_fcb_2    EQU    _swap_kernel_fcb_2
  22. ;    $S470__swap_kernel_fcb_1    EQU    _swap_kernel_fcb_1
  23. ;    $S461__swap_kernel_resident_paras    EQU    _swap_kernel_resident_paras
  24. ;    $S480__swap_kernel_swap_in    EQU    _swap_kernel_swap_in
  25. ;    $S468__swap_kernel_path    EQU    _swap_kernel_path
  26. ;    $S465__swap_kernel_ems_page_frame    EQU    _swap_kernel_ems_page_frame
  27. ;    $S462__swap_kernel_first_block_paras    EQU    _swap_kernel_first_block_paras
  28. ;    $S469__swap_kernel_cmdline    EQU    _swap_kernel_cmdline
  29. ;    $S458__swap_kernel_swapped_bytes    EQU    _swap_kernel_swapped_bytes
  30. ;    $S489__swap_kernel_stack_pointer    EQU    _swap_kernel_stack_pointer
  31. ;    $S460__swap_kernel_psp    EQU    _swap_kernel_psp
  32. ;    $S473__swap_kernel_environment_size    EQU    _swap_kernel_environment_size
  33. ;    $S490__swap_kernel_stack_segment    EQU    _swap_kernel_stack_segment
  34. ;    $S100_RCS_id    EQU    RCS_id
  35. ;    $S566__swap_kernel_caller_int23    EQU    _swap_kernel_caller_int23
  36. ;    $S743_ems_id    EQU    ems_id
  37.     TITLE   swap.c
  38.     .8087
  39. INCLUDELIB    LLIBCE
  40. SWAP_TEXT    SEGMENT  WORD PUBLIC 'CODE'
  41. SWAP_TEXT    ENDS
  42. _DATA    SEGMENT  WORD PUBLIC 'DATA'
  43. _DATA    ENDS
  44. CONST    SEGMENT  WORD PUBLIC 'CONST'
  45. CONST    ENDS
  46. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  47. _BSS    ENDS
  48. SWAP5_DATA    SEGMENT  PARA PUBLIC 'FAR_DATA'
  49. SWAP5_DATA    ENDS
  50. DGROUP    GROUP    CONST, _BSS, _DATA
  51.     ASSUME DS: DGROUP, SS: DGROUP
  52. EXTRN    __fstrcpy:FAR
  53. EXTRN    __fstrncmp:FAR
  54. EXTRN    _unlink:FAR
  55. EXTRN    __dos_close:FAR
  56. EXTRN    __dos_creat:FAR
  57. EXTRN    __aFchkstk:FAR
  58. EXTRN    __dos_getdrive:FAR
  59. EXTRN    __aFlmul:FAR
  60. EXTRN    __dos_getdiskfree:FAR
  61. EXTRN    __dos_getvect:FAR
  62. EXTRN    _strlen:FAR
  63. EXTRN    __aFahdiff:FAR
  64. EXTRN    __dos_setvect:FAR
  65. EXTRN    __ctype:BYTE
  66. EXTRN    _errno:WORD
  67. EXTRN    __psp:WORD
  68. _DATA      SEGMENT
  69. $S100_RCS_id    DB    '$Header: e:/gnu/swaplib/RCS/swap.c''v 0.9 90/09/09 21:43:50 '
  70.     DB    'tho Stable $',  00H
  71. _DATA      ENDS
  72. SWAP5_DATA      SEGMENT
  73. $S743_ems_id    DB    'EMMXXXX0',  00H
  74. SWAP5_DATA      ENDS
  75. _BSS      SEGMENT
  76. $S566__swap_kernel_caller_int23    DW 02H DUP (?)
  77. _BSS      ENDS
  78. SWAP_TEXT      SEGMENT
  79.     ASSUME    CS: SWAP_TEXT
  80. ; Line 1
  81. ; Line 27
  82. ; Line 28
  83. ; Line 29
  84. ; Line 30
  85. ; Line 31
  86. ; Line 32
  87. ; Line 33
  88. ; Line 34
  89. ; Line 35
  90. ; Line 259
  91. _swap_kernel_setup_environment    PROC FAR
  92.     push    bp
  93.     mov    bp,sp
  94.     sub    sp,0
  95.     push    di
  96.     push    si
  97. ; Line 261
  98.     mov    ax,WORD PTR cs:$S463__swap_kernel_environment+2
  99.     sub    ax,WORD PTR cs:$S460__swap_kernel_psp
  100.     mov    WORD PTR cs:$S461__swap_kernel_resident_paras,ax
  101. ; Line 263
  102.     cmp    WORD PTR cs:$S473__swap_kernel_environment_size,0
  103.     jne    $JCC28
  104.     jmp    $I590
  105. $JCC28:
  106.     les    bx,DWORD PTR cs:$S464__swap_kernel_environment_ptr
  107.     cmp    BYTE PTR es:[bx],0
  108.     jne    $JCC42
  109.     jmp    $I590
  110. $JCC42:
  111. ; Line 264
  112. ; Line 267
  113.     push    WORD PTR cs:$S473__swap_kernel_environment_size
  114.     push    WORD PTR cs:$S464__swap_kernel_environment_ptr+2
  115.     push    WORD PTR cs:$S464__swap_kernel_environment_ptr
  116.     push    WORD PTR cs:$S463__swap_kernel_environment+2
  117.     push    WORD PTR cs:$S463__swap_kernel_environment
  118.     call    FAR PTR _swap_kernel_memcpy
  119.     add    sp,10
  120. ; Line 268
  121.     mov    cl,4
  122.     mov    ax,WORD PTR cs:$S473__swap_kernel_environment_size
  123.     add    ax,15
  124.     shr    ax,cl
  125.     add    WORD PTR cs:$S461__swap_kernel_resident_paras,ax
  126. ; Line 269
  127.     mov    ax,WORD PTR cs:$S463__swap_kernel_environment+2
  128.     mov    WORD PTR cs:$S472__swap_kernel_environ_seg,ax
  129. ; Line 270
  130. ; Line 271
  131.     jmp    $I591
  132. $I590:
  133. ; Line 272
  134.     mov    WORD PTR cs:$S472__swap_kernel_environ_seg,0
  135. $I591:
  136. ; Line 273
  137. $EX589:
  138.     pop    si
  139.     pop    di
  140.     mov    sp,bp
  141.     pop    bp
  142.     ret    
  143.     $S476__swap_kernel_orig_mcbs    DW 032H DUP (?)
  144.     $S459__swap_kernel_handle    DW 01H DUP (?)
  145.     $S464__swap_kernel_environment_ptr    DW 02H DUP (?)
  146.     $S588__swap_kernel_err_msg_3    DB    'Too many MCBs.',  00H
  147.     $S584__swap_kernel_err_msg_head    DB    0dH,  0aH, 'Fatal error in memory management. Aborting.',  0dH
  148.     DB    0aH, 'Reason: ',  00H
  149.     $S587__swap_kernel_err_msg_2    DB    'Can''t release core.',  00H
  150.     $S586__swap_kernel_err_msg_1    DB    'Can''t swap code back.',  00H
  151.     $S585__swap_kernel_err_msg_0    DB    'Can''t reallocate core.',  00H
  152.     $S484__swap_kernel_swap_out    DW 02H DUP (?)
  153.     $S485__swap_kernel_xms_control    DW 02H DUP (?)
  154.     $S569__swap_kernel_int23_message    DB    0dH,  0aH,  07H, '*** Interrupt.',  0dH,  0aH,  00H
  155.     $S467__swap_kernel_parameter_block    DW 07H DUP (?)
  156.     $S568__swap_kernel_user_interrupt    DW    00H
  157.     $S472__swap_kernel_environ_seg    DW 01H DUP (?)
  158.     $S474__swap_kernel_return_code    DW 01H DUP (?)
  159.     $S463__swap_kernel_environment    DW 02H DUP (?)
  160.     $S487__swap_kernel_xms_move_table    DW 08H DUP (?)
  161.     $S488__swap_kernel_local_stack    DW 0100H DUP (?)
  162.     $S471__swap_kernel_fcb_2    DW 08H DUP (?)
  163.     $S470__swap_kernel_fcb_1    DW 08H DUP (?)
  164.     $S461__swap_kernel_resident_paras    DW 01H DUP (?)
  165.     $S480__swap_kernel_swap_in    DW 02H DUP (?)
  166.     $S468__swap_kernel_path    DW 048H DUP (?)
  167.     $S465__swap_kernel_ems_page_frame    DW 02H DUP (?)
  168.     $S462__swap_kernel_first_block_paras    DW 01H DUP (?)
  169.     $S469__swap_kernel_cmdline    DW 040H DUP (?)
  170.     $S458__swap_kernel_swapped_bytes    DW 02H DUP (?)
  171.     $S489__swap_kernel_stack_pointer    DW 01H DUP (?)
  172.     $S460__swap_kernel_psp    DW 01H DUP (?)
  173.     $S473__swap_kernel_environment_size    DW 01H DUP (?)
  174.     $S490__swap_kernel_stack_segment    DW 01H DUP (?)
  175.  
  176. _swap_kernel_setup_environment    ENDP
  177. ; Line 278
  178. _swap_kernel_memcpy    PROC FAR
  179.     push    bp
  180.     mov    bp,sp
  181.     sub    sp,0
  182.     push    di
  183.     push    si
  184. ;    bytes = 14
  185. ;    source = 10
  186. ;    destination = 6
  187. ; Line 279
  188. ; Line 281
  189.     push    ds
  190. ; Line 282
  191.     mov    cx,WORD PTR [bp+14]    ;bytes
  192. ; Line 283
  193.     lds    si,DWORD PTR [bp+10]    ;source
  194. ; Line 284
  195.     les    di,DWORD PTR [bp+6]    ;destination
  196. ; Line 285
  197.     shr    cx,1
  198. ; Line 286
  199.     rep    movsw
  200. ; Line 287
  201.     adc    cx,cx
  202. ; Line 288
  203.     rep    movsb
  204. ; Line 289
  205.     pop    ds
  206. ; Line 290
  207. ; Line 292
  208.     mov    ax,WORD PTR [bp+6]    ;destination
  209.     mov    dx,WORD PTR [bp+8]
  210.     jmp    $EX595
  211. ; Line 293
  212. $EX595:
  213.     pop    si
  214.     pop    di
  215.     mov    sp,bp
  216.     pop    bp
  217.     ret    
  218.  
  219. _swap_kernel_memcpy    ENDP
  220. ; Line 317
  221. _swap_kernel_free_block    PROC FAR
  222.     push    bp
  223.     mov    bp,sp
  224.     sub    sp,0
  225.     push    di
  226.     push    si
  227. ;    block = 6
  228. ; Line 318
  229. ; Line 320
  230.     mov    ax,WORD PTR [bp+6]    ;block
  231. ; Line 321
  232.     mov    es,ax
  233. ; Line 322
  234.     mov    ah,73
  235. ; Line 323
  236.     int    33
  237. ; Line 324
  238.     jb    $failed598
  239. ; Line 325
  240.     xor    ax,ax
  241. ; Line 326
  242. $failed598:
  243. ; Line 327
  244. ; Line 328
  245. $EX597:
  246.     pop    si
  247.     pop    di
  248.     mov    sp,bp
  249.     pop    bp
  250.     ret    
  251.  
  252. _swap_kernel_free_block    ENDP
  253. ; Line 332
  254. _swap_kernel_set_block    PROC FAR
  255.     push    bp
  256.     mov    bp,sp
  257.     sub    sp,0
  258.     push    di
  259.     push    si
  260. ;    paras = 8
  261. ;    block = 6
  262. ; Line 333
  263. ; Line 335
  264.     mov    ax,WORD PTR [bp+6]    ;block
  265. ; Line 336
  266.     mov    es,ax
  267. ; Line 337
  268.     mov    bx,WORD PTR [bp+8]    ;paras
  269. ; Line 338
  270.     mov    ah,74
  271. ; Line 339
  272.     int    33
  273. ; Line 340
  274.     jb    $failed602
  275. ; Line 341
  276.     xor    ax,ax
  277. ; Line 342
  278. $failed602:
  279. ; Line 343
  280. ; Line 344
  281. $EX601:
  282.     pop    si
  283.     pop    di
  284.     mov    sp,bp
  285.     pop    bp
  286.     ret    
  287.  
  288. _swap_kernel_set_block    ENDP
  289. ; Line 349
  290. _swap_kernel_allocate_block    PROC FAR
  291.     push    bp
  292.     mov    bp,sp
  293.     sub    sp,0
  294.     push    di
  295.     push    si
  296. ;    paras = 6
  297. ; Line 350
  298. ; Line 352
  299.     mov    bx,WORD PTR [bp+6]    ;paras
  300. ; Line 353
  301.     mov    ah,72
  302. ; Line 354
  303.     int    33
  304. ; Line 355
  305.     jae    $done605
  306. ; Line 356
  307.     mov    ax,0
  308. ; Line 357
  309. $done605:
  310. ; Line 358
  311. ; Line 359
  312. $EX604:
  313.     pop    si
  314.     pop    di
  315.     mov    sp,bp
  316.     pop    bp
  317.     ret    
  318.  
  319. _swap_kernel_allocate_block    ENDP
  320. ; Line 368
  321. _swap_kernel_free_upper_blocks    PROC FAR
  322.     push    bp
  323.     mov    bp,sp
  324.     sub    sp,6
  325.     push    di
  326.     push    si
  327. ;    i = -6
  328. ;    mcb = -4
  329. ; Line 369
  330.     mov    WORD PTR [bp-6],0    ;i
  331. ; Line 372
  332.     mov    ax,WORD PTR cs:$S460__swap_kernel_psp
  333.     dec    ax
  334.     mov    WORD PTR [bp-2],ax
  335.     mov    WORD PTR [bp-4],0    ;mcb
  336. ; Line 374
  337. $FC610:
  338.     les    bx,DWORD PTR [bp-4]    ;mcb
  339.     cmp    BYTE PTR es:[bx],77
  340.     je    $JCC1433
  341.     jmp    $FB611
  342. $JCC1433:
  343. ; Line 375
  344. ; Line 376
  345.     les    bx,DWORD PTR [bp-4]    ;mcb
  346.     mov    ax,WORD PTR es:[bx+3]
  347.     inc    ax
  348.     add    WORD PTR [bp-2],ax
  349. ; Line 378
  350.     les    bx,DWORD PTR [bp-4]    ;mcb
  351.     mov    ax,WORD PTR cs:$S460__swap_kernel_psp
  352.     cmp    WORD PTR es:[bx+1],ax
  353.     je    $JCC1460
  354.     jmp    $I612
  355. $JCC1460:
  356. ; Line 379
  357. ; Line 380
  358.     cmp    WORD PTR [bp-6],25    ;i
  359.     jge    $JCC1469
  360.     jmp    $I613
  361. $JCC1469:
  362. ; Line 381
  363.     mov    ax,15
  364.     push    ax
  365.     mov    ax,OFFSET $S588__swap_kernel_err_msg_3
  366.     push    ax
  367.     mov    al,255
  368.     push    ax
  369.     call    FAR PTR _swap_kernel_fatal_error
  370.     add    sp,6
  371. ; Line 382
  372. $I613:
  373.     mov    ax,WORD PTR [bp-2]
  374.     inc    ax
  375.     push    ax
  376.     call    FAR PTR _swap_kernel_free_block
  377.     add    sp,2
  378.     cmp    ax,0
  379.     jne    $JCC1509
  380.     jmp    $I614
  381. $JCC1509:
  382. ; Line 383
  383.     mov    ax,20
  384.     push    ax
  385.     mov    ax,OFFSET $S587__swap_kernel_err_msg_2
  386.     push    ax
  387.     mov    al,255
  388.     push    ax
  389.     call    FAR PTR _swap_kernel_fatal_error
  390.     add    sp,6
  391. ; Line 384
  392. $I614:
  393.     mov    ax,WORD PTR [bp-2]
  394.     inc    ax
  395.     mov    bx,WORD PTR [bp-6]    ;i
  396.     shl    bx,1
  397.     shl    bx,1
  398.     mov    WORD PTR cs:$S476__swap_kernel_orig_mcbs[bx],ax
  399. ; Line 385
  400.     les    bx,DWORD PTR [bp-4]    ;mcb
  401.     mov    ax,WORD PTR es:[bx+3]
  402.     mov    bx,WORD PTR [bp-6]    ;i
  403.     shl    bx,1
  404.     shl    bx,1
  405.     mov    WORD PTR cs:$S476__swap_kernel_orig_mcbs[bx+2],ax
  406. ; Line 386
  407.     inc    WORD PTR [bp-6]    ;i
  408. ; Line 387
  409. ; Line 388
  410. $I612:
  411.     jmp    $FC610
  412. $FB611:
  413. ; Line 389
  414.     mov    bx,WORD PTR [bp-6]    ;i
  415.     shl    bx,1
  416.     shl    bx,1
  417.     mov    WORD PTR cs:$S476__swap_kernel_orig_mcbs[bx],0
  418. ; Line 390
  419. $EX606:
  420.     pop    si
  421.     pop    di
  422.     mov    sp,bp
  423.     pop    bp
  424.     ret    
  425.  
  426. _swap_kernel_free_upper_blocks    ENDP
  427. ; Line 403
  428. _swap_kernel_reclaim_blocks    PROC FAR
  429.     push    bp
  430.     mov    bp,sp
  431.     sub    sp,2
  432.     push    di
  433.     push    si
  434. ;    i = -2
  435. ; Line 404
  436.     mov    WORD PTR [bp-2],0    ;i
  437. ; Line 406
  438. $FC618:
  439.     mov    bx,WORD PTR [bp-2]    ;i
  440.     shl    bx,1
  441.     shl    bx,1
  442.     cmp    WORD PTR cs:$S476__swap_kernel_orig_mcbs[bx],0
  443.     jne    $JCC1621
  444.     jmp    $FB619
  445. $JCC1621:
  446. ; Line 408
  447.     mov    bx,WORD PTR [bp-2]    ;i
  448.     shl    bx,1
  449.     shl    bx,1
  450.     push    WORD PTR cs:$S476__swap_kernel_orig_mcbs[bx+2]
  451.     call    FAR PTR _swap_kernel_allocate_block
  452.     add    sp,2
  453.     mov    bx,WORD PTR [bp-2]    ;i
  454.     shl    bx,1
  455.     shl    bx,1
  456.     cmp    WORD PTR cs:$S476__swap_kernel_orig_mcbs[bx],ax
  457.     jne    $JCC1658
  458.     jmp    $I620
  459. $JCC1658:
  460. ; Line 409
  461.     mov    ax,23
  462.     push    ax
  463.     mov    ax,OFFSET $S585__swap_kernel_err_msg_0
  464.     push    ax
  465.     mov    al,255
  466.     push    ax
  467.     call    FAR PTR _swap_kernel_fatal_error
  468.     add    sp,6
  469. ; Line 410
  470.     jmp    $I621
  471. $I620:
  472. ; Line 411
  473.     inc    WORD PTR [bp-2]    ;i
  474. $I621:
  475.     jmp    $FC618
  476. $FB619:
  477. ; Line 412
  478. $EX615:
  479.     pop    si
  480.     pop    di
  481.     mov    sp,bp
  482.     pop    bp
  483.     ret    
  484.  
  485. _swap_kernel_reclaim_blocks    ENDP
  486. ; Line 417
  487. _swap_kernel_exec    PROC FAR
  488.     push    bp
  489.     mov    bp,sp
  490.     sub    sp,0
  491.     push    di
  492.     push    si
  493. ; Line 419
  494.     mov    ax,WORD PTR cs:$S472__swap_kernel_environ_seg
  495.     mov    WORD PTR cs:$S467__swap_kernel_parameter_block,ax
  496. ; Line 421
  497.     mov    WORD PTR cs:$S467__swap_kernel_parameter_block+2,OFFSET $S469__swap_kernel_cmdline
  498.     mov    WORD PTR cs:$S467__swap_kernel_parameter_block+4,cs
  499. ; Line 423
  500.     mov    WORD PTR cs:$S467__swap_kernel_parameter_block+6,OFFSET $S470__swap_kernel_fcb_1
  501.     mov    WORD PTR cs:$S467__swap_kernel_parameter_block+8,cs
  502. ; Line 425
  503.     mov    WORD PTR cs:$S467__swap_kernel_parameter_block+10,OFFSET $S471__swap_kernel_fcb_2
  504.     mov    WORD PTR cs:$S467__swap_kernel_parameter_block+12,cs
  505. ; Line 429
  506. ; Line 431
  507.     push    ds
  508. ; Line 433
  509.     mov    ax,cs
  510. ; Line 434
  511.     mov    es,ax
  512. ; Line 435
  513.     mov    ds,ax
  514. ; Line 437
  515.     mov    si,OFFSET $S469__swap_kernel_cmdline
  516. ; Line 438
  517.     mov    di,OFFSET $S470__swap_kernel_fcb_1
  518. ; Line 439
  519.     mov    ax,10497
  520. ; Line 440
  521.     int    33
  522. ; Line 441
  523.     mov    di,OFFSET $S471__swap_kernel_fcb_2
  524. ; Line 442
  525.     mov    ax,10497
  526. ; Line 443
  527.     int    33
  528. ; Line 444
  529.     mov    bx,OFFSET $S467__swap_kernel_parameter_block
  530. ; Line 445
  531.     mov    dx,OFFSET $S468__swap_kernel_path
  532. ; Line 447
  533.     mov    ax,19200
  534. ; Line 448
  535.     int    33
  536. ; Line 449
  537.     mov    ax,-1
  538. ; Line 450
  539.     jb    $failed623
  540. ; Line 452
  541.     mov    ah,77
  542. ; Line 453
  543.     int    33
  544. ; Line 454
  545.     mov    WORD PTR $S474__swap_kernel_return_code,ax
  546. ; Line 456
  547. $failed623:
  548. ; Line 457
  549.     pop    ds
  550. ; Line 458
  551. ; Line 459
  552. $EX622:
  553.     pop    si
  554.     pop    di
  555.     mov    sp,bp
  556.     pop    bp
  557.     ret    
  558.  
  559. _swap_kernel_exec    ENDP
  560. ; Line 463
  561. _swap_kernel_spawn_child    PROC FAR
  562.     push    bp
  563.     mov    bp,sp
  564.     sub    sp,0
  565.     push    di
  566.     push    si
  567. ; Line 467
  568. ; Line 470
  569.     mov    WORD PTR cs:$S489__swap_kernel_stack_pointer,sp
  570. ; Line 471
  571.     mov    WORD PTR cs:$S490__swap_kernel_stack_segment,ss
  572. ; Line 474
  573.     cli    
  574. ; Line 477
  575.     mov    ax,SEG $S488__swap_kernel_local_stack
  576. ; Line 478
  577.     mov    ss,ax
  578. ; Line 479
  579.     mov    sp,OFFSET $S488__swap_kernel_local_stack+512
  580. ; Line 482
  581.     sti    
  582. ; Line 483
  583. ; Line 486
  584.     push    WORD PTR cs:$S458__swap_kernel_swapped_bytes+2
  585.     push    WORD PTR cs:$S458__swap_kernel_swapped_bytes
  586.     push    WORD PTR cs:$S463__swap_kernel_environment+2
  587.     push    WORD PTR cs:$S463__swap_kernel_environment
  588.     push    WORD PTR cs:$S459__swap_kernel_handle
  589.     call    DWORD PTR cs:$S484__swap_kernel_swap_out
  590.     add    sp,10
  591.     cmp    ax,0
  592.     jne    $JCC1871
  593.     jmp    $I625
  594. $JCC1871:
  595. ; Line 487
  596.     mov    ax,-1
  597.     jmp    $EX624
  598. ; Line 489
  599. $I625:
  600.     call    FAR PTR _swap_kernel_setup_environment
  601. ; Line 490
  602.     call    FAR PTR _swap_kernel_free_upper_blocks
  603. ; Line 491
  604.     push    WORD PTR cs:$S461__swap_kernel_resident_paras
  605.     push    WORD PTR cs:$S460__swap_kernel_psp
  606.     call    FAR PTR _swap_kernel_set_block
  607.     add    sp,4
  608. ; Line 493
  609.     call    FAR PTR _swap_kernel_exec
  610. ; Line 496
  611.     push    WORD PTR cs:$S462__swap_kernel_first_block_paras
  612.     push    WORD PTR cs:$S460__swap_kernel_psp
  613.     call    FAR PTR _swap_kernel_set_block
  614.     add    sp,4
  615.     cmp    ax,0
  616.     jne    $JCC1936
  617.     jmp    $I626
  618. $JCC1936:
  619. ; Line 497
  620.     mov    ax,23
  621.     push    ax
  622.     mov    ax,OFFSET $S585__swap_kernel_err_msg_0
  623.     push    ax
  624.     mov    al,255
  625.     push    ax
  626.     call    FAR PTR _swap_kernel_fatal_error
  627.     add    sp,6
  628. ; Line 498
  629. $I626:
  630.     call    FAR PTR _swap_kernel_reclaim_blocks
  631. ; Line 501
  632.     push    WORD PTR cs:$S458__swap_kernel_swapped_bytes+2
  633.     push    WORD PTR cs:$S458__swap_kernel_swapped_bytes
  634.     push    WORD PTR cs:$S463__swap_kernel_environment+2
  635.     push    WORD PTR cs:$S463__swap_kernel_environment
  636.     push    WORD PTR cs:$S459__swap_kernel_handle
  637.     call    DWORD PTR cs:$S480__swap_kernel_swap_in
  638.     add    sp,10
  639.     cmp    ax,0
  640.     jne    $JCC2001
  641.     jmp    $I627
  642. $JCC2001:
  643. ; Line 502
  644.     mov    ax,22
  645.     push    ax
  646.     mov    ax,OFFSET $S586__swap_kernel_err_msg_1
  647.     push    ax
  648.     mov    al,255
  649.     push    ax
  650.     call    FAR PTR _swap_kernel_fatal_error
  651.     add    sp,6
  652. ; Line 504
  653. $I627:
  654. ; Line 507
  655.     mov    ax,WORD PTR cs:$S489__swap_kernel_stack_pointer
  656. ; Line 508
  657.     mov    bx,WORD PTR cs:$S490__swap_kernel_stack_segment
  658. ; Line 511
  659.     cli    
  660. ; Line 514
  661.     mov    ss,bx
  662. ; Line 515
  663.     mov    sp,ax
  664. ; Line 518
  665.     sti    
  666. ; Line 519
  667. ; Line 522
  668.     mov    ax,WORD PTR cs:$S474__swap_kernel_return_code
  669.     jmp    $EX624
  670. ; Line 524
  671. $EX624:
  672.     pop    si
  673.     pop    di
  674.     mov    sp,bp
  675.     pop    bp
  676.     ret    
  677.  
  678. _swap_kernel_spawn_child    ENDP
  679. ; Line 534
  680. _swap_kernel_fatal_error    PROC FAR
  681.     push    bp
  682.     mov    bp,sp
  683.     sub    sp,0
  684.     push    di
  685.     push    si
  686. ;    len = 10
  687. ;    msg = 8
  688. ;    code = 6
  689. ; Line 535
  690. ; Line 537
  691.     mov    ax,cs
  692. ; Line 538
  693.     mov    ds,ax
  694. ; Line 539
  695.     mov    bx,2
  696. ; Line 540
  697.     mov    dx,OFFSET $S584__swap_kernel_err_msg_head
  698. ; Line 541
  699.     mov    cx,56
  700. ; Line 542
  701.     mov    ah,64
  702. ; Line 543
  703.     int    33
  704. ; Line 544
  705.     mov    dx,WORD PTR [bp+8]    ;msg
  706. ; Line 545
  707.     mov    cx,WORD PTR [bp+10]    ;len
  708. ; Line 546
  709.     mov    ah,64
  710. ; Line 547
  711.     int    33
  712. ; Line 548
  713.     mov    al,BYTE PTR [bp+6]    ;code
  714. ; Line 549
  715.     mov    ah,76
  716. ; Line 550
  717.     int    33
  718. ; Line 551
  719. ; Line 552
  720. $EX631:
  721.     pop    si
  722.     pop    di
  723.     mov    sp,bp
  724.     pop    bp
  725.     ret    
  726.  
  727. _swap_kernel_fatal_error    ENDP
  728. ; Line 562
  729. _swap_kernel_write_to_handle    PROC FAR
  730.     push    bp
  731.     mov    bp,sp
  732.     sub    sp,4
  733.     push    di
  734.     push    si
  735. ;    size = 12
  736. ;    buffer = 8
  737. ;    handle = 6
  738. ; Line 563
  739. $FC637:
  740.     cmp    WORD PTR [bp+14],0
  741.     jge    $JCC2115
  742.     jmp    $FB638
  743. $JCC2115:
  744.     jle    $JCC2120
  745.     jmp    $L20000
  746. $JCC2120:
  747.     cmp    WORD PTR [bp+12],0    ;size
  748.     ja    $JCC2129
  749.     jmp    $FB638
  750. $JCC2129:
  751. $L20000:
  752. ; Line 564
  753. ;    bytes_written = -2
  754. ;    bytes = -4
  755. ; Line 565
  756.     mov    ax,WORD PTR [bp+12]    ;size
  757.     mov    dx,WORD PTR [bp+14]
  758.     cmp    dx,0
  759.     jge    $JCC2143
  760.     jmp    $L20001
  761. $JCC2143:
  762.     jle    $JCC2148
  763.     jmp    $L20002
  764. $JCC2148:
  765.     cmp    ax,-32768
  766.     ja    $JCC2156
  767.     jmp    $L20001
  768. $JCC2156:
  769. $L20002:
  770.     mov    dx,0
  771.     mov    ax,-32768
  772. $L20001:
  773.     mov    WORD PTR [bp-4],ax    ;bytes
  774. ; Line 566
  775.     push    WORD PTR [bp-4]    ;bytes
  776.     push    WORD PTR [bp+10]
  777.     push    WORD PTR [bp+8]    ;buffer
  778.     push    WORD PTR [bp+6]    ;handle
  779.     call    FAR PTR _swap_kernel_write
  780.     add    sp,8
  781.     mov    WORD PTR [bp-2],ax    ;bytes_written
  782. ; Line 567
  783.     mov    ax,WORD PTR [bp-4]    ;bytes
  784.     cmp    WORD PTR [bp-2],ax    ;bytes_written
  785.     jne    $JCC2199
  786.     jmp    $I641
  787. $JCC2199:
  788. ; Line 568
  789.     mov    ax,-1
  790.     jmp    $EX635
  791. ; Line 569
  792. $I641:
  793.     mov    cl,4
  794.     mov    ax,WORD PTR [bp-4]    ;bytes
  795.     shr    ax,cl
  796.     add    WORD PTR [bp+10],ax
  797.     mov    al,BYTE PTR [bp-4]    ;bytes
  798.     sub    ah,ah
  799.     add    WORD PTR [bp+8],ax    ;buffer
  800. ; Line 570
  801.     mov    ax,WORD PTR [bp-4]    ;bytes
  802.     sub    dx,dx
  803.     sub    WORD PTR [bp+12],ax    ;size
  804.     sbb    WORD PTR [bp+14],dx
  805. ; Line 571
  806.     jmp    $FC637
  807. $FB638:
  808. ; Line 573
  809.     mov    ax,0
  810.     jmp    $EX635
  811. ; Line 574
  812. $EX635:
  813.     pop    si
  814.     pop    di
  815.     mov    sp,bp
  816.     pop    bp
  817.     ret    
  818.  
  819. _swap_kernel_write_to_handle    ENDP
  820. ; Line 578
  821. _swap_kernel_write    PROC FAR
  822.     push    bp
  823.     mov    bp,sp
  824.     sub    sp,0
  825.     push    di
  826.     push    si
  827. ;    bytes = 12
  828. ;    buffer = 8
  829. ;    handle = 6
  830. ; Line 579
  831. ; Line 581
  832.     push    ds
  833. ; Line 582
  834.     mov    dx,WORD PTR [bp+8]    ;buffer
  835. ; Line 583
  836.     mov    ax,WORD PTR [bp+10]
  837. ; Line 584
  838.     mov    ds,ax
  839. ; Line 585
  840.     mov    bx,WORD PTR [bp+6]    ;handle
  841. ; Line 586
  842.     mov    cx,WORD PTR [bp+12]    ;bytes
  843. ; Line 587
  844.     mov    ah,64
  845. ; Line 588
  846.     int    33
  847. ; Line 589
  848.     jae    $done646
  849. ; Line 590
  850.     mov    ax,-1
  851. ; Line 591
  852. $done646:
  853. ; Line 592
  854.     pop    ds
  855. ; Line 593
  856. ; Line 594
  857. $EX645:
  858.     pop    si
  859.     pop    di
  860.     mov    sp,bp
  861.     pop    bp
  862.     ret    
  863.  
  864. _swap_kernel_write    ENDP
  865. ; Line 602
  866. _swap_kernel_read_from_handle    PROC FAR
  867.     push    bp
  868.     mov    bp,sp
  869.     sub    sp,4
  870.     push    di
  871.     push    si
  872. ;    size = 12
  873. ;    buffer = 8
  874. ;    handle = 6
  875. ; Line 603
  876.     push    WORD PTR [bp+6]    ;handle
  877.     call    FAR PTR _swap_kernel_rewind
  878.     add    sp,2
  879. ; Line 605
  880. $FC652:
  881.     cmp    WORD PTR [bp+14],0
  882.     jge    $JCC2318
  883.     jmp    $FB653
  884. $JCC2318:
  885.     jle    $JCC2323
  886.     jmp    $L20003
  887. $JCC2323:
  888.     cmp    WORD PTR [bp+12],0    ;size
  889.     ja    $JCC2332
  890.     jmp    $FB653
  891. $JCC2332:
  892. $L20003:
  893. ; Line 606
  894. ;    bytes = -4
  895. ;    bytes_read = -2
  896. ; Line 607
  897.     mov    ax,WORD PTR [bp+12]    ;size
  898.     mov    dx,WORD PTR [bp+14]
  899.     cmp    dx,0
  900.     jge    $JCC2346
  901.     jmp    $L20004
  902. $JCC2346:
  903.     jle    $JCC2351
  904.     jmp    $L20005
  905. $JCC2351:
  906.     cmp    ax,-32768
  907.     ja    $JCC2359
  908.     jmp    $L20004
  909. $JCC2359:
  910. $L20005:
  911.     mov    dx,0
  912.     mov    ax,-32768
  913. $L20004:
  914.     mov    WORD PTR [bp-4],ax    ;bytes
  915. ; Line 608
  916.     push    WORD PTR [bp-4]    ;bytes
  917.     push    WORD PTR [bp+10]
  918.     push    WORD PTR [bp+8]    ;buffer
  919.     push    WORD PTR [bp+6]    ;handle
  920.     call    FAR PTR _swap_kernel_read
  921.     add    sp,8
  922.     mov    WORD PTR [bp-2],ax    ;bytes_read
  923. ; Line 609
  924.     mov    ax,WORD PTR [bp-4]    ;bytes
  925.     cmp    WORD PTR [bp-2],ax    ;bytes_read
  926.     jne    $JCC2402
  927.     jmp    $I656
  928. $JCC2402:
  929. ; Line 610
  930.     mov    ax,-1
  931.     jmp    $EX650
  932. ; Line 611
  933. $I656:
  934.     mov    cl,4
  935.     mov    ax,WORD PTR [bp-4]    ;bytes
  936.     shr    ax,cl
  937.     add    WORD PTR [bp+10],ax
  938.     mov    al,BYTE PTR [bp-4]    ;bytes
  939.     sub    ah,ah
  940.     add    WORD PTR [bp+8],ax    ;buffer
  941. ; Line 612
  942.     mov    ax,WORD PTR [bp-4]    ;bytes
  943.     sub    dx,dx
  944.     sub    WORD PTR [bp+12],ax    ;size
  945.     sbb    WORD PTR [bp+14],dx
  946. ; Line 613
  947.     jmp    $FC652
  948. $FB653:
  949. ; Line 615
  950.     mov    ax,0
  951.     jmp    $EX650
  952. ; Line 616
  953. $EX650:
  954.     pop    si
  955.     pop    di
  956.     mov    sp,bp
  957.     pop    bp
  958.     ret    
  959.  
  960. _swap_kernel_read_from_handle    ENDP
  961. ; Line 620
  962. _swap_kernel_read    PROC FAR
  963.     push    bp
  964.     mov    bp,sp
  965.     sub    sp,0
  966.     push    di
  967.     push    si
  968. ;    bytes = 12
  969. ;    buffer = 8
  970. ;    handle = 6
  971. ; Line 621
  972. ; Line 623
  973.     push    ds
  974. ; Line 624
  975.     mov    dx,WORD PTR [bp+8]    ;buffer
  976. ; Line 625
  977.     mov    ax,WORD PTR [bp+10]
  978. ; Line 626
  979.     mov    ds,ax
  980. ; Line 627
  981.     mov    bx,WORD PTR [bp+6]    ;handle
  982. ; Line 628
  983.     mov    cx,WORD PTR [bp+12]    ;bytes
  984. ; Line 629
  985.     mov    ah,63
  986. ; Line 630
  987.     int    33
  988. ; Line 631
  989.     jae    $done661
  990. ; Line 632
  991.     mov    ax,-1
  992. ; Line 633
  993. $done661:
  994. ; Line 634
  995.     pop    ds
  996. ; Line 635
  997. ; Line 636
  998. $EX660:
  999.     pop    si
  1000.     pop    di
  1001.     mov    sp,bp
  1002.     pop    bp
  1003.     ret    
  1004.  
  1005. _swap_kernel_read    ENDP
  1006. ; Line 643
  1007. _swap_kernel_rewind    PROC FAR
  1008.     push    bp
  1009.     mov    bp,sp
  1010.     sub    sp,0
  1011.     push    di
  1012.     push    si
  1013. ;    handle = 6
  1014. ; Line 644
  1015. ; Line 646
  1016.     mov    bx,WORD PTR [bp+6]    ;handle
  1017. ; Line 647
  1018.     mov    cx,0
  1019. ; Line 648
  1020.     mov    dx,0
  1021. ; Line 649
  1022.     mov    ax,16896
  1023. ; Line 650
  1024.     int    33
  1025. ; Line 651
  1026.     jb    $failed664
  1027. ; Line 652
  1028.     mov    ax,0
  1029. ; Line 653
  1030. $failed664:
  1031. ; Line 654
  1032. ; Line 655
  1033. $EX663:
  1034.     pop    si
  1035.     pop    di
  1036.     mov    sp,bp
  1037.     pop    bp
  1038.     ret    
  1039.  
  1040. _swap_kernel_rewind    ENDP
  1041. ; Line 663
  1042. _swap_kernel_xms_move_out    PROC FAR
  1043.     push    bp
  1044.     mov    bp,sp
  1045.     sub    sp,0
  1046.     push    di
  1047.     push    si
  1048. ;    bytes = 12
  1049. ;    buffer = 8
  1050. ;    handle = 6
  1051. ; Line 664
  1052.     mov    ax,WORD PTR [bp+12]    ;bytes
  1053.     mov    dx,WORD PTR [bp+14]
  1054.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table,ax
  1055.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+2,dx
  1056. ; Line 665
  1057.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+4,0
  1058. ; Line 666
  1059.     mov    ax,WORD PTR [bp+8]    ;buffer
  1060.     mov    dx,WORD PTR [bp+10]
  1061.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+6,ax
  1062.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+8,dx
  1063. ; Line 667
  1064.     mov    ax,WORD PTR [bp+6]    ;handle
  1065.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+10,ax
  1066. ; Line 668
  1067.     sub    ax,ax
  1068.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+14,ax
  1069.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+12,ax
  1070. ; Line 670
  1071.     call    FAR PTR _swap_kernel_xms_move
  1072. ; Line 671
  1073. $EX668:
  1074.     pop    si
  1075.     pop    di
  1076.     mov    sp,bp
  1077.     pop    bp
  1078.     ret    
  1079.  
  1080. _swap_kernel_xms_move_out    ENDP
  1081. ; Line 675
  1082. _swap_kernel_xms_move_in    PROC FAR
  1083.     push    bp
  1084.     mov    bp,sp
  1085.     sub    sp,0
  1086.     push    di
  1087.     push    si
  1088. ;    bytes = 12
  1089. ;    buffer = 8
  1090. ;    handle = 6
  1091. ; Line 676
  1092.     mov    ax,WORD PTR [bp+12]    ;bytes
  1093.     mov    dx,WORD PTR [bp+14]
  1094.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table,ax
  1095.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+2,dx
  1096. ; Line 677
  1097.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+10,0
  1098. ; Line 678
  1099.     mov    ax,WORD PTR [bp+8]    ;buffer
  1100.     mov    dx,WORD PTR [bp+10]
  1101.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+12,ax
  1102.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+14,dx
  1103. ; Line 679
  1104.     mov    ax,WORD PTR [bp+6]    ;handle
  1105.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+4,ax
  1106. ; Line 680
  1107.     sub    ax,ax
  1108.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+8,ax
  1109.     mov    WORD PTR cs:$S487__swap_kernel_xms_move_table+6,ax
  1110. ; Line 682
  1111.     call    FAR PTR _swap_kernel_xms_move
  1112. ; Line 683
  1113. $EX672:
  1114.     pop    si
  1115.     pop    di
  1116.     mov    sp,bp
  1117.     pop    bp
  1118.     ret    
  1119.  
  1120. _swap_kernel_xms_move_in    ENDP
  1121. ; Line 687
  1122. _swap_kernel_xms_move    PROC FAR
  1123.     push    bp
  1124.     mov    bp,sp
  1125.     sub    sp,0
  1126.     push    di
  1127.     push    si
  1128. ; Line 688
  1129. ; Line 690
  1130.     push    ds
  1131. ; Line 691
  1132.     mov    si,OFFSET $S487__swap_kernel_xms_move_table
  1133. ; Line 692
  1134.     mov    ax,SEG $S487__swap_kernel_xms_move_table
  1135. ; Line 693
  1136.     mov    ds,ax
  1137. ; Line 694
  1138.     mov    ah,11
  1139. ; Line 695
  1140.     call    DWORD PTR cs:$S485__swap_kernel_xms_control
  1141. ; Line 696
  1142.     cmp    ax,1
  1143. ; Line 697
  1144.     jne    $failed674
  1145. ; Line 698
  1146.     mov    ax,0
  1147. ; Line 699
  1148.     jmp    $done675
  1149. ; Line 700
  1150. $failed674:
  1151. ; Line 701
  1152.     mov    ax,-1
  1153. ; Line 702
  1154. $done675:
  1155. ; Line 703
  1156.     pop    ds
  1157. ; Line 704
  1158. ; Line 705
  1159. $EX673:
  1160.     pop    si
  1161.     pop    di
  1162.     mov    sp,bp
  1163.     pop    bp
  1164.     ret    
  1165.  
  1166. _swap_kernel_xms_move    ENDP
  1167. ; Line 716
  1168. _swap_kernel_ems_move_out    PROC FAR
  1169.     push    bp
  1170.     mov    bp,sp
  1171.     sub    sp,10
  1172.     push    di
  1173.     push    si
  1174. ;    ptr = -4
  1175. ;    logical_page = -6
  1176. ;    bytes = 12
  1177. ;    buffer = 8
  1178. ;    handle = 6
  1179. ; Line 717
  1180.     mov    ax,WORD PTR [bp+8]    ;buffer
  1181.     mov    dx,WORD PTR [bp+10]
  1182.     mov    WORD PTR [bp-4],ax    ;ptr
  1183.     mov    WORD PTR [bp-2],dx
  1184. ; Line 718
  1185.     mov    WORD PTR [bp-6],0    ;logical_page
  1186. ; Line 720
  1187.     push    WORD PTR [bp+6]    ;handle
  1188.     call    FAR PTR _swap_kernel_ems_save_page_map
  1189.     add    sp,2
  1190. ; Line 722
  1191. $FC683:
  1192.     cmp    WORD PTR [bp+14],0
  1193.     jge    $JCC2766
  1194.     jmp    $FB684
  1195. $JCC2766:
  1196.     jle    $JCC2771
  1197.     jmp    $L20006
  1198. $JCC2771:
  1199.     cmp    WORD PTR [bp+12],0    ;bytes
  1200.     ja    $JCC2780
  1201.     jmp    $FB684
  1202. $JCC2780:
  1203. $L20006:
  1204. ; Line 723
  1205. ;    n = -8
  1206. ; Line 724
  1207.     mov    ax,WORD PTR [bp+12]    ;bytes
  1208.     mov    dx,WORD PTR [bp+14]
  1209.     cmp    dx,0
  1210.     jge    $JCC2794
  1211.     jmp    $L20007
  1212. $JCC2794:
  1213.     jle    $JCC2799
  1214.     jmp    $L20008
  1215. $JCC2799:
  1216.     cmp    ax,16384
  1217.     ja    $JCC2807
  1218.     jmp    $L20007
  1219. $JCC2807:
  1220. $L20008:
  1221.     mov    dx,0
  1222.     mov    ax,16384
  1223. $L20007:
  1224.     mov    WORD PTR [bp-8],ax    ;n
  1225. ; Line 726
  1226.     push    WORD PTR [bp-6]    ;logical_page
  1227.     inc    WORD PTR [bp-6]    ;logical_page
  1228.     push    WORD PTR [bp+6]    ;handle
  1229.     call    FAR PTR _swap_kernel_ems_map_logical_pa
  1230.     add    sp,4
  1231.     cmp    ax,0
  1232.     jne    $JCC2841
  1233.     jmp    $I686
  1234. $JCC2841:
  1235. ; Line 727
  1236.     mov    ax,-1
  1237.     jmp    $EX679
  1238. ; Line 729
  1239. $I686:
  1240.     push    WORD PTR [bp-8]    ;n
  1241.     push    WORD PTR [bp-2]
  1242.     push    WORD PTR [bp-4]    ;ptr
  1243.     push    WORD PTR cs:$S465__swap_kernel_ems_page_frame+2
  1244.     push    WORD PTR cs:$S465__swap_kernel_ems_page_frame
  1245.     call    FAR PTR _swap_kernel_memcpy
  1246.     add    sp,10
  1247. ; Line 731
  1248.     mov    ax,WORD PTR [bp-8]    ;n
  1249.     sub    dx,dx
  1250.     sub    WORD PTR [bp+12],ax    ;bytes
  1251.     sbb    WORD PTR [bp+14],dx
  1252. ; Line 732
  1253.     mov    cl,4
  1254.     mov    ax,WORD PTR [bp-8]    ;n
  1255.     shr    ax,cl
  1256.     add    WORD PTR [bp-2],ax
  1257.     mov    al,BYTE PTR [bp-8]    ;n
  1258.     sub    ah,ah
  1259.     add    WORD PTR [bp-4],ax    ;ptr
  1260. ; Line 733
  1261.     jmp    $FC683
  1262. $FB684:
  1263. ; Line 735
  1264.     push    WORD PTR [bp+6]    ;handle
  1265.     call    FAR PTR _swap_kernel_ems_restore_page_m
  1266.     add    sp,2
  1267. ; Line 737
  1268.     mov    ax,0
  1269.     jmp    $EX679
  1270. ; Line 738
  1271. $EX679:
  1272.     pop    si
  1273.     pop    di
  1274.     mov    sp,bp
  1275.     pop    bp
  1276.     ret    
  1277.  
  1278. _swap_kernel_ems_move_out    ENDP
  1279. ; Line 743
  1280. _swap_kernel_ems_move_in    PROC FAR
  1281.     push    bp
  1282.     mov    bp,sp
  1283.     sub    sp,10
  1284.     push    di
  1285.     push    si
  1286. ;    ptr = -4
  1287. ;    logical_page = -6
  1288. ;    bytes = 12
  1289. ;    buffer = 8
  1290. ;    handle = 6
  1291. ; Line 744
  1292.     mov    ax,WORD PTR [bp+8]    ;buffer
  1293.     mov    dx,WORD PTR [bp+10]
  1294.     mov    WORD PTR [bp-4],ax    ;ptr
  1295.     mov    WORD PTR [bp-2],dx
  1296. ; Line 745
  1297.     mov    WORD PTR [bp-6],0    ;logical_page
  1298. ; Line 747
  1299.     push    WORD PTR [bp+6]    ;handle
  1300.     call    FAR PTR _swap_kernel_ems_save_page_map
  1301.     add    sp,2
  1302. ; Line 749
  1303. $FC694:
  1304.     cmp    WORD PTR [bp+14],0
  1305.     jge    $JCC2975
  1306.     jmp    $FB695
  1307. $JCC2975:
  1308.     jle    $JCC2980
  1309.     jmp    $L20009
  1310. $JCC2980:
  1311.     cmp    WORD PTR [bp+12],0    ;bytes
  1312.     ja    $JCC2989
  1313.     jmp    $FB695
  1314. $JCC2989:
  1315. $L20009:
  1316. ; Line 750
  1317. ;    n = -8
  1318. ; Line 751
  1319.     mov    ax,WORD PTR [bp+12]    ;bytes
  1320.     mov    dx,WORD PTR [bp+14]
  1321.     cmp    dx,0
  1322.     jge    $JCC3003
  1323.     jmp    $L20010
  1324. $JCC3003:
  1325.     jle    $JCC3008
  1326.     jmp    $L20011
  1327. $JCC3008:
  1328.     cmp    ax,16384
  1329.     ja    $JCC3016
  1330.     jmp    $L20010
  1331. $JCC3016:
  1332. $L20011:
  1333.     mov    dx,0
  1334.     mov    ax,16384
  1335. $L20010:
  1336.     mov    WORD PTR [bp-8],ax    ;n
  1337. ; Line 753
  1338.     push    WORD PTR [bp-6]    ;logical_page
  1339.     inc    WORD PTR [bp-6]    ;logical_page
  1340.     push    WORD PTR [bp+6]    ;handle
  1341.     call    FAR PTR _swap_kernel_ems_map_logical_pa
  1342.     add    sp,4
  1343.     cmp    ax,0
  1344.     jne    $JCC3050
  1345.     jmp    $I697
  1346. $JCC3050:
  1347. ; Line 754
  1348.     mov    ax,-1
  1349.     jmp    $EX690
  1350. ; Line 756
  1351. $I697:
  1352.     push    WORD PTR [bp-8]    ;n
  1353.     push    WORD PTR cs:$S465__swap_kernel_ems_page_frame+2
  1354.     push    WORD PTR cs:$S465__swap_kernel_ems_page_frame
  1355.     push    WORD PTR [bp-2]
  1356.     push    WORD PTR [bp-4]    ;ptr
  1357.     call    FAR PTR _swap_kernel_memcpy
  1358.     add    sp,10
  1359. ; Line 758
  1360.     mov    ax,WORD PTR [bp-8]    ;n
  1361.     sub    dx,dx
  1362.     sub    WORD PTR [bp+12],ax    ;bytes
  1363.     sbb    WORD PTR [bp+14],dx
  1364. ; Line 759
  1365.     mov    cl,4
  1366.     mov    ax,WORD PTR [bp-8]    ;n
  1367.     shr    ax,cl
  1368.     add    WORD PTR [bp-2],ax
  1369.     mov    al,BYTE PTR [bp-8]    ;n
  1370.     sub    ah,ah
  1371.     add    WORD PTR [bp-4],ax    ;ptr
  1372. ; Line 760
  1373.     jmp    $FC694
  1374. $FB695:
  1375. ; Line 762
  1376.     push    WORD PTR [bp+6]    ;handle
  1377.     call    FAR PTR _swap_kernel_ems_restore_page_m
  1378.     add    sp,2
  1379. ; Line 764
  1380.     mov    ax,0
  1381.     jmp    $EX690
  1382. ; Line 765
  1383. $EX690:
  1384.     pop    si
  1385.     pop    di
  1386.     mov    sp,bp
  1387.     pop    bp
  1388.     ret    
  1389.  
  1390. _swap_kernel_ems_move_in    ENDP
  1391. ; Line 770
  1392. _swap_kernel_ems_map_logical_pa    PROC FAR
  1393.     push    bp
  1394.     mov    bp,sp
  1395.     sub    sp,0
  1396.     push    di
  1397.     push    si
  1398. ;    logical_page = 8
  1399. ;    handle = 6
  1400. ; Line 771
  1401. ; Line 773
  1402.     mov    dx,WORD PTR [bp+6]    ;handle
  1403. ; Line 774
  1404.     mov    bx,WORD PTR [bp+8]    ;logical_page
  1405. ; Line 775
  1406.     mov    ax,17408
  1407. ; Line 776
  1408.     int    103
  1409. ; Line 777
  1410.     mov    cl,8
  1411. ; Line 778
  1412.     shr    ax,cl
  1413. ; Line 779
  1414. ; Line 780
  1415. $EX700:
  1416.     pop    si
  1417.     pop    di
  1418.     mov    sp,bp
  1419.     pop    bp
  1420.     ret    
  1421.  
  1422. _swap_kernel_ems_map_logical_pa    ENDP
  1423. ; Line 784
  1424. _swap_kernel_ems_save_page_map    PROC FAR
  1425.     push    bp
  1426.     mov    bp,sp
  1427.     sub    sp,0
  1428.     push    di
  1429.     push    si
  1430. ;    handle = 6
  1431. ; Line 785
  1432. ; Line 787
  1433.     mov    dx,WORD PTR [bp+6]    ;handle
  1434. ; Line 788
  1435.     mov    ah,71
  1436. ; Line 789
  1437.     int    103
  1438. ; Line 790
  1439.     mov    cl,8
  1440. ; Line 791
  1441.     shr    ax,cl
  1442. ; Line 792
  1443. ; Line 793
  1444. $EX702:
  1445.     pop    si
  1446.     pop    di
  1447.     mov    sp,bp
  1448.     pop    bp
  1449.     ret    
  1450.  
  1451. _swap_kernel_ems_save_page_map    ENDP
  1452. ; Line 797
  1453. _swap_kernel_ems_restore_page_m    PROC FAR
  1454.     push    bp
  1455.     mov    bp,sp
  1456.     sub    sp,0
  1457.     push    di
  1458.     push    si
  1459. ;    handle = 6
  1460. ; Line 798
  1461. ; Line 800
  1462.     mov    dx,WORD PTR [bp+6]    ;handle
  1463. ; Line 801
  1464.     mov    ah,72
  1465. ; Line 802
  1466.     int    103
  1467. ; Line 803
  1468.     mov    cl,8
  1469. ; Line 804
  1470.     shr    ax,cl
  1471. ; Line 805
  1472. ; Line 806
  1473. $EX704:
  1474.     pop    si
  1475.     pop    di
  1476.     mov    sp,bp
  1477.     pop    bp
  1478.     ret    
  1479.  
  1480. _swap_kernel_ems_restore_page_m    ENDP
  1481. ; Line 824
  1482. _swap_kernel_int23_handler    PROC FAR
  1483.     push    bp
  1484.     mov    bp,sp
  1485.     sub    sp,0
  1486.     push    di
  1487.     push    si
  1488. ; Line 826
  1489.     mov    WORD PTR cs:$S568__swap_kernel_user_interrupt,1
  1490. ; Line 828
  1491. ; Line 830
  1492.     push    ax
  1493. ; Line 831
  1494.     push    bx
  1495. ; Line 832
  1496.     push    cx
  1497. ; Line 833
  1498.     push    dx
  1499. ; Line 834
  1500.     push    ds
  1501. ; Line 835
  1502.     pushf    
  1503. ; Line 837
  1504.     sti    
  1505. ; Line 838
  1506.     push    cs
  1507. ; Line 839
  1508.     pop    ds
  1509. ; Line 840
  1510.     mov    bx,2
  1511. ; Line 841
  1512.     mov    dx,OFFSET $S569__swap_kernel_int23_message
  1513. ; Line 842
  1514.     mov    cx,20
  1515. ; Line 843
  1516.     mov    ah,64
  1517. ; Line 844
  1518.     int    33
  1519. ; Line 846
  1520.     popf    
  1521. ; Line 847
  1522.     pop    ds
  1523. ; Line 848
  1524.     pop    dx
  1525. ; Line 849
  1526.     pop    cx
  1527. ; Line 850
  1528.     pop    bx
  1529. ; Line 851
  1530.     pop    ax
  1531. ; Line 853
  1532.     pop    si
  1533. ; Line 854
  1534.     pop    di
  1535. ; Line 855
  1536.     pop    bp
  1537. ; Line 857
  1538.     stc    
  1539. ; Line 858
  1540.     ret    
  1541. ; Line 859
  1542. ; Line 860
  1543. $EX705:
  1544.     pop    si
  1545.     pop    di
  1546.     mov    sp,bp
  1547.     pop    bp
  1548.     ret    
  1549.  
  1550. _swap_kernel_int23_handler    ENDP
  1551. ; Line 867
  1552. _swap_kernel_end    PROC FAR
  1553.     push    bp
  1554.     mov    bp,sp
  1555.     sub    sp,0
  1556.     push    di
  1557.     push    si
  1558. ; Line 869
  1559. $EX706:
  1560.     pop    si
  1561.     pop    di
  1562.     mov    sp,bp
  1563.     pop    bp
  1564.     ret    
  1565.  
  1566. _swap_kernel_end    ENDP
  1567. ; Line 880
  1568. install_parameters    PROC FAR
  1569.     push    bp
  1570.     mov    bp,sp
  1571.     mov    ax,10
  1572.     call    FAR PTR __aFchkstk
  1573.     push    di
  1574.     push    si
  1575. ;    len = -6
  1576. ;    mcb = -4
  1577. ;    size = 18
  1578. ;    env = 14
  1579. ;    cmdline = 10
  1580. ;    path = 6
  1581. ; Line 881
  1582.     push    WORD PTR [bp+12]
  1583.     push    WORD PTR [bp+10]    ;cmdline
  1584.     call    FAR PTR _strlen
  1585.     add    sp,4
  1586.     mov    WORD PTR [bp-6],ax    ;len
  1587. ; Line 884
  1588.     push    WORD PTR [bp+8]
  1589.     push    WORD PTR [bp+6]    ;path
  1590.     mov    ax,OFFSET $S468__swap_kernel_path
  1591.     push    cs
  1592.     push    ax
  1593.     call    FAR PTR __fstrcpy
  1594.     add    sp,8
  1595. ; Line 886
  1596.     mov    al,BYTE PTR [bp-6]    ;len
  1597.     mov    BYTE PTR cs:$S469__swap_kernel_cmdline,al
  1598. ; Line 887
  1599.     push    WORD PTR [bp+12]
  1600.     push    WORD PTR [bp+10]    ;cmdline
  1601.     mov    ax,OFFSET $S469__swap_kernel_cmdline+1
  1602.     push    cs
  1603.     push    ax
  1604.     call    FAR PTR __fstrcpy
  1605.     add    sp,8
  1606. ; Line 888
  1607.     mov    bx,WORD PTR [bp-6]    ;len
  1608.     mov    BYTE PTR cs:$S469__swap_kernel_cmdline[bx+1],13
  1609. ; Line 890
  1610.     mov    ax,WORD PTR [bp+14]    ;env
  1611.     mov    dx,WORD PTR [bp+16]
  1612.     mov    WORD PTR cs:$S464__swap_kernel_environment_ptr,ax
  1613.     mov    WORD PTR cs:$S464__swap_kernel_environment_ptr+2,dx
  1614. ; Line 891
  1615.     mov    ax,WORD PTR [bp+18]    ;size
  1616.     mov    WORD PTR cs:$S473__swap_kernel_environment_size,ax
  1617. ; Line 893
  1618.     mov    ax,WORD PTR __psp
  1619.     mov    WORD PTR cs:$S460__swap_kernel_psp,ax
  1620. ; Line 894
  1621.     mov    ax,WORD PTR cs:$S460__swap_kernel_psp
  1622.     dec    ax
  1623.     mov    WORD PTR [bp-2],ax
  1624.     mov    WORD PTR [bp-4],0    ;mcb
  1625.     les    bx,DWORD PTR [bp-4]    ;mcb
  1626.     mov    ax,WORD PTR es:[bx+3]
  1627.     mov    WORD PTR cs:$S462__swap_kernel_first_block_paras,ax
  1628. ; Line 895
  1629. $EX711:
  1630.     pop    si
  1631.     pop    di
  1632.     mov    sp,bp
  1633.     pop    bp
  1634.     ret    
  1635.  
  1636. install_parameters    ENDP
  1637. ; Line 904
  1638. alloc_swap_kernel_file    PROC FAR
  1639.     push    bp
  1640.     mov    bp,sp
  1641.     mov    ax,18
  1642.     call    FAR PTR __aFchkstk
  1643.     push    di
  1644.     push    si
  1645. ;    disk_free = -16
  1646. ;    drive = -6
  1647. ;    free = -4
  1648. ;    handle = -8
  1649. ;    size = 10
  1650. ;    name = 6
  1651. ; Line 910
  1652.     mov    ax,WORD PTR [bp+8]
  1653.     or    ax,WORD PTR [bp+6]    ;name
  1654.     jne    $JCC3457
  1655.     jmp    $I722
  1656. $JCC3457:
  1657.     les    bx,DWORD PTR [bp+6]    ;name
  1658.     cmp    BYTE PTR es:[bx],0
  1659.     je    $JCC3469
  1660.     jmp    $I721
  1661. $JCC3469:
  1662. $I722:
  1663. ; Line 911
  1664.     mov    ax,-1
  1665.     jmp    $EX716
  1666. ; Line 913
  1667. $I721:
  1668.     les    bx,DWORD PTR [bp+6]    ;name
  1669.     cmp    BYTE PTR es:[bx+1],58
  1670.     je    $JCC3488
  1671.     jmp    $I723
  1672. $JCC3488:
  1673. ; Line 914
  1674.     les    bx,DWORD PTR [bp+6]    ;name
  1675.     mov    al,BYTE PTR es:[bx]
  1676.     cbw    
  1677.     mov    bx,ax
  1678.     test    BYTE PTR __ctype[bx+1],1
  1679.     jne    $JCC3507
  1680.     jmp    $L20013
  1681. $JCC3507:
  1682.     les    bx,DWORD PTR [bp+6]    ;name
  1683.     mov    al,BYTE PTR es:[bx]
  1684.     cbw    
  1685.     add    ax,32
  1686.     jmp    $L20014
  1687. $L20013:
  1688.     les    bx,DWORD PTR [bp+6]    ;name
  1689.     mov    al,BYTE PTR es:[bx]
  1690.     cbw    
  1691. $L20014:
  1692.     sub    ax,96
  1693.     mov    WORD PTR [bp-6],ax    ;drive
  1694. ; Line 915
  1695.     jmp    $I724
  1696. $I723:
  1697. ; Line 917
  1698.     lea    ax,WORD PTR [bp-6]    ;drive
  1699.     push    ss
  1700.     push    ax
  1701.     call    FAR PTR __dos_getdrive
  1702.     add    sp,4
  1703. $I724:
  1704. ; Line 919
  1705.     lea    ax,WORD PTR [bp-16]    ;disk_free
  1706.     push    ss
  1707.     push    ax
  1708.     push    WORD PTR [bp-6]    ;drive
  1709.     call    FAR PTR __dos_getdiskfree
  1710.     add    sp,6
  1711. ; Line 922
  1712.     mov    ax,WORD PTR [bp-10]
  1713.     sub    dx,dx
  1714.     push    dx
  1715.     push    ax
  1716.     mov    ax,WORD PTR [bp-14]
  1717.     mul    WORD PTR [bp-12]
  1718.     push    dx
  1719.     push    ax
  1720.     call    FAR PTR __aFlmul
  1721.     mov    WORD PTR [bp-4],ax    ;free
  1722.     mov    WORD PTR [bp-2],dx
  1723. ; Line 924
  1724.     mov    ax,WORD PTR [bp-4]    ;free
  1725.     mov    dx,WORD PTR [bp-2]
  1726.     cmp    WORD PTR [bp+12],dx
  1727.     jge    $JCC3605
  1728.     jmp    $I725
  1729. $JCC3605:
  1730.     jle    $JCC3610
  1731.     jmp    $L20016
  1732. $JCC3610:
  1733.     cmp    WORD PTR [bp+10],ax    ;size
  1734.     ja    $JCC3618
  1735.     jmp    $I725
  1736. $JCC3618:
  1737. $L20016:
  1738. ; Line 925
  1739.     mov    ax,-1
  1740.     jmp    $EX716
  1741. ; Line 927
  1742. $I725:
  1743.     lea    ax,WORD PTR [bp-8]    ;handle
  1744.     push    ss
  1745.     push    ax
  1746.     mov    ax,0
  1747.     push    ax
  1748.     push    WORD PTR [bp+8]
  1749.     push    WORD PTR [bp+6]    ;name
  1750.     call    FAR PTR __dos_creat
  1751.     add    sp,10
  1752.     cmp    ax,0
  1753.     jne    $JCC3655
  1754.     jmp    $I726
  1755. $JCC3655:
  1756. ; Line 928
  1757.     mov    ax,-1
  1758.     jmp    $EX716
  1759. ; Line 929
  1760.     jmp    $I727
  1761. $I726:
  1762. ; Line 930
  1763.     mov    ax,WORD PTR [bp-8]    ;handle
  1764.     jmp    $EX716
  1765. $I727:
  1766. ; Line 931
  1767. $EX716:
  1768.     pop    si
  1769.     pop    di
  1770.     mov    sp,bp
  1771.     pop    bp
  1772.     ret    
  1773.  
  1774. alloc_swap_kernel_file    ENDP
  1775. ; Line 937
  1776. cleanup_swap_kernel_file    PROC FAR
  1777.     push    bp
  1778.     mov    bp,sp
  1779.     mov    ax,0
  1780.     call    FAR PTR __aFchkstk
  1781.     push    di
  1782.     push    si
  1783. ;    name = 8
  1784. ;    handle = 6
  1785. ; Line 938
  1786.     push    WORD PTR [bp+6]    ;handle
  1787.     call    FAR PTR __dos_close
  1788.     add    sp,2
  1789.     cmp    ax,0
  1790.     je    $JCC3708
  1791.     jmp    $L20017
  1792. $JCC3708:
  1793.     push    WORD PTR [bp+10]
  1794.     push    WORD PTR [bp+8]    ;name
  1795.     call    FAR PTR _unlink
  1796.     add    sp,4
  1797.     cmp    ax,0
  1798.     je    $JCC3730
  1799.     jmp    $L20017
  1800. $JCC3730:
  1801.     mov    ax,1
  1802.     jmp    $L20018
  1803. $L20017:
  1804.     mov    ax,0
  1805. $L20018:
  1806.     jmp    $EX730
  1807. ; Line 939
  1808. $EX730:
  1809.     pop    si
  1810.     pop    di
  1811.     mov    sp,bp
  1812.     pop    bp
  1813.     ret    
  1814.  
  1815. cleanup_swap_kernel_file    ENDP
  1816. ; Line 949
  1817. xms_installed    PROC FAR
  1818.     push    bp
  1819.     mov    bp,sp
  1820.     mov    ax,0
  1821.     call    FAR PTR __aFchkstk
  1822.     push    di
  1823.     push    si
  1824. ; Line 950
  1825. ; Line 952
  1826.     mov    ax,17152
  1827. ; Line 953
  1828.     int    47
  1829. ; Line 954
  1830.     cmp    al,128
  1831. ; Line 955
  1832.     jne    $failed732
  1833. ; Line 956
  1834.     mov    ax,1
  1835. ; Line 957
  1836.     jmp    $done733
  1837. ; Line 958
  1838. $failed732:
  1839. ; Line 959
  1840.     mov    ax,0
  1841. ; Line 960
  1842. $done733:
  1843. ; Line 961
  1844. ; Line 962
  1845. $EX731:
  1846.     pop    si
  1847.     pop    di
  1848.     mov    sp,bp
  1849.     pop    bp
  1850.     ret    
  1851.  
  1852. xms_installed    ENDP
  1853. ; Line 966
  1854. xms_get_control_function    PROC FAR
  1855.     push    bp
  1856.     mov    bp,sp
  1857.     mov    ax,0
  1858.     call    FAR PTR __aFchkstk
  1859.     push    di
  1860.     push    si
  1861. ; Line 967
  1862. ; Line 969
  1863.     mov    ax,17168
  1864. ; Line 970
  1865.     int    47
  1866. ; Line 971
  1867.     mov    WORD PTR cs:$S485__swap_kernel_xms_control,bx
  1868. ; Line 972
  1869.     mov    bx,es
  1870. ; Line 973
  1871.     mov    WORD PTR cs:$S485__swap_kernel_xms_control+2,bx
  1872. ; Line 974
  1873. ; Line 975
  1874. $EX734:
  1875.     pop    si
  1876.     pop    di
  1877.     mov    sp,bp
  1878.     pop    bp
  1879.     ret    
  1880.  
  1881. xms_get_control_function    ENDP
  1882. ; Line 979
  1883. xms_allocate_memory    PROC FAR
  1884.     push    bp
  1885.     mov    bp,sp
  1886.     mov    ax,0
  1887.     call    FAR PTR __aFchkstk
  1888.     push    di
  1889.     push    si
  1890. ;    kilobytes = 6
  1891. ; Line 980
  1892. ; Line 982
  1893.     mov    dx,WORD PTR [bp+6]    ;kilobytes
  1894. ; Line 983
  1895.     mov    ah,9
  1896. ; Line 984
  1897.     call    DWORD PTR cs:$S485__swap_kernel_xms_control
  1898. ; Line 985
  1899.     cmp    ax,1
  1900. ; Line 986
  1901.     jne    $failed737
  1902. ; Line 987
  1903.     mov    ax,dx
  1904. ; Line 988
  1905.     jmp    $done738
  1906. ; Line 989
  1907. $failed737:
  1908. ; Line 990
  1909.     mov    ax,-1
  1910. ; Line 991
  1911. $done738:
  1912. ; Line 992
  1913. ; Line 993
  1914. $EX736:
  1915.     pop    si
  1916.     pop    di
  1917.     mov    sp,bp
  1918.     pop    bp
  1919.     ret    
  1920.  
  1921. xms_allocate_memory    ENDP
  1922. ; Line 997
  1923. xms_free_memory    PROC FAR
  1924.     push    bp
  1925.     mov    bp,sp
  1926.     mov    ax,0
  1927.     call    FAR PTR __aFchkstk
  1928.     push    di
  1929.     push    si
  1930. ;    handle = 6
  1931. ; Line 998
  1932. ; Line 1000
  1933.     mov    dx,WORD PTR [bp+6]    ;handle
  1934. ; Line 1001
  1935.     mov    ah,10
  1936. ; Line 1002
  1937.     call    DWORD PTR cs:$S485__swap_kernel_xms_control
  1938. ; Line 1003
  1939.     cmp    ax,1
  1940. ; Line 1004
  1941.     je    $done741
  1942. ; Line 1005
  1943.     mov    ax,0
  1944. ; Line 1006
  1945. $done741:
  1946. ; Line 1007
  1947. ; Line 1008
  1948. $EX740:
  1949.     pop    si
  1950.     pop    di
  1951.     mov    sp,bp
  1952.     pop    bp
  1953.     ret    
  1954.  
  1955. xms_free_memory    ENDP
  1956. ; Line 1020
  1957. ems_present    PROC FAR
  1958.     push    bp
  1959.     mov    bp,sp
  1960.     mov    ax,4
  1961.     call    FAR PTR __aFchkstk
  1962.     push    di
  1963.     push    si
  1964. ;    ems_device = -4
  1965. ; Line 1028
  1966.     mov    ax,103
  1967.     push    ax
  1968.     call    FAR PTR __dos_getvect
  1969.     add    sp,2
  1970.     mov    WORD PTR [bp-4],ax    ;ems_device
  1971.     mov    WORD PTR [bp-2],dx
  1972. ; Line 1030
  1973.     mov    WORD PTR [bp-4],10    ;ems_device
  1974. ; Line 1032
  1975.     mov    ax,8
  1976.     push    ax
  1977.     push    WORD PTR [bp-2]
  1978.     push    WORD PTR [bp-4]    ;ems_device
  1979.     mov    ax,OFFSET $S743_ems_id
  1980.     mov    cx,SEG $S743_ems_id
  1981.     push    cx
  1982.     push    ax
  1983.     call    FAR PTR __fstrncmp
  1984.     add    sp,10
  1985.     cmp    ax,1
  1986.     sbb    ax,ax
  1987.     neg    ax
  1988.     jmp    $EX742
  1989. ; Line 1033
  1990. $EX742:
  1991.     pop    si
  1992.     pop    di
  1993.     mov    sp,bp
  1994.     pop    bp
  1995.     ret    
  1996.  
  1997. ems_present    ENDP
  1998. ; Line 1039
  1999. ems_alloc_pages    PROC FAR
  2000.     push    bp
  2001.     mov    bp,sp
  2002.     mov    ax,0
  2003.     call    FAR PTR __aFchkstk
  2004.     push    di
  2005.     push    si
  2006. ;    n = 6
  2007. ; Line 1040
  2008. ; Line 1042
  2009.     mov    bx,WORD PTR [bp+6]    ;n
  2010. ; Line 1043
  2011.     mov    ah,67
  2012. ; Line 1044
  2013.     int    103
  2014. ; Line 1045
  2015.     cmp    ah,0
  2016. ; Line 1046
  2017.     je    $success747
  2018. ; Line 1047
  2019.     mov    ax,-1
  2020. ; Line 1048
  2021.     ret    
  2022. ; Line 1049
  2023. $success747:
  2024. ; Line 1050
  2025.     mov    ax,dx
  2026. ; Line 1051
  2027. ; Line 1052
  2028. $EX746:
  2029.     pop    si
  2030.     pop    di
  2031.     mov    sp,bp
  2032.     pop    bp
  2033.     ret    
  2034.  
  2035. ems_alloc_pages    ENDP
  2036. ; Line 1058
  2037. ems_free_pages    PROC FAR
  2038.     push    bp
  2039.     mov    bp,sp
  2040.     mov    ax,0
  2041.     call    FAR PTR __aFchkstk
  2042.     push    di
  2043.     push    si
  2044. ;    handle = 6
  2045. ; Line 1059
  2046. ; Line 1061
  2047.     mov    dx,WORD PTR [bp+6]    ;handle
  2048. ; Line 1062
  2049.     mov    ah,69
  2050. ; Line 1063
  2051.     int    103
  2052. ; Line 1064
  2053.     mov    cl,8
  2054. ; Line 1065
  2055.     shr    ax,cl
  2056. ; Line 1066
  2057. ; Line 1067
  2058. $EX749:
  2059.     pop    si
  2060.     pop    di
  2061.     mov    sp,bp
  2062.     pop    bp
  2063.     ret    
  2064.  
  2065. ems_free_pages    ENDP
  2066. ; Line 1073
  2067. ems_get_page_frame    PROC FAR
  2068.     push    bp
  2069.     mov    bp,sp
  2070.     mov    ax,4
  2071.     call    FAR PTR __aFchkstk
  2072.     push    di
  2073.     push    si
  2074. ;    frame = -4
  2075. ; Line 1074
  2076.     sub    ax,ax
  2077.     mov    WORD PTR [bp-2],ax
  2078.     mov    WORD PTR [bp-4],ax    ;frame
  2079. ; Line 1076
  2080. ; Line 1078
  2081.     mov    ah,65
  2082. ; Line 1079
  2083.     int    103
  2084. ; Line 1080
  2085.     cmp    ah,0
  2086. ; Line 1081
  2087.     je    $success752
  2088. ; Line 1082
  2089.     ret    
  2090. ; Line 1083
  2091. $success752:
  2092. ; Line 1084
  2093.     mov    WORD PTR [bp-2],bx
  2094. ; Line 1085
  2095. ; Line 1087
  2096.     mov    ax,WORD PTR [bp-4]    ;frame
  2097.     mov    dx,WORD PTR [bp-2]
  2098.     jmp    $EX750
  2099. ; Line 1088
  2100. $EX750:
  2101.     pop    si
  2102.     pop    di
  2103.     mov    sp,bp
  2104.     pop    bp
  2105.     ret    
  2106.  
  2107. ems_get_page_frame    ENDP
  2108. ; Line 1098
  2109. last_mcb    PROC FAR
  2110.     push    bp
  2111.     mov    bp,sp
  2112.     mov    ax,8
  2113.     call    FAR PTR __aFchkstk
  2114.     push    di
  2115.     push    si
  2116. ;    mcb = -4
  2117. ;    ret = -8
  2118. ; Line 1102
  2119.     mov    ax,WORD PTR cs:$S460__swap_kernel_psp
  2120.     dec    ax
  2121.     mov    WORD PTR [bp-2],ax
  2122.     mov    WORD PTR [bp-4],0    ;mcb
  2123. ; Line 1104
  2124. $FC757:
  2125.     les    bx,DWORD PTR [bp-4]    ;mcb
  2126.     cmp    BYTE PTR es:[bx],77
  2127.     je    $JCC4132
  2128.     jmp    $FB758
  2129. $JCC4132:
  2130. ; Line 1105
  2131. ; Line 1106
  2132.     les    bx,DWORD PTR [bp-4]    ;mcb
  2133.     mov    ax,WORD PTR es:[bx+1]
  2134.     cmp    WORD PTR cs:$S460__swap_kernel_psp,ax
  2135.     je    $JCC4149
  2136.     jmp    $I759
  2137. $JCC4149:
  2138. ; Line 1107
  2139.     les    bx,DWORD PTR [bp-4]    ;mcb
  2140.     mov    ax,WORD PTR es:[bx+3]
  2141.     inc    ax
  2142.     add    WORD PTR [bp-2],ax
  2143.     mov    ax,WORD PTR [bp-4]    ;mcb
  2144.     mov    dx,WORD PTR [bp-2]
  2145.     mov    WORD PTR [bp-8],ax    ;ret
  2146.     mov    WORD PTR [bp-6],dx
  2147. ; Line 1108
  2148.     jmp    $I760
  2149. $I759:
  2150. ; Line 1109
  2151.     les    bx,DWORD PTR [bp-4]    ;mcb
  2152.     mov    ax,WORD PTR es:[bx+3]
  2153.     inc    ax
  2154.     add    WORD PTR [bp-2],ax
  2155. $I760:
  2156. ; Line 1110
  2157.     jmp    $FC757
  2158. $FB758:
  2159. ; Line 1112
  2160.     les    bx,DWORD PTR [bp-4]    ;mcb
  2161.     cmp    BYTE PTR es:[bx],90
  2162.     je    $JCC4201
  2163.     jmp    $I761
  2164. $JCC4201:
  2165. ; Line 1113
  2166.     mov    ax,WORD PTR [bp-8]    ;ret
  2167.     mov    dx,WORD PTR [bp-6]
  2168.     jmp    $EX753
  2169. ; Line 1114
  2170.     jmp    $I762
  2171. $I761:
  2172. ; Line 1115
  2173.     mov    ax,0
  2174.     mov    dx,0
  2175.     jmp    $EX753
  2176. $I762:
  2177. ; Line 1116
  2178. $EX753:
  2179.     pop    si
  2180.     pop    di
  2181.     mov    sp,bp
  2182.     pop    bp
  2183.     ret    
  2184.  
  2185. last_mcb    ENDP
  2186. ; Line 1130
  2187.     PUBLIC    __swap_spawn_child
  2188. __swap_spawn_child    PROC FAR
  2189.     push    bp
  2190.     mov    bp,sp
  2191.     mov    ax,6
  2192.     call    FAR PTR __aFchkstk
  2193.     push    di
  2194.     push    si
  2195. ;    rc = -2
  2196. ;    cleanup_function = -6
  2197. ;    file = 22
  2198. ;    len = 20
  2199. ;    env = 16
  2200. ;    cmdline = 12
  2201. ;    path = 8
  2202. ;    mode = 6
  2203. ; Line 1134
  2204.     push    WORD PTR [bp+20]    ;len
  2205.     push    WORD PTR [bp+18]
  2206.     push    WORD PTR [bp+16]    ;env
  2207.     push    WORD PTR [bp+14]
  2208.     push    WORD PTR [bp+12]    ;cmdline
  2209.     push    WORD PTR [bp+10]
  2210.     push    WORD PTR [bp+8]    ;path
  2211.     call    FAR PTR install_parameters
  2212.     add    sp,14
  2213. ; Line 1136
  2214.     mov    WORD PTR cs:$S463__swap_kernel_environment,OFFSET _swap_kernel_end
  2215.     mov    WORD PTR cs:$S463__swap_kernel_environment+2,SEG _swap_kernel_end
  2216. ; Line 1137
  2217.     mov    cl,4
  2218.     mov    ax,WORD PTR cs:$S463__swap_kernel_environment
  2219.     add    ax,15
  2220.     shr    ax,cl
  2221.     inc    ax
  2222.     add    WORD PTR cs:$S463__swap_kernel_environment+2,ax
  2223.     mov    WORD PTR cs:$S463__swap_kernel_environment,0
  2224. ; Line 1140
  2225.     push    WORD PTR cs:$S463__swap_kernel_environment+2
  2226.     push    WORD PTR cs:$S463__swap_kernel_environment
  2227.     call    FAR PTR last_mcb
  2228.     push    dx
  2229.     push    ax
  2230.     call    FAR PTR __aFahdiff
  2231.     mov    WORD PTR cs:$S458__swap_kernel_swapped_bytes,ax
  2232.     mov    WORD PTR cs:$S458__swap_kernel_swapped_bytes+2,dx
  2233. ; Line 1142
  2234.     mov    ax,WORD PTR [bp+6]    ;mode
  2235.     jmp    $S774
  2236. ; Line 1143
  2237. ; Line 1144
  2238. $SC778:
  2239. ; Line 1146
  2240.     call    FAR PTR xms_installed
  2241.     cmp    ax,0
  2242.     jne    $JCC4358
  2243.     jmp    $I779
  2244. $JCC4358:
  2245. ; Line 1147
  2246. ; Line 1148
  2247.     call    FAR PTR xms_get_control_function
  2248. ; Line 1149
  2249.     mov    WORD PTR cs:$S484__swap_kernel_swap_out,OFFSET _swap_kernel_xms_move_out
  2250.     mov    WORD PTR cs:$S484__swap_kernel_swap_out+2,SEG _swap_kernel_xms_move_out
  2251. ; Line 1150
  2252.     mov    WORD PTR cs:$S480__swap_kernel_swap_in,OFFSET _swap_kernel_xms_move_in
  2253.     mov    WORD PTR cs:$S480__swap_kernel_swap_in+2,SEG _swap_kernel_xms_move_in
  2254. ; Line 1151
  2255.     mov    WORD PTR [bp-6],OFFSET xms_free_memory    ;cleanup_function
  2256.     mov    WORD PTR [bp-4],SEG xms_free_memory
  2257. ; Line 1155
  2258.     mov    ax,WORD PTR cs:$S458__swap_kernel_swapped_bytes
  2259.     mov    dx,WORD PTR cs:$S458__swap_kernel_swapped_bytes+2
  2260.     sub    ax,1
  2261.     sbb    dx,0
  2262.     mov    al,ah
  2263.     mov    ah,dl
  2264.     mov    dl,dh
  2265.     shl    dh,1
  2266.     sbb    dh,dh
  2267.     sar    dx,1
  2268.     rcr    ax,1
  2269.     sar    dx,1
  2270.     rcr    ax,1
  2271.     inc    ax
  2272.     push    ax
  2273.     call    FAR PTR xms_allocate_memory
  2274.     add    sp,2
  2275.     mov    WORD PTR cs:$S459__swap_kernel_handle,ax
  2276. ; Line 1156
  2277.     cmp    WORD PTR cs:$S459__swap_kernel_handle,-1
  2278.     jne    $JCC4459
  2279.     jmp    $I780
  2280. $JCC4459:
  2281. ; Line 1157
  2282.     jmp    $SB775
  2283. ; Line 1158
  2284. $I780:
  2285. ; Line 1162
  2286. $I779:
  2287. $SC781:
  2288. ; Line 1164
  2289.     call    FAR PTR ems_present
  2290.     cmp    ax,0
  2291.     jne    $JCC4475
  2292.     jmp    $I782
  2293. $JCC4475:
  2294. ; Line 1165
  2295. ; Line 1166
  2296.     mov    WORD PTR cs:$S484__swap_kernel_swap_out,OFFSET _swap_kernel_ems_move_out
  2297.     mov    WORD PTR cs:$S484__swap_kernel_swap_out+2,SEG _swap_kernel_ems_move_out
  2298. ; Line 1167
  2299.     mov    WORD PTR cs:$S480__swap_kernel_swap_in,OFFSET _swap_kernel_ems_move_in
  2300.     mov    WORD PTR cs:$S480__swap_kernel_swap_in+2,SEG _swap_kernel_ems_move_in
  2301. ; Line 1168
  2302.     mov    WORD PTR [bp-6],OFFSET ems_free_pages    ;cleanup_function
  2303.     mov    WORD PTR [bp-4],SEG ems_free_pages
  2304. ; Line 1169
  2305.     call    FAR PTR ems_get_page_frame
  2306.     mov    WORD PTR cs:$S465__swap_kernel_ems_page_frame,ax
  2307.     mov    WORD PTR cs:$S465__swap_kernel_ems_page_frame+2,dx
  2308. ; Line 1172
  2309.     mov    ax,WORD PTR cs:$S458__swap_kernel_swapped_bytes
  2310.     mov    dx,WORD PTR cs:$S458__swap_kernel_swapped_bytes+2
  2311.     sub    ax,1
  2312.     sbb    dx,0
  2313.     mov    al,ah
  2314.     mov    ah,dl
  2315.     mov    dl,dh
  2316.     shl    dh,1
  2317.     sbb    dh,dh
  2318.     sar    dx,1
  2319.     rcr    ax,1
  2320.     sar    dx,1
  2321.     rcr    ax,1
  2322.     sar    dx,1
  2323.     rcr    ax,1
  2324.     sar    dx,1
  2325.     rcr    ax,1
  2326.     sar    dx,1
  2327.     rcr    ax,1
  2328.     sar    dx,1
  2329.     rcr    ax,1
  2330.     inc    ax
  2331.     push    ax
  2332.     call    FAR PTR ems_alloc_pages
  2333.     add    sp,2
  2334.     mov    WORD PTR cs:$S459__swap_kernel_handle,ax
  2335. ; Line 1173
  2336.     mov    ax,WORD PTR cs:$S465__swap_kernel_ems_page_frame+2
  2337.     or    ax,WORD PTR cs:$S465__swap_kernel_ems_page_frame
  2338.     jne    $JCC4604
  2339.     jmp    $I783
  2340. $JCC4604:
  2341.     cmp    WORD PTR cs:$S459__swap_kernel_handle,-1
  2342.     jne    $JCC4615
  2343.     jmp    $I783
  2344. $JCC4615:
  2345. ; Line 1174
  2346.     jmp    $SB775
  2347. ; Line 1175
  2348. $I783:
  2349. ; Line 1179
  2350. $I782:
  2351. $SC784:
  2352. ; Line 1180
  2353.     mov    WORD PTR cs:$S484__swap_kernel_swap_out,OFFSET _swap_kernel_write_to_handle
  2354.     mov    WORD PTR cs:$S484__swap_kernel_swap_out+2,SEG _swap_kernel_write_to_handle
  2355. ; Line 1181
  2356.     mov    WORD PTR cs:$S480__swap_kernel_swap_in,OFFSET _swap_kernel_read_from_handle
  2357.     mov    WORD PTR cs:$S480__swap_kernel_swap_in+2,SEG _swap_kernel_read_from_handle
  2358. ; Line 1182
  2359.     mov    WORD PTR [bp-6],OFFSET cleanup_swap_kernel_file    ;cleanup_function
  2360.     mov    WORD PTR [bp-4],SEG cleanup_swap_kernel_file
  2361. ; Line 1184
  2362.     push    WORD PTR cs:$S458__swap_kernel_swapped_bytes+2
  2363.     push    WORD PTR cs:$S458__swap_kernel_swapped_bytes
  2364.     push    WORD PTR [bp+24]
  2365.     push    WORD PTR [bp+22]    ;file
  2366.     call    FAR PTR alloc_swap_kernel_file
  2367.     add    sp,8
  2368.     mov    WORD PTR cs:$S459__swap_kernel_handle,ax
  2369. ; Line 1185
  2370.     cmp    WORD PTR cs:$S459__swap_kernel_handle,-1
  2371.     jne    $JCC4695
  2372.     jmp    $I785
  2373. $JCC4695:
  2374. ; Line 1186
  2375.     jmp    $SB775
  2376. ; Line 1188
  2377. $I785:
  2378.     mov    WORD PTR _errno,28
  2379. ; Line 1189
  2380.     mov    ax,-1
  2381.     jmp    $EX770
  2382. ; Line 1191
  2383. $SC786:
  2384. ; Line 1194
  2385.     mov    WORD PTR _errno,22
  2386. ; Line 1195
  2387.     mov    ax,-1
  2388.     jmp    $EX770
  2389. ; Line 1196
  2390.     jmp    $SB775
  2391. $S774:
  2392.     or    ax,ax
  2393.     jne    $JCC4732
  2394.     jmp    $SC786
  2395. $JCC4732:
  2396.     dec    ax
  2397.     jne    $JCC4738
  2398.     jmp    $SC784
  2399. $JCC4738:
  2400.     dec    ax
  2401.     jne    $JCC4744
  2402.     jmp    $SC781
  2403. $JCC4744:
  2404.     dec    ax
  2405.     jne    $JCC4750
  2406.     jmp    $SC778
  2407. $JCC4750:
  2408.     jmp    $SB775
  2409. $SB775:
  2410. ; Line 1198
  2411.     mov    WORD PTR cs:$S568__swap_kernel_user_interrupt,0
  2412. ; Line 1201
  2413.     mov    ax,35
  2414.     push    ax
  2415.     call    FAR PTR __dos_getvect
  2416.     add    sp,2
  2417.     mov    WORD PTR $S566__swap_kernel_caller_int23,ax
  2418.     mov    WORD PTR $S566__swap_kernel_caller_int23+2,dx
  2419. ; Line 1202
  2420.     mov    ax,OFFSET _swap_kernel_int23_handler
  2421.     mov    dx,SEG _swap_kernel_int23_handler
  2422.     push    dx
  2423.     push    ax
  2424.     mov    ax,35
  2425.     push    ax
  2426.     call    FAR PTR __dos_setvect
  2427.     add    sp,6
  2428. ; Line 1204
  2429.     call    FAR PTR _swap_kernel_spawn_child
  2430.     mov    WORD PTR [bp-2],ax    ;rc
  2431. ; Line 1207
  2432.     cmp    WORD PTR cs:$S568__swap_kernel_user_interrupt,0
  2433.     jne    $JCC4818
  2434.     jmp    $I787
  2435. $JCC4818:
  2436. ; Line 1208
  2437.     or    WORD PTR [bp-2],512    ;rc
  2438. ; Line 1210
  2439. $I787:
  2440.     push    WORD PTR $S566__swap_kernel_caller_int23+2
  2441.     push    WORD PTR $S566__swap_kernel_caller_int23
  2442.     mov    ax,35
  2443.     push    ax
  2444.     call    FAR PTR __dos_setvect
  2445.     add    sp,6
  2446. ; Line 1212
  2447.     push    WORD PTR [bp+24]
  2448.     push    WORD PTR [bp+22]    ;file
  2449.     push    WORD PTR cs:$S459__swap_kernel_handle
  2450.     call    DWORD PTR [bp-6]    ;cleanup_function
  2451.     add    sp,6
  2452. ; Line 1214
  2453.     mov    ax,WORD PTR [bp-2]    ;rc
  2454.     jmp    $EX770
  2455. ; Line 1215
  2456. $EX770:
  2457.     pop    si
  2458.     pop    di
  2459.     mov    sp,bp
  2460.     pop    bp
  2461.     ret    
  2462.  
  2463. __swap_spawn_child    ENDP
  2464. SWAP_TEXT    ENDS
  2465. END
  2466.