Ŀ
 Presents
  ڿĴ VMag, Issue 2, 1 June 1998
  

                   Terminate & Stay Resident - II.

                     TSR-ணࠬ  PSP.

        " ᭨   "  ;).     ᪨
த  TSR.Txt    LMD  #1'97.      ୠ  㦥
 ,  饭 ိ  १ ணࠬ  ( -
MCB.Txt by  Denis Vechersky  aka BeHeMoT   ⮣   ).  
ࢮ  㯮ﭠ   TSR   PSP,    뫮  ᮢᥬ  ,
  ࠧ㬥    ⨬  ࠦ.      뢠, 
ᠬ  ᮧ    MCB.    ஡    ⮬  ါ .
२⢮ ⮣ ᯮᮡ  ,   ।  
     "", 室      ;) 
, 祬  ,   ஥  ⨫  ,  ᫨   ⨬
뤥 ᥡ , ਬ,   UMB ( ⮣  筮 
⥣ । , 뤥 ,  ⮬  ⠭
⥣  -  㭪樨  5800h  -    ⥪, 5801h - ⠭
⥣ Int  21h). ᫨     ࢮ 砥,   筮 ⠪
"ન"  祭 쪨,     ᮢᥬ.     ⮪
⮣ ᯮᮡ -  ⮣    뤥 ᥡ   ⮫쪮 __ ⥬
⮬,    ஬    ᥩ  室,   襭 ணࠬ
稬  ࠣ   .  ⮣     ,    ᢮
    ,    ⮣    ᬮ  
ᯮᮡ.    ⥯ 諮 ६  ⪮  PSP,  ᫨ -
  祭  ᥡ ।⠢.

          ࠧࠡ⪥  TSR-ணࠬ  ⠭묨  ।⢠  DOS 
  ᫥  襭  ணࠬ  ⠥  PSP  (Program  Segment
Prefix)  ࠧ஬  256  ,    ந DOS  ᪥ 
ணࠬ  室 । 砫 ணࠬ.


                             ଠ PSP.

饭       ိ

00h        DW         Int 20h.
02h        DW           ࠣ.
04h        DW        .
06h        DD         맮 ᯥ 㭪権 DOS.
0Ah        DD            Int  22h,   ஬ ࠢ
                     ।  襭 ணࠬ.
0Eh        DD            Int  23h,   ஬ ࠢ
                     ।  ⨨ Ctrl-Break  Ctrl-C.
12h        DD            Int  24h,   ஬ ࠢ
                     ।  㦥 ᪮ 訡.
16h        DW             PSP  த⥫᪮   
                     ( ⥪饣 PSP  ,  ண  
                     த⥫).
18h        20    File  Handle  Table.  ন  20   ⮢
                     ᮢ    ⥬  ⠡  䠩. 
                       室  ।祭    Stdin,  Stdout,
                     Stderr, Auxio  Lstout.
2Ch        DW           ।  .
2Eh        DD          ࠭  㪠⥫  ⥪   ,
                           ᯮ   ⥪   DOS   (..
                     ᮤন  SS:SP  ।  ᫥  맮  Int
                     21h).
32h        DW        ᨬ쭮  ⢮  室    File  Handle
                     Table (default 20).
34h        DD          File  Handle  Table  (default 㪠뢠 
                     ⠡  ⥪饬 PSP).
38h        24   .
50h        3    樨  Int  21h,   RetF.  ᯮ   
                     맮 ᯥ 㭪権 DOS.
53h        DW        .
55h        7     ७ ࢮ FCB.
5Ch        16    砫      ࢮ   ⮣    FCB.
                     ⨥  ਢ    ࠧ襭  ண  FCB 
                         ப.
6Ch        16    砫      ண   ⮣    FCB.
                     ⨥ ਢ  ࠧ襭  ப.
7Ch        DD        .
80h        128    DTA (Data  Transfer Area) default.   
                           ப      
                     ப (127 ⮢).


        ᬮਬ ⥯   㬥஢  㭪樨 DOS,
 ᯮ  ஥ TSR  PSP.


                       ⠭ ⥪騩 PSP.

         㭪 㪠뢠 DOS,   ⢥ ⥪饣  ᫥
ᯮ짮 㪠 PSP.

In:     AH = 50h
        BX =    PSP.


                       稭 PSP.

          㭪  ॡ    DOS  ᮧ 稭 PSP.  
⫨稨    㭪樨  26h          ⥪饣 PSP, 
 .

In:     AH = 55h
        DX =    ஥  PSP.
        SI = 祭,  ஥   ॡ   ⠭       
             ᬥ饭 2   PSP.


           襭 १⭮  ணࠬ ।⠢
ᮡ  ᫥騥  ⢨  -   ᮧ    PSP,  㪠   DOS
ᯮ짮  PSP  ⢥ ⨢   ७  १⭮
樨  ணࠬ      ண  PSP   १ ⥪饣 
   室 ࠧ,   ᢮  , 
    ⪠  뤥      (  砩, ᫨ 
 ""   DOS).

         ਢ ਬ ⠪ ⬠:

---8<-----
                model   tiny
                .code
                jumps
                org     100h
start:
                mov     es,word ptr ds:[2ch]
                mov     ah,49h
                int     21h

                mov     dx,cs
                add     dx,(end_ptr+15) shr 4
                push    dx
                xor     si,si
                mov     ah,55h
                int     21h

                mov     es,dx
                mov     si,16h
                mov     di,si
                movsw
                
                push    cs
                pop     es

                mov     ah,49h
                int     21h

;  , ਬ, ⠭  ⥣ । 
; [ ... ]

                mov     bx,(tsr_size+15) shr 4
                mov     ah,48h
                int     21h

                dec     ax
                mov     es,ax
                inc     ax

                mov     word ptr es:[01h],ax

                mov     di,08h
                mov     si,offset mcb_part
                mov     cx,tsr_size+mcb_size
                rep     movsb

;   ⠭ 
; [ ... ]

                pop     bx
                mov     ah,50h
                int     21h

                mov     ax,4c00h
                int     21h

mcb_part:
                db      'Test_TSR'
mcb_size        =       $-mcb_part
tsr_part:
                db      100h    dup     (90h)
tsr_size        =       $-tsr_part

end_ptr         =       $-start+100h

                end     start
---8<-----

                                                               //Scout
