home *** CD-ROM | disk | FTP | other *** search
/ Hall of Fame / HallofFameCDROM.cdr / prog1 / 4th_86.lzh / 7SHELL3.ASM < prev    next >
Assembly Source File  |  1989-08-27  |  2KB  |  150 lines

  1. ; 1st. February 1989 -- MFB
  2.  
  3. ; ( serious bug corrected - would previously not shell out except
  4. ;   under specific memory conditions )
  5.  
  6. cseg    segment byte
  7.     assume cs:cseg,ds:cseg,es:cseg
  8.  
  9.     org    100h
  10.  
  11.     asm    =    4    ;dictionary entry flags
  12.     const    =    10h
  13.     immed    =    0
  14.     head    =    0
  15.  
  16.  
  17.     cr    =    0dh
  18.     lf    =    0ah
  19.  
  20. start:
  21.     call     star
  22. star:    pop    ax
  23.     sub    ax,103h
  24.  
  25.     push    es
  26.     push    ds
  27.     push    cx    ;4th pc
  28.             ;must change ds before we can store these
  29. ;    push    ax
  30.     mov    cl,4
  31.     shr    ax,cl    ;ax contains new DS value
  32.     mov    cx,ds
  33.     add    cx,ax
  34.     mov    ds,cx    ;ds now ok for data access
  35.  
  36. ;    pop    dx
  37. ;    and    dx,0fh    ;dx contains new OFFSET value
  38.  
  39.     pop    cx    ;original cx - do data access
  40.     mov    cxsave,cx
  41.     pop    cx    ;original ds
  42.     mov    dssave,cx
  43.     pop    cx    ;original es
  44.     mov    essave,cx
  45.     ret
  46.  
  47. fin:    mov    cx,cxsave
  48.     mov    es,essave
  49.     mov    ax,dssave
  50.     mov    ds,ax
  51.     lodsw
  52.     jmp    ax        ;now in INTRO.4TH
  53.  
  54. dos:    call    start
  55.  
  56.     mov    (stkseg),ss    ;save ss
  57.     mov    (stkptr),sp    ;and sp
  58.  
  59.     mov    ax,(cs:2ch)
  60.     mov    (parblk),ax
  61.     MOV    (ONE),DS        ;put segment
  62.     MOV    (TWO),DS        ;  addresses
  63.     MOV    (THREE),DS    ;    into cmdline and fcb
  64.  
  65. ;    mov    ax,offset envir
  66. ;    mov    cl,4
  67. ;    shr    ax,cl
  68. ;    mov    cx,ds
  69. ;    add    cx,ax
  70. ;    mov    (parblk),cx
  71.  
  72.     mov    bx,DS
  73.     mov    es,bx
  74.  
  75.     mov    dx,offset (pgname)
  76. here:    mov    bx,offset (parblk)
  77.     mov    al,0
  78.     mov    ah,4bh
  79.     int    21h
  80.     mov    ss,(stkseg)
  81.     mov    sp,(stkptr)
  82.  
  83.     jmp    fin
  84.  
  85.     dw    0        ;back fence to hold count byte etc
  86.                 ; of pglin
  87.             
  88. pgname    db    '\VED.COM',0  ;This "default" never takes effect --
  89.                           ; see words EDIT and SYS in file DOSXTRA2
  90.  
  91.     db    10 dup (?)   ;space to patch in longer default name/path
  92.  
  93. parblk    dw    1234h ; strange non-initialised values for debugging
  94.     dw    offset cmdline
  95. ONE    dw    2345h 
  96.     dw    offset    fcb1
  97. TWO    dw    3456h
  98.     dw    offset    fcb2
  99. THREE    dw    4567h
  100.  
  101. stkseg    dw    5678h
  102. stkptr    dw    6789h
  103. cxsave    dw    789ah
  104. dssave    dw    89abh
  105. essave    dw    9abch
  106.  
  107.     dw    0        ;back fence to hold count byte etc
  108.                 ; of uslin
  109. cmdline    db    6,'EDHELP',cr    ; 
  110.     db    10 dup (?)
  111.  
  112. fcb1    db    0
  113.     db    11 dup ('?')
  114.     db    25 dup (0)
  115.  
  116. fcb2    db    0
  117.     db    11 dup ('?')
  118.     db    25 dup (0)
  119.  
  120. ;    org    ((110h) + ($-start)) - (($-start) mod 10h)
  121.  
  122. ;envir    db    'PATH=',0
  123. ;    db    'COMSPEC=C:\COMMAND.COM',0
  124. ;    db    0
  125.  
  126.     db    'binload endproc '
  127.  
  128.     db     f - e
  129. e    db    'USLIN'
  130. f    db    immed
  131.     dw    cmdline
  132.  
  133.  
  134.     db    d - c
  135. c    db    'PGLIN'
  136. d    db    immed
  137.     dw    pgname
  138.  
  139.     db    b - a
  140. a    db    'DOS'
  141. b    db    immed
  142.     dw    dos
  143.  
  144.     db    'endfile '
  145.  
  146. cseg    ends
  147.     end    start
  148.  
  149.  
  150.