
              4.  TSR (   )

             
               ன PC
               । DOS
             㧪  樠 TSR
             ⨢, ⥪ DOS  ࢨ
              ࠡ⪠  ᯮ짮 Int 28h
                ணࠬ TSR
             祭

                ⠭ १ ணࠬ (TSR)  -
         ப  ᯮ㥬  ।⢮,     㭪樮஢ ⠥
           設⢠ 짮⥫.  ⥪ MS-DOS  -
           ।⢠ PC  ࠭祭   TSR  -
           ⢫.    ࠭祭 
         ⮫쪮 ⮣,   TSR 뢮  ࠭  訢 -
          ⥬ -뢮 (BIOS)  뢠 ணࠬ 㦨-
         ; 㣨 ॡ   ⠭ TSR.
                뢠 ࠡ TSR.  㤥    -
         㦨 (㬥஢  ),  ஥ ᯥ稢 DOS,
           ⢨ TSR  DOS.   㤥  ⠪    
         ᪮쪨  孨᪨  襭ﬨ  ⭮⥫쭮 TSR.  
         砫 ᪮쪮 ᫮ ।०.
               ਠ, ᯮ짮  ⮬ ᠭ  㬥-
         ஢,   祭 ॠᥬ஢ PC-DOS ᨨ 3.10. -
          㦤  ணࠬ  㯭   PC-DOS 
         3.00,   ࠭⨩,    ।⠢  ᫥ -
          DOS.   ᮡ ࠪ  ணࠬ ᯥ-
         祭 PC-DOS 3.10, ஥  ᯮ,     ७-
         ᥭ  㣨 ᪨ DOS,     ᯮ짮  饬.
                 䫨  ࠧ묨 -
          TSR ( ।⠢  ਬ). ⥯  -
         ⮢  室    ᠤ  -
         .  쥧    ਢ    
          ᪠.
              ⥫쭮    ⮩    뢠  ணࠬ஢
         ஫ CRT 6845,   p ஬  梥⭮
         ᯫ   (MDA  CGA). 訡  ணࠬ஢ ⮣
         ன⢠  ਢ  쥧 ० 襩 ⥬.

                                       

               ணࠬ ⠭ ᥬ묨.  㯭
          ᪨ ணࠬ, ᮢ⭮ ᯮ㥬 ।⢠  -
            MS-DOS.  Sidekick ( 㤠) ૠ  ,
         ⭮,    ᪨ ।.  
         PRINT  ASSIGN  ᪮쪮 㣨 ⨫ DOS ⠪  १-
         묨.
               १ ணࠬ 稭 ,    ண-
         ࠬ.  ᫥ 믮 ⠪ ணࠬ    ⠥ 
         . ,  믮  ࢮ 饭, 뢠
          樠樨,   ,  ⠥ ᫥, ⥭ 
         १ .  ᭮ 祩    樠樨  
         ⮢ १⭮   쭥襣 ᯮ짮.  -
           樠樨   ࠭祭,    ணࠬ஢

                                      - 4-2 -
         १⭮    ᫮.
               ணࠬ   㯯஢   ⥣-
         ਨ  ᭮ ⮣,    १  .   ࢮ
         㯯  ᯥ稢 ⢨ 짮⥫   १-
          .   㦥,   䮭묨, 믮
         ᢮      饭       ⥬   -뢮
         (BIOS).  DOS ASSIGN    ⠪ १⮢; 
         १⭠  ᯥ稢   ७砥 襭
              ࠩ  㣮.  ஡ 㬥஢ 
         ᫥ ਬ  ᠭ  ⮣  ⨯  १
         ணࠬ ᫮ 祩.
               ன 㯯 १ ணࠬ    ਮ-
         묨    뤠 ᯥ樠쭮  짮⥫.  筮
           ந  ⨥  㭪樮쭮    
         樥   㭪樮쭮         㣨   (ਬ,
         Alt-Shift), 祬 㭪樮쭠   ᫥. 
         㣮  ஭,   १    ᮢ  
         ⥬ -뢮;   㦨  DOS, -
         ,  ⥭  , ⮫쪮  ६ 樠樨.
               १⭠ ⥫䮭      
         㯯.    樠樨  뢠     -
         .   ⢥  ⨥ 㭪樮쭮  १  
           ࠭  ⥪騩 ࠭,      ,
          樨஢    ⥫䮭    ⮡ࠧ  -
          ᪠.    , १  ⠭-
          砫 ࠭  몫.
              㦨, 室   ⠪ TSR,  筮 
         㬥஢,    ᪮쪮 孨᪨  襭  ⭮-
         ⥫쭮  ।  ᯮ㥬    裡  묨
         ।⢠ ⮡ࠦ.
              ᫥ 㯯 १ ணࠬ ⢫ ᨭ஭-
             ⥬ -뢮.   ணࠬ -
           ⨥  㭪樮쭮      - 㣨
         ணࠬ 뢠   ।, (ਬ,  ⠩-
         ஬).  १   易⥫쭮    짮-
         ⥫.   ⮩ ⥣ਨ ⭮  ⨫ DOS PRINT.   १-
          ணࠬ 㤭  ᠭ, ⮬  DOS  ᭮
          짮⥫᪮/ணࠬ  ⥬.  -
            ।⢮ ⫠  ⠪ ணࠬ,     -
         ஢   ࠢ쭮 ᯮ짮 ॡ ⠭
         ᮣ襭 DOS .
              । ⥬,     १ ணࠬ,  -
          㦭  ⥫쭠 ଠ. ਬ,  -
         প "" 㭪樮 ,   , ࠡ-
         ⠥   ᯫ. ,ਬ, ⥪ ணࠬ
         ᯥ祭 DOS   ॠ  ࠭祭    ,
            १ ணࠬ;     ࠡ-
           ᨨ DOS ,     TSR.    
           ࠡ   堭 樮 ⥬,  
           ⮢ ,  TSR ॡ  ᢮ 樠-
         樨  ॠ⨢樨. , ,  㧭,  TSR, 
         믮  䮭 ࠧ.

                                ன PC

              , ⠩   㣨 ன⢠  -
             뢠. ⥬ PC/XT ন-

                                      - 4-3 -
          ᥬ ࠧ ணࠬ 뢠, ⥬ AT - .
            뢠 ⭮  ࠩࠬ ன,  TSR
           ⢮  .  ணࠬ 뢠
         TSR   ⮫쪮  뢠ﬨ  ⠩  -
         .
               饭     १  ணࠬ  ⢫
         짮⥫  ࠡ   "稬"  砬.    ⨥
             맢  TSR   믮 - 
         㭪樨.  ᫨ ணࠬ ᠭ ࠬ⭮,  ࠧ 砥,
         믮  ᢮  ࠡ  室  䮭 ࠧ  ०
          ࠧ襭 㣨 ணࠬ.  ⢫ ᮢ १ -
         稥    ॡ 让 ࠡ  襣 ,  
         㭪樮 ᯫ  .
               १ ணࠬ  믮 ᢮ 
         १ 筮  ਮ.  ᮭ  
         ⠩,  뢠 18,2 ࠧ  ᥪ㭤  ᯥ-
         稢 堭  ஢ ਮ᪨  ⢨. ⨫
         DOS  PRINT ᯮ ⠩  ঠ 横 ਭ -
         ᨬ  ந室饣  ⥬.
              稥   ⠩ 뢠 ࠡ 業ࠫ쭮 -
         ,    室   .    㦨
         뢠    頥    ࢠ  .  ᮭ
           ᯥ樠   ।⢠    ࠡ⪨
         뢠.   ,   ⠩   ; ᫨
           ᯮ짮   ⠩,   室 ,
             ।⢠   ணࠬ ᯥ祭 ࠡ뢠
         ⥬ 뢠.

                                뢠

               ஢  ।,  ন  MS-DOS,  
         ⥬ 뢠   ।,    -
         樨஢    ன⢮.  ன⢮, 饥
         㦨 ஬,  뫠 ஫ 뢠 8259A,
           ࠡ 뢠,   뢠, 
         IRQ.   ன⢮    ਮ.  ன⢮ 
         訬 ਮ⮬  砥        ࠭
            ன.  (஫ 뢠 8259A  
         ணࠬ஢  -㣮,   㣨 ᯮᮡ ࠡ⪨ 
         룮   ᯮ짮).   ஫ 뢠 蠥,
          뢠   ࠡ⠭,   뫠   ன⢮
         ᮮ饭  "⢥ত ਥ 뢠",    -
         ⠫ 뢠   뢠.
               ⢥  ⭮ ⭮ 뢠,   
          ࠡ⪨ 뢠  ⠡ ஢  뢠  (IVT).
          ⠡  256  ᫮ (1024 ) . 
          ப ᮤন  ணࠬ ࠡ⪨ 뢠 (ISR).
            ⥪騥 䫠  ணࠬ 稪 (CS:IP)
          稭 㦨 뢠.
              ISR     室  㦨 뢠.  
           ISR 뫠 ᮮ饭    뢠 (EOI)
         ஫ 8259, 饥,   ⮢ ਭ    -
         㦨 ᫥饣 뢠. ஫ 뢠   㤥
         ਭ 뢠  ⮣  㣨 ன   
         ਮ⮬,    ⮣ ᮮ饭. ᫥ ⮣,  ISR
         ᤥ ᢮ ࠡ,   믮  IRET,  -
          䫠  ࢮ砫 CS:IP.

                                      - 4-4 -

                               ணࠬ 뢠

               ஢ 8086 堭 ணࠬ 뢠 ᯥ-
         稢  INT (ࠡ⪠ 뢠).   -
         ࠡ뢠 ணࠬ   뢠.  ᯮ -
          INT । ࠢ ISR, ᯥ஢ ࠭ -
         .  ਬ,   int 60h 뢠 ணࠬ ࠡ⪨
         뢠,  ன ᠭ  IVT  ᬥ饭 180h (460h).
         ஫ 뢠  砥  ISR  뫠 EOI ஫-
           뢠.  DOS  ப  ᯮ ணࠬ 뢠.
         ᪮  饭  ISR ⢫ १  IVT,  
         ணࠬ ࠡ⪨ 뢠 ᫮.   㤥  
           䨪樨 IVT  ᠭ १ ணࠬ.

                               뢠  ⠩

              PC ᯮ    ⥣ࠫ쭮  奬  8253  -
         /⠩   뢠 18,2 ࠧ  ᥪ㭤. ஫
         8259A  ⢥     뢠  int  8h.  
         뢠    ⠩   訩 ਮ  㤥 
          㣨 뢠   ,      ஢
          뢠  CLI (⪠ 뢠).
                뢠 筮 㦨 ணࠬ ROM-BIOS. ᫥
          ६ ⮪  믮   㣨 㦥
         ,  ணࠬ ROM-BIOS 믮  int 1Ch.  ணࠬ,
           믮 ਮ᪨,    ⠭  ᢮
         ᮡ⢥ ணࠬ ࠡ⪨ 뢠 int 1h.  㬮-
          ணࠬ ࠡ⪨ 뢠 int 1h  ROM-BIOS  ᮤন
          IRET.

                                    

              ⠭⭠  PC ᮤন ᢮ ᮡ⢥  ய-
          (Intel 8048   ).  ⨥  ᢮-
           뫠 ᨣ IRQ1 ஫  뢠, 
         뢠 ணࠬ 㦨 뢠 int 9  ࠡ⪨
         ⮣ .  ਮ 뢠    ன  ᫥
         뢠  ⠩.
              ROM (ﭭ 饥 ன⢮)   ⥬ 
          㬮砭 ᮤন ISR int 9.   筮 ᫮ ணࠬ-
         .   ⠥   뢠 , ᫥ 稥
         ᯥ樠  (Control,Shift,Alt  .)  ८ࠧ ᪠-
         㥬     ७.   ⨥  ࠡ뢠
          ᪠㥬  -  ⮩   饭  .  롮
         ᪠㥬      ଠ樨  ﭨ .
         ਬ,  ⨥  A ந ᪠㥬  61h  (
         ASCII 筮 㪢 ). ᫨  ⨨  A  ࠢ-
          , ᪠㥬  ࠭ନ  01h ( ASCII
          Control-A).  ᫨  ⨨  A   Shift,
         ᪠㥬  砥 41h (ASCII   㪢 A).
@@@            १   ⠪   Shift  Alt ISR int 9
           ﭨ   ᥣ  BIOS 
         頥  IRET.   BIOS 稭  ࠣ 40h
          ᮤন ⢮ ᪨ ६,  ᯮ㥬  ࠧ-
         묨 ணࠬ ROM-BIOS. ⨭ 4-1 뢠  ⮩
          .

                                      - 4-5 -

                         ⨭ 4-1.   BIOS
         ----------------------------------------------------------------

         KB_M_RShift     EQU   01h   ; ⠭ ࠢ  ᤢ
         KB_M_LShift     EQU   02h   ; ⠭   ᤢ
         KB_M_Control    EQU   04h   ; ⠭ ࠢ饩 
         KB_M_Alt        EQU   08h   ; ⠭  "Alt"
         KB_M_Scroll     EQU   10h   ; ⨥  "Scroll Lock"
         KB_M_Num        EQU   20h   ; ⨥  "Num Lock"
         KB_M_Caps       EQU   40h   ; ⨥  "Caps Lock"
         KB_M_InsState   EQU   80h   ; ० ⠢

         KB_C_BufSize    EQU   10h   ; ࠧ  

@@@      BIOS            SEGMENT     at 40h
                         ORG   17h   ;  ⢥  .  BIOS
         KB_B_Flag       DB    0     ; 䫠 ﭨ 
                         ORG   1ah   ;  ⢥  18h  19h
         KB_W_BufHead    DW    0     ; 砫  
         KB_W_BufTail    DW    0     ; ⠢   
         KB_T_Buffer     DW    KB_C_BufSize DUP(0)
         BIOS            ENDS
         ----------------------------------------------------------------

              । 樨     ᯥ樠 祭.
         ணࠬ ࠡ⪨ 뢠   믮 
         int 1Bh,    ᪠㥬 , ᮮ⢥騩 
         뢠.   㬮砭 ISR int 1Bh ᮤন  IRET,    筮
         ࠩ ᮫ ⠭ ᢮ ᮡ⢥ ISR 1Bh,   
           ࠡ뢠  뢠  ᯥ樠 ࠧ.
         (  㦤    ࠡ⪥ 뢠).
               筮   譠  Cntrl-Alt-Del  뤠  int  19h.
         쭥襥  㦤  int 19h  樨  Cntrl-Alt-Del
         易⥫쭮.
              ᫨      ᯥ樠쭮 祭,  ISR int 9
         ࠭    .    稭  ᬥ-
         饭  1h  ᥣ  BIOS  ।⠢ ᮡ -
            16 ᫮. 饭 1Ah  1h  ⮬ ᥣ 㪠-
         , ᮮ⢥⢥,  砫   . ᫨  ,
         ISR int 9 뤠 㪮 ᨣ  ⢥࣠ ᨬ;   ⨢
         砥 ᨬ ⠢   .
                  2 ;  ଠ  
         ⮣,  ISR int 9  ⨥ .
                । 権  (ਬ, Alt 
         㪢  )  ᯥ樠   (ਬ,  㭪樮
         )  ந  ᨬ  ७ ASCII;  ⠫
          ந  ASCII. 㫥   ண-
         ࠬ  ࠡ⪨ 뢠 int 9 ᮤন ᫮ 䨪
          ७ ᨬ ASCII,    ᨬ ASCII  ᪠-
         㥬    㣨.  ணࠬ  ᯥ祭  㯭
          ।⢠  १ ROM-BIOS. Int 16h 
         㤠 ᨬ   ,     ᨬ 
         ,     . ᪨,   
          ⢫ १ int 16h.    ࠩ  ᮫
         ᯮ      ᨬ      
         int 16h.
                               ⮡ࠦ

               讥  ⢮  ࠧ  ᯫ,  㯭
         ࠬ ᥬ⢠ PC.  梥 ᯫ  (MDA) 
         梥⭮ ᪨  (CGA)  饨.  -
           㣨    ।⢠       
         , ।⠢ ⥫  ( 梥⮢, -
          ࠧ ᯮᮡ  . .).  ᠭ ࠭稢
         MDA  CGA.
               ।⢠ ⮡ࠦ PC    -
           .  ࠭  樨஢    ࠢ
         ⠢  . 孮 ࠭  ஬,
          ᢥ,    㤠 箪 ஭. -
          奬 ࠢ ᥪ 窮 ஭ ࠭  -
           . 㣨  奬   몫 .
                稭  孥  㣫 ࠭. 箪
         ।  ਧ⠫쭮 १ ࠭ ᫥ ࠢ.   
         ⨣ ࠢ ஭ ࠭, ࠢ ஭ 몫-
            頥    㣮     . -
         ,   箪 몫祭,  ⭮,  ਧ⠫ ࢠ
         襭.  த   ,  箪  
          ப ࠭.  箪 ஭ ⨣  -
         ,  奬  ࠢ 몫砥   頥  孨 
         㣮 ࠭  ७ ᥣ . ६, 室 
         ⮣,  뢠 ⨪ ࢠ 饭.  ਧ-
         ⠫ ࢠ 襭  ⨪ ࢠ 饭 -
           প CGA.
               ਧ⠫쭮   窠 ஭ ࠢ -
          ࠭,  ࠭塞  , ᮤন 室 ᨣ
          祭  몫祭 窠 ஭  ࠢ .  -
           ⮩    ᨬ  ⨯  -
         .   ࠭ MDA 稭  B000h  0000h,   CGA 
         B800h  0000h.  CPU,  ஫ CRT    ⮩ -
         .
               ⥫ ஭     ⮢⥫
         ࠡ ᠬ, ,  ,        -
          ࠭,  ᫨誮 ᯮ  ⮬,     ஫
         CRT 6845. ஫ CRT 6845  ⥣ࠫ쭮 奬 饣
         祭,   ন ᪮쪮 ࠧ  ஢.
             ॣ,   ᮤন ଠ  横
         ⠭; 㣨 ॣ ࠢ ᪮ ᪠஢,
         樥  ,  ᯮᮡ  ࠢ  ஬  ⮡ࠦ
         ࠭.
         
                                  :
                 祭 ⥫   ணࠬ஢ 6845.
         । ॣ ᮤঠ ᪨ 祭, , -
            ⠭  ࠧ,   ࠧ  -
         .      ᠭ  ᬮ    "IBM Hardware Technical
         Reference Manual".
         

                                     DA  CGA

                MDA  CGA      ࠧ.

                                      - 4-7 -
         MDA 㭪樮 筮 ⮩稢,  ⠪   ⮡ࠦ-
          㯭 CPU   ६,   ᪠㥬 ப -
         ⨢. ⪠  㯠    ᪮  CGA ,  ᫨  
         ந室  ६ ⨪쭮  ,  ந  "᭥".
               IBM (CPU 8088 c ⠪⮢ ⮩
         4.77 )  । ⮫쪮 1   ६ ਮ  -
         ਧ⠫쭮 饭  ਡ⥫쭮 100   ६ -
         ⨪쭮 饭.  CGA,  MDA ।ᬠਢ ⨪
          饭,   ⮫쪮 CGA  ਧ⠫쭮 -
         .
              ஬ ⮣,   CGA  MDA  㭪樮 ࠧ-
         .  MDA   ⮡ࠦ ⮫쪮 ⥪;  CGA  ⮡ࠦ
         ⥪   ࠦ.    ⥪⮢ ०  ⮡ࠦ 
         ᨬ   ᯮ 2     ࠭.  訩
          ᮤন ⮡ࠦ ᨬ  訩  뢠 ᨬ
         -ਡ (ન,  騩,  梥⭮,  ભ    .  .).
         ࠭ ᪨   ᪮쪮  ᫮.  ஡
         .  "IBM Hardware Technical Reference Manual".

                            ᥭ   ᯫ

               ᯫ ⮡ࠦ  ᭮ ࠭⢮ PC. -
         ⨭ 4-2 뢠,  ᫮    MDA.

                      ⨭ 4-2. ﬠ    MDA
         -----------------------------------------------------------------
         ;  ਢ⢨  ࠭  砫 ࠦ (0,0).
         ;ઠ, ᫥    㪢  ਡ⮬ ⮡-
         ;ࠦ. 祭 7 뢠 ଠ ० (㪢 
         ;⥬ 䮭,  筮 ⥭ᨢ)

         Hello        DB    'H',7,'e',7,'l',7,'l',7,'o',7
         HelloLength  EQU   $-Hello

                      mov   ax,0b000h
                      mov   es,ax          ; es <==  MDA
                      xor di,di            ; di <== ᬥ饭  ࠭
                      mov si,OFFSET Hello  ; si <== ப  
                      mov cx,HelloLength/2 ; cx <== ᫮  
                      rep   movsw          ; 
         -----------------------------------------------------------------

                CGA   ᮡ.  ਢ ண-
         ࠬ 㤥 믮  CGA (᫨   ࠭ 
          0B00h),   㤥 稭  "᭥"  ࠭. 
              ,     㯭 CPU
             ᯫ  (஫  6845  CRT    Motorola).
         "C"   १⮬  饭    -  -
           ஫      ६-
         .    ᯫ  ६ 横 饭 㭨⮦-
            䥪.
              MDA   CGA ࠡ 筮 , ⮡ ࠭-
             ᯮ짮 ⮫쪮 ࢠ 饭 뫨  -
         ⢥묨.   CGA IBM     "᭥", 몫
         ࠦ  ६  ࠭ ( 㦥, 祬 "c"),
         ᯮ  ᨭ஭  ᨣ 饭. ⨭ 4-3 -
         ,  "᭥" ⥬ ᨭ஭樨  ਧ⠫-

                                      - 4-8 -
          ᨣ 饭  ᯮ짮 襣 饣 
         ॣ ﭨ 6845   03DAh.

                      ⨭ 4-3. ﬠ    CGA
         -----------------------------------------------------------------
         ;  ਢ⢨  ࠭  砫 ࠦ (0,0).
         ;ઠ, ᫥    㪢  ਡ⮬ ⮡-
         ;ࠦ. 祭 7 뢠 ଠ ० ( 㪢
         ; ⥬  䮭,   筮 ⥭ᨢ).  ।
         ;⥪⮢ ०  CGA.

         Hello        DB    'H',7,'e',7,'l',7,'l',7,'o',7
         HelloLength  EQU   $-Hello

         HRetrace     EQU   1

                      mov   dx,3dah         ; dx <== ॣ ﭨ CGA
                      mov   ax,0b800h
                      mov   es,ax           ; es <==   CGA
                      xor   di,di           ; di <== ᬥ饭  ࠭
                      mov   si,OFFSET Hello ; si <== ப  
                      mov   cx,HelloLength/2; cx <== ᫮  
         _nextbyte:
         _sync:       in    al,dx           ; al <== ﭨ 6845
                      test  al,HRetrace     ; ਧ⠫쭮 饭?
                      jz    _sync           ; ᫨ z -  
                      stosb                 ;  1   HRetrace
                      loop _nextbyte        ;  ᫥饣 HRetrace
         -----------------------------------------------------------------

                 祢,    ⪮ ப   ணࠬ
          ᫨誮 䥪⨢.  ६饭   ⥪ 
         짮 ⥫쭮 訬 ࢠ ⨪쭮 -
         饭.

                             -প ROM-BIOS

              ROM-BIOS  ᯥ稢 প -०  -
         ।⢮ 뢠 10h.  ⢠ ਫ   ணࠬ
         ᯥ稢     ந⥫쭮.      প
          祩 ॡ ᮮ⢥ ⠭  ࠭  -
         ४⥫,  ᯥ稢饩  ⨭ ROM,  ᮡ 
          8088 .  ஡  稥 ७-
               稥  ० ᯮ짮 CGA.  ROM-BIOS
         ন  CGA  ⥪⮢  ᪮ ०   -
         稢 ४祭 ०.    ,  
         䥪⮬ ४祭 ०  饭  ᯫ.

                                 뢠

                ப IVT (⠡  ஢  뢠)
         ⥭   뢠.  ணࠬ ᪠-
           뢠  ⨨  祩. ,  믮-
          ਮ᪨,    뢠  ⠩.  筮 
         ࠢ ࠡ⪮  DOS  ﭨ  ।
           ࠧ饭 ᠬ ।⥫쭮 㦥  TSR -
          IV.     DOS (㭪権 int 21h)  뢠

                                      - 4-9 -
          ⠩  ।᪠㥬 १.
                뢠  樠樨 TSR 뢠 -
          IVT,   ᮤন     ⠢ -
            ⠡ IVT.   祭 ᫥饣 뢠 -
         ࠢ  㤥 ।  ணࠬ ࠡ⪨ 뢠
         (ISR).    ISR 㤥 筮 뢠  ᭠砫 ਣ
         ISR.   ISR 믮,   IRET । ࠢ-
          襬 ,   । ࠢ ணࠬ -
          ᮡ⢥  IRET ,   । ࠢ ண-
         ࠬ,  ࢮ砫쭮 맢 뢠.
              DOS ᯥ稢     墠  뢠.
          宦 ᮤন ᯥ஢ ப IVT  頥
             뢠  ॣ AL,  祭 35h  ॣ AH 
         믮  21h.  BIOS ᯥ稢 饭 ᮤন
         ப IVT   ॣ஢ ES:BX.
              ᫥  ⮣  祭,    ஢  ப
         IVT.   DS:DX 㦠   ISR,  ॣ AL 
           뢠,  ॣ AH 頥 25h,  믮-
             21h.  ⨭ 4-4  ᯮ짮 ⮣
         ᯮᮡ  뢠  ⠩.

                ⨭ 4-4.  뢠  ⠩ Int 1ch
         ----------------------------------------------------------------

         OldInt1cDD   0

                 mov  ax,351ch              ; 祭 int 1c
                 int  21h
                 mov  WORD PTR OldInt1c,bx  ; ࠭ 
                 mov  WORD PTR OldInt1c+2,es; ࠭ ds
                 push ds
                 mov  ax,cs
                 mov  ds,ax
                 mov  ds,OFFSET NewInt1c     ; ds:dx <==  isr
                 mov  ax,251ch               ; ⠭  isr
                 int  21h
                 pop  ds                     ; ⠭ ds
         ;       ...                         ; ,  㣮
         NewInt1c PROC FAR
                  pushf                      ; ஢ 䫠 ⥪
                  call cs:OldInt1c           ; 뢠
         ;        ...                        ; ,  㣮
                  iret
         NewInt1c ENDP
         ----------------------------------------------------------------

              樠 ⢨, 祭   ISR,   -
         ,    ப IVT      ।ਭ  -
          ⮩ .  ⨬,    ISR "楯"  -
         ன.  孨 饯ਭ.  ᫥⥫쭮 pushf/call -
           INT.  ⨬,   call   ᥣ
         (쭨) 맮,  ⮬,  OldInt1c   ᫮.

                               祣 

              祭 祣   TSR   ᮡ
         ॡ  ᠭ  ணࠬ.  稩  樨 TSR

                                      - 4-10 -
          ।  ᨣ    ணࠬ । .
          筮 室  ⨥  ।  뢠 
         ணࠬ  ।  .   ᬮ  
             墠 뢠 16h    -
          訢  , ᯮ 뢠  ⠩
         (int 1ch),  ,  ,    ࠢ ᮤন 
            墠 뢠 9.  쭮   
            稥 , 騥  ﭨ
         ,   騥 ᨬ   . 
           室  । २⢠   ஡.  
           ,   孨   襣 ਫ-
         .

                                   Int 16h

              ⥩訬 ⥬ ᮧ 祣      
         뢠 int 16h.  設⢮  ࠡ ਫ -
           뢠    .  ⠭  ᮡ-
         ⢥ 뢠 int 16h ISR   ஢ 
         ᨬ  ⪫  稥 . ⨭ 4-5 
         ⨯   int 16h ISR.


               ⨭ 4-5.  뢠 int 16h  ᬮ
                                ᯮ㥬 
         ----------------------------------------------------------------

        OldInt16        DD    0    ; ࠭  樠樨
                                   ;  ࢮ砫쭮 isr
        Hotkey          DW   (?)   ; । ⮩ 

        NewInt16        PROC  FAR
                        cmp   ah,1 ; ஢ઠ 㭪樨
                        jg    DoShift ; ᫨ g -- ᤢ
                        jl    DoRead ; ah=0 ==> ⥭
        DoStatus:                  ; ah=1 ==> ஢ઠ ﭨ
                        pushf      ; ஢  int 16
                        call  cs:OldInt16 ; ।  BIOS
                        pushf      ; ࠭ 䫠
                        cmp   ax,HotKey ;   ?
                        jnz   Done1; 
                        xor   ax,ax; ah <== 0 ( ⥭)
                        call  cs:OldInt16 ; 㤠 ⮩ 
                        call  ActivateTSR ;    뢠 TSR
                        mov   ah=1 ; ah <== 1 ( ﭨ)
                        jmp   SHORT DoStatus ; ७ 
        DoRead:
                        pushf       ; ஢ int 16h
                        call  cs:OldInt16
                        cmp   ax,HotKey ;   ?
                        jnz   Done0 ; ᫨ nz - 
                        call  ActivateTSR ;   뢠 TSR
                        xor   ah,ah ; ah <== 0 ( ⥭)
                        jmp   SHORT DoRead ; ७ 
        DoShift:                    ; । 
                        jmp   cs:OldInt16;  ISR. 
        Done0:                      ; ax   ᯮ㥬 䫠

                                      - 4-11 -
                        iret        ;   맮
        Done1:                      ; ax  ᨬ
                        popf        ; ⠭ 䫠 int 16h
                        ret    2    ; 뢠 䫠, ᬮ஢
                                    ;  int  

        NewInt16        ENDP
         ----------------------------------------------------------------

                int  16h ISR ஢ १  뢠
         (AH=0)      ﭨ  (AH=1),    ⢫
         ஢ ﭨ shift ᮢ (AH=2). ᫨  ROM-BIOS  -
         頥 稩 ,   ISR 㤠       
         ,  樨 TSR,   . ᫨ ⮫쪮 -
          ᨬ   뢠 稬 箬 ,  ISR 
           .   ਬ ᤥ  饬 ।-
         ,   ॠ⨢  १⭮  ணࠬ  㤥  ᭮.
         (஡  㦤  ⮩  ⥬ ᬮ  ࠧ "⨢,
         ⥪ DOS  ࢨ". ⥫쭮,   ⨭ 4-5 -
          ⮫쪮 ,   ᮢᥬ ४).
              ࠭祭  ⮣ ⮤ 砥  ⮬,   稩
            ⮫쪮   ࠧ,    ணࠬ  ।
            뢠.  ᫨   ணࠬ ந 让
         ꥬ ᫥,   ६    ⢥⮬ TSR
         প   .

                 뢠  ⠩ Int 1Ch

                ᯥ ﭭ ஫  
         뢠  ⠩  ஢મ     -
         襩 ணࠬ ࠡ⪨ 뢠  ⠩. ⨭ 4-6 ஢-
          ᯮ㥬    뢠   ⠩. ᫨
               ᮮ⢥ ᯮ㥬
         ,  TSR 㤠    ⨢ TSR.  -
         ⨢ 砥  ISR 頥  ࢮ砫쭮 ணࠬ -
         ࠡ⪨ 뢠  ⠩.

                  ⨭ 4-6.  ᯮ짮 뢠 Int 1ch
                                 
         ----------------------------------------------------------------

         HotKey          DW           (?) ; । ⮩ 
                                          ; ⨬,  ascii
                                          ;    ७
         OldInt1c        DD    0          ;  ண  ISR

         NewInt1c        PROC  FAR        ;  ⠩ isr
                         puch  ax         ; 室  int 16h
                         xor   al,al      ; xor ॥ 頥 al,祬
                         inc   al         ; mov al,1
                         int   16h        ; ஢ઠ  
                         jz    NoHotKey   ; ᫨ z -  ⮩
                         cmp   ax,HotKey  ;  ⮩ --  ?
                         jnz   NoHotKey   ; ᫨ nz --   
                         xor   al,al      ; al <==  ⥭
                         int   16h        ; 㤠 ⮩ 
                         call  ActivateTSR; 饭  TSR

                                      - 4-12 -
         NoHotKey        pop   ax         ; ⠭ ax
                         jmp   cs:OldInt1ch; । ⬥⪨ ६
         NewInt1c        ENDP
         ----------------------------------------------------------------

               ᯮ짮 ⮣ ⮤ 㯥 ⮫쪮  ᨬ
          .  ᯮ  ⢨  筮  ᨬ
            ⮩ ணࠬ   稩 .  ।,
          짮⥫  ࠭   ﭨ । -
           ணࠬ   ,  稩  㤥 ᯥ稢 
         ॠ   㣮 ⮬  饭.    ⠪    ⢨
         짮⥫ ।᪠㥬,   ⮤    -
         ⥬  ᯮ 祣 .   ࠧ ⨬,   
         ਬ  ᯥ稢 ⥫쭮  ᭮ 襭 TSR.

                                 誠  Int 9

              㣨 饭    ࠢ ன  Int 9.
          ⨨  ᢮   ।⢠  -
          뢠 Int 9.  ISR Int 9 뢠 ISR ROM -
           ᯮ Int 16h  ᬮ ࢮ ᨬ  -
         . ⪮  ⮣ 饭   ,   ⮩
           뢠 稩 .  ᫨     ᯥ-
         ,    TSR  㤥 ᫥⢨ 㦥  , 
          ᯮ짮  ⮤, ᪠  楫  
         ⨨ .
              TSR,     ,  ᯮ  -
         쭮 ப.   ISR int 9  int 16h.   int 9 -
         뢠  ISR int 9  㦨 뢠  
           ⥬ 뢠  ISR int 16h  ᬮ  -
         .   ISR int 9   ᨬ  ᢮ ᮡ⢥
         .  饭  ISR  int 16h 㤠 ᨬ  ⮣ 
         .
              TSR,   ८।  ਢ뢠  蠬 -
         ம।,  ⠪ ᯮ  ⮤. ᫨  TSR -
          । ᮡ  TSR,  뫠  ,
          TSR ᥣ 㤥 室  .   訩 ᯮᮡ
         ᠭ  TSR,  ४⭮  ࠡ ண   浪
         㧪.

                         ࠢ ﭨ 

              ୠ⨢  ஢ન    -
           ⮬ ﭨ .   ⮤ ᪫砥 -
         室  ⮭宦 ROM-BIOS    ,  
         ॡ, ⮡ 짮⥫ ࠫ  ,  
          ⨨  ﭨ  (. . Alt-Shift, -
         ).   ⮤ 㤥 ࠡ   ,   㦥-
          ᫥  TSR    ﭨ .    
         ﭨ     ࠡ ᪠㥬 , 
         ᯮᮡ 㤥 ࠡ,  TSR  㤥 .
              ⨭ 4-7 ।⠢   ISR ROM-BIOS .
          ,    ணࠬ,  אַ  ᥩ
          ᫥ 묨, ⮬   ᯮ -
         祣    ࢨ ணࠬ ࠡ⪨ -
         뢠.   㢨,    ᯥ ᭮
         뢠   DOS'.    ⥭ ᠭ

                                      - 4-13 -
         TSR  ⨥  ࠭祭.
               ⮬ ਬ  ISR 믮  ࠧ,  -
         稩    饭. 砫  뢠  ISR -
           뢠  ࠡ⪨  ᪠㥬    .
          TSR ஢ ६ PgmState,  ন TSR, 
         ।,   TSR ணࠬ । . ᫨ TSR
         믮      ।   ISR ᯮ 稩 ,
          ⠥ 맢 TSR  । . ᫨ TSR   -
          ࠡ⠥  । ,  뢠 쭥襩 ࠡ-
           ॡ.
              ᫨  ﭨ ,ᮮ⢥騥 祬 -
         ,  ⠭,  ISR  䫠  (Popup Pending)  
         ஢  ᭮ 맮 TSR  । .
              堭 ⮣  뢠 ࠧ "⨢, -
         ⥪ DOS  ࢨ". ᫨ ᭮ ᯥ祭,  ⮡ -
         ⨢஢ TSR,  ISR   뢠  BKGResume.  DOSSafe  
         BusyFlag, ।०騩   TSR; । 饭
          ࢠ ணࠬ ISR   ६ ⠭.


                     ⨭ 4-7. ਬ  ISR 
         ----------------------------------------------------------------

       FGCombo         EQU   KB_M_Alt OR KB_M_LShift

       BKG_C_FG        EQU   1
       BKG_C_BG        EQU   2

       BIOS      SEGMENT     at 40h
                 ORG   17h
       KB_B_Flag       DB    0
       BIOS      ENDS

       _text     SEGMENT     BYTE PUBLIC  'code'-
       PgmState        DB    0
       BusyFlag        DB    -1        ;  뢠
                                       ; ॥ࠡ쭠  ணࠬ
       OldInt9         DD    0         ; ࠭ ࢮ砫쭮 ISR int9
       PopupPending    DB    0         ; 饭, ᫨  
                                       ;   㦥

                       ASSUME ds:NOTHING
       Int9ISR         PROC  FAR
       NewInt9:
                       pushf            ;;; ஢ 뢠
                       call  cs:OldInt9 ;;; 맮 ࢮ砫쭮 ISR
                       cmp   cs:PgmState,BKG_C_BG ;;; 䮭 ணࠬ?
                       jz    i9_0       ;;; ᫨ z - 
                       iret             ;;;  롨  ⥪, ᫨ 
                       pushr <ax,dx>    ;;;   B_Flag
                       mov   ax,SEG BIOS
                       mov   ds,ax
                       ASSUME ds:BIOS
                       mov   al,KB_B_Flag;;; al <== ⥪騥 䫠 KB
                       and   al,FGCombo  ;;; ᪠  㦭 ⮢
                       cmp   al,FGCombo  ;;; 襭 롮ઠ  ⥪?
                       popr  <ds,ax>

                                      - 4-14 -
                       ASSUME ds:NOTHING
                       jnz Int9Exit1   ;;; ᫨ NZ -  
                                       ;;; 롮ન  ⥪
                       inc cs:PopupPending ;;; 롮ઠ  ⥪ 襭
                       call  DOSSafeCheck ;;;   ?
                       jc    Int9Exit0   ;;; ᫨  - 
                       call BKGResume    ; 맮 ਮ⭮ ணࠬ
       Int9Exit0:
                       dec   cs:BusyFlag ;  ணࠬ
       Int9Exit1:
                       iret              ; ⬥ 뢠
       Int9ISR         ENDP
       _text           ENDS
         ----------------------------------------------------------------

                        ୠ⨢  墠 Int 1h

               ,  ISR Int 1h   ISR Int 8, ⠪ 
         뢠  ६  訩 ਮ;   뢠
          㦨,   ஫ 뢠   EOI (-
          뢠).  ,    뢠, 
          ࠡ.  㣮 ⥭樠쭮 ஡  ,  
         DOS 㤥  ⠪ ⠩, ᫨  㤥 ᫨誮  -
         ⢮  楯窥 int 1h.  PRINT.COM 蠥  ஡ -
         뫪 EOI  ᢮ int 1h ISR.
            ୠ⨢ ⥣  墠 int 8.  int 8
         ISR ࠧ 뢠  ISR,   뫠 EOI  ஫
         뢠 । 饭.  ISR,  ਢ  ⨭ 4-8
         ࠡ⠥   ਢ  ⨭ 4-7.  ᫨ 稩 
          ࠡ⠭,  ᫨  ᫥ ⨢樨 諠 1 ᥪ㭤, 
          ॠ⨢樨 TSRint 8 ISR 뢠 BKGResume.


            ⨭ 4-8. ਬ  뢠  ६ ISR int 8
         ----------------------------------------------------------------

        OldInt8       DD    0     ; ࠭  樠樨
                                  ; 砫  ISR int 8
        BusyFlag      DB    -1    ;  뢠
                                  ; ॥ࠡ쭠  ᥪ
                                  ; ணࠬ
        PopupPending  DB    0     ;  0, ᫨ ⨫  
        Ticks         DB    18    ; 믮  ࠧ  ᥪ㭤

        Int8ISR PROC  FAR
        NewInt8:
                      pushf       ;;; ஢ 뢠
                      call  cs:OldInt8 ;;; 뫪  ROM
                      cli         ;;;   室
                      cmp   cs:PopPending,0  ;;;    롮ન?
                      jnz   i8_0  ;;; ᫨  0 - 
                      cmp   cs:Ticks,0 ;;; 稪 ⠪⮢ = 0?
                      jz    i 8_0 ;;; ᫨ 0 - 
                      dec   cs:Ticks ;;;  - 㬥襭 
                      jnz   Int9Exit1 ;;; ᫨   0 - த
        8_0           call  DOSSafeCheck ;;; OS  ᯮ祭?
                      jc    Int8Exit0 ;;; ᫨ c - 

                                      - 4-15 -
                                      ;;; ⨬,  ⬥⪠ ६
                                      ;;; ⠥  0, ⠥
                                      ;;; ࠭  ।
                                      ;;;  ⬥
                      call  BKGResume ; । 䮭 ணࠬ
                      mov   cs:Ticks,18 ;  稪
        Int8Exit0:
                      dec   cs:BusyFlaag ; 
        Int8Exit1:
                      iret            ; 
        Int8ISR       ENDP
         ----------------------------------------------------------------

                         ࠢ ⮡ࠦ  ࠭

              뢠 ࠭   ਢ  ࠭祭    ࢨ  
         ROM-BIOS,   ।⢥ ࠢ ன ⮡ࠦ-
           ࠭  ॡ TSR. אַ ⥭      -
         ࠭ ᪮  ४祭 ᯫ,    稩  
         ⨢ TSR, ࠭ ஡, 易   -
          ⥪⮢   ᪨  ०,    㬥  אַ
           ஫ 6845 CRT.

        
                                  :

              אַ       ⮡ࠦ   ᥭ.
              訡  ⠪ ࠡ⪥  ࠧ  .
         

              । ⥬,   ணࠬ஢ ᯫ,  ᥡ
         ।⠢,    ࠡ⠥. ᫥饥 㦤 
          ஬;  ஡ .   "Hardware  Technical  Reference
         Manual".
                ᯮᮡ   ᮤন ࠭.  ᯮ-
         ᮡ  砥   প  ஢:     ᮤন
         ࠧ ࠭ TSR,   㣮 - ࠧ ࠭ ਫ DOS. ன
         ᯮᮡ 頥 -    ஢;  ࠭-
              ⥫쭮  ⢥.
              ⨭ 4-9   ᯮᮡ 㡫஢ ஢.  
         ⨨ 祣  ⥪騩 ࠭     ਫ-
          DOS,    ⥬  ᮤন    TSR ६頥  
         ᯫ.       뫠 訩  ,
         ⠪    ᯮ   뫪 ப.   ६
         横 ।,   楤   21   -
           8088   ⮩ 4.77 MHz.   
           29 .   筮 맢 譮ﬨ  ⮤
          ६ 横; ⠫쭮 ⭮   ६-
          饭  ࠧ塞 .  ६  ᤥ
          祭 ᯫ -  襬 ਠ.


                        ⨭ 4-9.  ४祭  ࠭
                            ᯮ짮  ஢
         ----------------------------------------------------------------

         _text           SEGMENT    WORD PUBLIC 'CODE'

                                      - 4-16 -
                         ASSUME cs:_text, ds:_text, es:_text
         VideoSEG        DW    0b000h
         DOSBuffer       DW    25*80           DUP   (0)
         TSRBuffer       DW    25*80           DUP   (720h)

         Switct          PROC  NEAR
                         cld                ; 䫠 ࠢ <== UP
                         lea   di,DOSBuffer ; di <== ᬥ饭 
                         mov   ax,cs
                         mov   es,ax        ; es:di <==  DOS
                         xor   si,si        ; si <== ᬥ饭 
                         mov   ds,VideoSEG  ; ds:si <==  
                         mov   cx,25*80     ; cx <== ᫮  ⮡ࠦ
                         rep   movsw        ; DOSBuffer <==  
                         mov   ds,ax
                         lea   si,TSRBuffer ; ds:si <==  TSR
                         mov   es,VideoSEG  ;
                         xor   di,di        ; es:di <==  
                         mov   cx,25*80     ; cx <== ᫮  ⮡ࠦ
                         rep   movsw        ;   <==  TSR
                         ret
          Switch         ENDP
         ----------------------------------------------------------------

               .騩 ⨭ ᯮ ⮫쪮  .  ᯮ짮-
          ⤥쭮     ᫥⥫쭮  mov/xchg  
         ॡ   ࠭  祭 ᯫ ਡ⥫-
          45 .  ந⥫쭮  ਥ. ⨬, 
         ࠢ   ࠭ ࠣ 室  ⥫-
           add,           ந⥫-
         .


                        ⨭ 4-10.  ४祭  ࠭
                         ᯮ짮 ⤥쭮 
         ----------------------------------------------------------------

         _text           SEGMENT        WORD PUBLIC 'CODE'
                         ASSUME  cs:_text, ds:_text, es
         VideoSEG        DW    0b000h
         TSRBuffer       DW    25*80       DUP   (720h)

         Switch          PROC NEAR
                         cld          ; ஢ઠ,   㫨
                         lea   si,TSRBuffer ; si <== ᬥ饭  TSR
                         xor   di,di  ; di <== ᬥ饭 
                         mov   bx,2   ; bx <== ࠧ ᤢ
                         mov   es,VideoSEG ; ds:si <== 
                         mov   cx,25*80 ; cx <== ᫮  ࠭
         _nb             mov   ax,[si]; ax <== ᫮   TSR
                         xchg  ax,es:[di] ;  <==  TSR
                                          ; ax <== ᫮  
                         mov   [si],ax;  TSR <== 
                         dd   si,bx
                         add   di,bx
                         loop  _nd
                         ret

                                      - 4-17 -
         Switch          ENDP
         ----------------------------------------------------------------

                                  । DOS

                 襣 TSR ॡ    믮 -
         ⢨  DOS. DOS  ᢮ ᭮  짮⥫᪮/
         /ணࠬ 樮 ⥬.
                 ஥  ணࠬ  ᯥ祭
          প TSR,      㬥஢  㤭 
         ᯮ짮.    ᪫   १묨  ணࠬ,
           ॠ  筮 ணࠬ । . 
         ⮩  㦤  祢 ।⢠  DOS,  
           ᠭ TSR.   ⤠ ᥡ ,  -
            ਠ  ᠭ , ᫥⥫쭮,  
         .

                           /뢮 DOS

              DOS ন    TSR .  
           騬   १ ணࠬ.  ਬ, DOS
         ন  ⥬ ⠡ 䠩,     ࠡ稪
         㯠, 㣠    㭪樮஢    ࠢ  䠩
         (FCB).  ணࠬ      ⥬  ⥬ ⠡-
         栬.  㣨   㠫   ணࠬ-
         .  ਬ,    ணࠬ  ᢮ ᥣ ணࠬ
         䨪 (PSP).
               DOS 㦠 ணࠬ,  뢠 PSP ⮩ ண-
         ࠬ   騥 ६ ( DOS 3.10  ६ ࠧ饭 
         ᬥ饭 02DEh  ᥣ DOS).  ணࠬ,  祩 PSP  ᠭ  
         ᥣ DOS, ⠭ ⥪饩.  ⮫쪮 IBMBIO 㧨 -
          ⥬,   ᥣ   ⮫쪮  ⥪ ணࠬ.
               ணࠬ     /뢮,    ।
         DOS ⥫   ࠢ 䠩.  ࠡ⪨ ⥫
         䠩 DOS    ,      ࠡ
         ⠡  䠩 (JFT).   PSP ᮤন  JFT  ᬥ饭
         34h (⨭ 4-5 " PSP").  宦 ⥪饩 JFT DOS
         cਢ PSP ⥪饩 ணࠬ. 筮 JFT 稭  ᬥ-
         饭 18h PSP (..   JFT 㪠뢠 㣮  ᬥ饭  
         PSP).   祭  ⥬ 䠩 (SFN),  ,   
         ᢮ ।,   ᮬ  ⥬ ⠡ 䠩,  DOS
         ᯮ ⥫    JFT.    ᠭ 
          FCB ᮤন  ⥬ 䠩(FSN);  SFN -
           ᮬ ⥬ ⠡ 䠩 FCB.   ⥬ ⠡
         㪠뢠 DOS,   ன⢮.

                                 "᮪ ᯨ᪮"

              DOS 뢠  ⥬ ⠡  ⥫  ⠪ 
         FCB      ,     "ᯨ᮪ ᯨ᪮".  
           ᮤন    ଠ.  襬 TSR
            ᬮ ᮤন ⮣ ᯨ᪠  -
           ,     㪠뢠.  㬥-
           㭪 AH=52h 뢠 int 21h 頥  ᯨ᪠
         ᯨ᪮   ॣ஢ ES:BX.  ࠣ ணࠬ,  ਢ
          ⨭ 4-11 뢠,    ᯨ᮪.


                                      - 4-18 -
                        ⨭ 4-11.  ᯨ᪠ ᯨ᪮
         ----------------------------------------------------------------

         ListAddr        DW    0,0

                         mov   ah,52h ;  DOS,   ࠧ襭
                         int   21h    ; (㬥஢ 㭪)
                         mov   ListAddr,bx ;  頥  ex:bx
                         mov   ListAddr+2,es
         ----------------------------------------------------------------

               ,    । 㭪樨  ࠧ-
          室  ᯨ᮪ ᯨ᪮. 筮 ன⢮ (筮 ) -
         뢠  ଠ   䠩 ⥬   ࠢ-
          ன⢮ (DCB).   DCB 筮  ࠧ  ᪠,
         ⢮  室   ୥ ४਩,  ⢮ FAT  ..
         DOS 뢠  ⥬ ᮢ  ⢥ ⨬ -
         ⥫쭮.    ࠡ⪥ ᮢ  ६  ,
         DOS 뢠 ६ ⪨    FCB  ⥬  -
         뢠 ६ ᠬ ᫥ 饭      ⥫.
         DOS  ᯮ ࠭    ஢ન ᨣ
         break   ᮮ饭  訡 "  ". DOS ।-
         ,      ISR int 1Bh,  ⠪  ISR 
          ࠡ뢠 break .   権    묨
         ன⢠ DOS ᯮ ⥪騩 ४਩.  DOS ন
         ᯨ᮪ ᯮ㥬 -   ࠡ⪨  ᮢ    -
         / ⤥    饭   ४ 
         FAT.    - 㪠  DOS_W_MaxSector. -
           ⠡ ⥫  FCB 䠩 ⥬ , ᮮ-
         ⢥,  DOS_D_HDLSFT  DOS_D_FCBSFT. ⨭ 4-12 뢠
         ᮤন ⮣ ᯨ᪠.


                        ⨭ 4-12. ଠ ᯨ᪠ ᯨ᪮
         ----------------------------------------------------------------

         DOS                   STRUC
         DOS_D_DCB       DD    0 ; 砫 ᯨ᪠  ᫥⥫쭮
                                 ;  ࠢ ன⢮ (DC)
         DOS_D_HDLSFT    DD    0 ; 砫 ᯨ᪠ ⥫ SFT
         DOS_D_Clock     DD    0 ;  ன⢠  CurClk
         DOS_D_Console   DD    0 ;  ன⢠  ᮫
         DOS_W_MaxSector DW    0 ; ࠧ 襣 ᥪ
         DOS_D_Cache     DD    0 ; 砫 ᯨ᪠   ࠢ
                                 ;  (CCB)
         DOS_D_CDS       DD    0 ;   ⥪饣 ⠫
         DOS_D_FCBSFT    DD    0 ; 砫 ᯨ᪠ FCB SFT
         DOS_W_Unknown   DW    0 ; ⭮
         DOS_B_DriveCountDB    0 ; ᨬ쭮 ⢮ ࠩ஢
                                 ; (祭 ⠭  lastdrive=)
         DOS_B_LastDrive DB    0 ; ⥪饥 ⢮ ࠩ஢
         DOS             ENDS
         ----------------------------------------------------------------

                             ⥬ ⠡ 䠩

                 ,   묨      ᯨ᮪

                                      - 4-19 -
         ᯨ᪮,    TSR   室  ⠡ ⥬ 䠩.
         ଠ,  ᮤঠ  室,   ᯮᮡ ࠡ-
          १묨 ணࠬ ᮢ  /뢮.  
         ,  ࠧ饭  譥   DOS, ᮤঠ
           ᪮쪮 .    ᮤন , -
          㪠뢠  ᫥騩 ,   ᪮쪮 室 ⠡ 䠩-
          ⥬.  室 SFT  ன .
                6 ⮢.  ࢮ  -    ᫮,
         ஥ ᮤন  ᫥饣   ⠡ 䠩 -
             祭  ᯨ᪠. ஥  - ᫮,
         ஥ 㪠뢠 ⢮ 室 ⥬. ⨭ 4-13 -
           SFT.


               ⨭ 4-13.   ⠡ 䠩 ⥬
         ----------------------------------------------------------------

          SFTTBL          STRUC
          SFTTBL_D_Next   DD    0
          SFTTBL_W Count  DW    0
          SFTTBL          ENDS

          SFTTBL_K_Size   EQU   SIZE SFTTBL ; ।  쭥襣
                                            ; ᯮ짮
         ----------------------------------------------------------------

                 室 SFT  ⮫쪮   -
         ன,   祭 稪 饭   宧鶴 PSP -
         ।⢥  TSR.   DOS 뢠 䠩,    頥
         室   ⠡  䠩 ⥬  뢠 ⥪騩 PSP  
         宧鶴 PSP  ᬥ饭 22h.   ⮫쪮  䠩 
          ,  । ᮬ  DOS  䠩,   
         㢥७,     PSP ⠭  ⢥ ⥪饩  ண-
         ࠬ.    । 砭 ࠡ   ⠭ PSP
         ࢮ砫쭮 ணࠬ । .
              稪 饭        室  ᮤন
         ᫮,   ஬ ᠭ,  ᪮쪮 ࠧ 䠩  ன⢮ 뫨
         .  ।  ࠧ饭  室,  DOS ஢  -
         騥 室  ஢ન,    㦥 䠩  ன-
         ⢮,     ᤥ . ᫨ 室 SFT 㦥 , DOS
         㢥稢 稪 饭 । ࠧ饭  室. DOS
         㬥蠥  稪 饭,   䠩/ன⢮ 뢠,
           ᢮ 室  㫥 稪 饭.
               DOS ࠡ뢠   ⨥  ᮧ  (-
         १ FCB  ⥫),   뢠 ⥪騩 PSP   宧鶴
         SFT   뢠  ﭨ (騥   ⨥ 
         ᪫⥫쭮 ०   ० ⥭)   ० SFT, -
           䠩    ࠭.   ﭨ ।,  
         ⨯ 㯠 㤥 ࠧ襭.

                         ⨭ 4-14.  室 SFT
         ----------------------------------------------------------------

         SFT   STRUC
         SFT_W_RefCnt    DW    0 ; [00] 稪 饭
         SFT_W_Mode      DW    0 ; [02] ० 
         SFT_B_DirAttrib DB    0 ; [04]

                                      - 4-20 -
         SFT_W_Flags     DW    0 ; [05]
         SFT_D_DCB       DD    0 ; [07] (FILE)  ࠢ ன⢮
         SFT_W_Cluster1  DW    0 ; [0b] (FILE) 砫 
         SFT_W_HHMMS     DW    0 ; [0d] (FILE) , , ᥪ㭤
         SFT_W_YYMMDD    DW    0 ; [0f] (FILE) , , 
         SFT_D_FilSiz    DD    0 ; [11] ࠧ 䠩/ࠧ饭 EOF
         SFT_D_FilPos    DD    0 ; [15] ⥪  䠩
         SFT W RelClstr  DW    0 ; [19] (FILE) 砫 ஢
         SFT_W_CurClstr  DW    0 ; [1b] (FILE) ⥪騩 
         SFT_W_LBN       DW    0 ; [1d] (FILE)  
         SFT_W_DirIndex  DB    0 ; [1f] (FILE)  ⠫
         SFT_T_FileName  DB    0bh  DUP    (0)  ; [20] (FILE)  䠩
         SFT_T_Unknown   DB    04h  DUP    (0)  ; [2b] ⭮
         SFT_W_OwnerMach DW    0 ; [2f]  設  䠩
         SFT_W_OwnerPSP  DW    0 ; [31] PSP ,  稭
         SFT_W_Status    DW    0 ; [33]
         SFT   ENDS

         SFT_K_Size      EQU   SIZE SET
         ;
         ;MOde field
         ;
         SFT_M_FCB       EQU   8000h ; 室  FCB
         SFT_M_DenyNone  EQU   0040h ; ࠧ塞  (4-6)
         SFT_M_DenyRead  EQU   0030h ; "
         SFT_M_DenyWrite EQU   0020h ; "
         SFT_M_Exclusive EQU   0010h ; "
         SFT_M_NetFCB    EQU   0070h ;  ⥢ FCB
         SFT_M_Write     EQU   0001h ;  㯠  䠩
         SFT_M_Read      EQU   0000h ; "
         ;
         ;Flags Field
         ;
         SFT_M_Shared    EQU   8000h ; ⥢ 
         SFT_M)DateSet   EQU   4000h ;   (⮫쪮  FILE)
         SFT_M_IOCTL     EQU   4000h ; প IOCTL (⮫쪮  DEVICE)
         SFT_M_IsDevice  EQU   0080h ; 室  ன⢠
         SFT_M_EOF       EQU   0040h ; (DEVICE)   䠩
         SFT_M_Binary    EQU   0020h ; (DEVICE) ஧ ०
         SFT_M_Special   EQU   0010h ; (DEVICE) ন 뢮 int 29h
         SFT_M_IsClock   EQU   0008h ; (DEVICE) ன⢮ ⥪饣 ६
         SFT_M_IsNul     EQU   0004h ; (DEVICE) ⥪饥 䨪⨢ ன⢮
         SFT_M_IsStdOut  EQU   0002h ; (DEVICE) ⥪饥 ன⢮ 뢮
         SFT_M_IsStdIn   EQU   0001h ; (DEVICE) ⥪饥 ன⢮ 室
         SFT_M_Written   EQU   0040h ; (FILE) 짮⥫᪨ 䠩
         SFT_M_DriveMask EQU  003fh  ; (FILE) ᪠  ⮢ ࠩ (0-5)
         ----------------------------------------------------------------

                         ணࠬ 䨪 (PSP)

               DOS 㦠 ணࠬ,   ᮧ ᥣ  䨪
         ணࠬ.    ।饩  ᠭ    PSP.  DOS
         ᥣ 頥 PSP  ⭠⨡⮢ ࠭ ࠣ, ⠪
             ᠭ,  祭   ᫮ (ᥣ, 
         ᬥ饭 ).   DOS 62h 頥  ⥪饣 PSP  
         ॣ  BX (㬥஢ 㭪 AH=51h ⠪ 頥
         PSP  BX).

                                      - 4-21 -
              ⨭ 4-15   뢠       PSP.        PSP
         PSP_D_JFTAddr  PSP_W_JFTSize ᮤঠ      ࠧ  ࠡ祩
         ⠡  䠩  (JFT).  PSP  ᮤন ⠪  ( 㬮砭)
         JFT,  稭  JFT_T_JFT.  DOS ᯮ   㣨
           PSP   ࠡ⪨ ᪨ 訡   襭;
         ஡    .


                            ⨭ 4-15.  PSP
         ----------------------------------------------------------------

         PSP   STRUC
         PSP_W_int20     DW    0cd20h ; [00]  int 20
         PSP_W_MemSiz    DW    0      ; [02] 砫  (para)
         PSP_B_Unused0   DB    0      ; [04] ⭮
         PSP_T_Call      DB    09aH,0f0h ; [05] 쭨 맮 DOS
                         DB    0feH,01dh,00f0h ; ᯥ (CPM relic)
         PSP_D_Term      DD    0      ; [0a]  
         PSP_D_Break     DD    0      ; [0e]  뢠
         PSP_D_CritErr   DD    0      ; [12] ᪠ 訡
         PSP_W_Parent    DW    0      ; [16] த⥫᪨ PSP
         PSP_T_JFT       DB    14h   DUP   90ffn) ; [18] ⠡ JFT
         PSP_W_Envron    DW    0      ; [2c] 㦥
         PSP_D_SSSP      DD    0      ; [2e] SS:SP 짮⥫ 
                                      ; ६ int 21
         PSP_W_JFTSize   DW    14h    ; [32] ࠧ JFT
         PSP_D_JFTAddr   DD    0      ; [34]  JFT
         PSP_D_NextPSP   DW    0ffffH,0ffffh ; [38]  ਬ
         PSP_T_Unused2   DB    14h    DUP  (0) ; [3c]  ਬ
         PSP_W_Int21     DW    0cd21h ; [50]
         PSP_B_Retf      DB    0      ; [52]
         PSP_T_Unused3   DB    9     DUP  (0) ; [53]
         PSP_T_Parm1     DB    10h   DUP  (0) ; [5c] ଠ஢ param 1
         PSP_T_Parm2     DB    14h   DUP  (0) ; [6c] ଠ஢ param 2
         PSP_T_DTA       DB    80h   DUP  (0) ; [80]  㬮砭 DTA
         PSP   ENDS
         ----------------------------------------------------------------

                            ⠡ 䠩 (JFT)

               設⢥ 砥 PSP 㤥 ᮤঠ ᠬ ࠡ  ⠡-
           䠩.   㬮砭 JFT   ६ 20
         䠩,     ᮧ ୠ⨢  JFT  
         㢥祭  ᨬ쭮  ⢠  䠩.   DOS 3.3
          ⮣    ᯥ樠쭠  㭪 (int 21h AH=67h).   DOS
         ᨨ  3.3    JFT  PSP .  DOS  
         /뢮 㤥 ᯮ짮  । JFT,  㤥
           㤭 ஢ ⮩ JFT  ࠡ⪥   -
         㧪 (int 21h AH=4bh).
               ⠡  䠩   ⥫  ⢥ 室
         ⠡ 䠩 ⥬.  室 JFT   . -
          室  ᯮ짮,   ᮤন 0FFh;   ⨢ 砥 
         ᮤন ⥬  䠩(SFN),  ᯮ  -
           ⠡ 䠩 ⥬. DOS ᯮ ⥫ 䠩 
         JFT  .
               ⨭ 4-16  4-17  裡  PSP, JFT, SFN
          SFT. ࢠ ணࠬ ਭ ⥫   BX  頥

                                      - 4-22 -
         ᮮ⢥騩 ⥬    䠩 (SFN)  AX.  ணࠬ
         ᯮ 㭪 BIOS AH=62h  ࠧ饭 ⥪饣 PSP, 
         砥   JFT  PSP,    筮  ᯮ -
         ⥫,    JFT. ம। pushr  popr ࠭ 
         १ ॣ,  ᠭ  㬥.  ᫨ -
          訡,    ணࠬ 頥 䫠 ७  -
          (CY=1).
               ணࠬ  ਭ  SFN   AX  頥 
         ᮮ⢥饣 室 SFT  ES:DI.   砥    "ᯨ᪠
         ᯨ᪮"  㭪樥 AH=52h  ⥬ 砥 ⥫  ᯨ᪠ -
          SFT  ES:DI.     "᫥饥"   
         ,  뢠,  ᪮쪮 室  ⮬ . 
         ணࠬ ᬠਢ 楯  SFT   ,  
          , ᮤঠ騩 室 SFT. ᫨ ⥫  ७  -
          SFT ᯮ祭,  ணࠬ 頥 䫠 ७ ⠭-
         .

               ⨭ 4-16.  ᯮ짮 ⥫  祭
                               ⥬ 䠩
         ----------------------------------------------------------------

         GetSFN          PROC  NEAR
                         pushr <ds,es,di,bx>; ப ࠭
                                            ; ॣ஢
                         mov   ah,62h...    ;  ⥪騩 PSP
                         int   21h
                         mov   ds,bx        ; ds <== ⥪騩 PSP
                         pop   bx           ; ⥫
                         cmp   bx,0ffh      ; ஢ઠ ⥫
                         Jz    BadHandle    ; ⥫   
                                            ; ⥫
                         cmp   bx,ds:PSP_W_JFTSize
                                            ; ⥫ ᫨誮 ?
                         jge   BadHandle    ; ᫨ ge - 
                         les   di,ds:PSP_D_JFTAddr
                                            ; es:di <== JFT
                         mov   al,es:[di][bx] ; al <== SFN (⥫)
                         cbw                ; ax <== SFN (⥫)
                         clc                ; ᯥ譠 
         Done: popr            <di,es,ds>   ; ⠭ ॣ஢
                         ret                ; 
         BadHandle       stc                ; 訡 樨
                         jmp   SHORT Done   ; 騩 室
         GetSFN          ENDP
         ----------------------------------------------------------------


                   ⨭ 4-17.  ⥬ ⠡ 䠩
         ----------------------------------------------------------------

         LocateSFT       PROC   NEAR
                         push   ax         ; ࠭ SFN
                         mov    ah,52h     ;  
                         int    21h        ; ᯨ᪠ ᯨ᪮
         ;
         ;        es:di <== 1-  ⥫  ᯨ᪠ SFT
         ;

                                      - 4-23 -
                         les    di,es:[bx].DOS_D_HDLSFT
                         pop    ax         ; ⠭ SFN
                         xor    bx,bx      ; bx <== 0
         _l0             cmp    di,0ffffh  ;  ᫥⥫쭮
                         jz     _l2        ; ᫨ z - 
         ;
         ;               bx <==   SFN  ᫥饬 
         ;
                         add    bx,es:[di].SFTBLK_W_Count
                         cmp    ax,bx       ; SFN  ⮬ ?
                         jl     _l1         ; ᫨ l - 
         ;
         ;               es;ds <== ᫥騩  SFT
         ;
                         les    di,es:[di].SFTBLK_D_Next
                         jmp    SHORT _l0    ; த ᪠
         ;
         ;               bx <==  SFN ⮣ 
         ;
         _l1             sub    bx,es:[di].SFTBLK_W_Count
                         sub    ax,bx        ; ax <== ᬥ饭 
                         mov    bl,SFT_K_SIZE; bl <== ࠧ 室
                         mul    bl           ; ॢ ᬥ饭  
                         add    di,ax        ; di <== ᬥ饭  
                                             ; ()
                         add    di,SFTBLK_K_Size ;  ᢥ
                         clc                 ; ᯥ譠 
                         ret                 ; 
         _l2             stc                 ; 訡 樨
                         ret                 ; 
         LocateSFT       ENDP
         ----------------------------------------------------------------

                              ᯥ BIOS, Int 21h

               㦠  DOS,  IBMDOS  樠   int 21h
         室 IVT, ⮡ 㪠    㧮筮  IBMDOS.
         ISR  ࠡ뢠   int 21h.     ணࠬ -
         ४砥 ⥪  ᯮ ᪨ ६,   ॥-
         ࠡ쭠. ᫨ TSR 訢 㦨 BIOS  室饥
         ६,  ᯮ ࠭ DOS ଠ  ணࠬ ।-
          .   ⮣ ࠧ襭 筮 ᪨.
         ᫨  ,   ⥬ ஡,  ᯮ⨢  .
              ࠡ⪠ Int 21h 稭  뢠, 饭  -
            INT.  ᯥ  ᮤন  ⠡  
         ணࠬ,   ࠡ ࠧ ᮢ BIOS.
          ᮤন 窨 室   饩 㭪樨  int 21h.
          ப ⮩ ⠡ ।⢥ । , -
         ঠ騩  室 ⠡.  筮  DOS ᯮ 
         㭪樨  AH,     ⮩ ⠡  ᭠砫 ஢ -
         祭,  ।  AH.  ᫨   믮,    ᯥ
         頥 訡.
              ᯥ Int 21h  㦨  㭪権:
         AH=51h (㬥஢ -  ⥪騩 PSP),
         AH=62h (㬥஢ -  ⥪騩 PSP),
         AH=50h  (㬥஢  -    ⥪騩 PSP),
         AH=33h (/⠭ 뢠).

                                      - 4-24 -
           ᯥ  ४砥 ⥪   ࠭ ⥪
         ଠ  ᪨ ६,    ᥣ -
         .
               -㣮,  ᫨       -
            㦨 ᮢ (  ⠫ 㭪-
         樨 Int 21h).  DOS c࠭  ॣ  ⥪饬 ⥪, -
            ⥪饥   ᮤঠ  DS:BX    ᪮  ६  
         㢥稢 䫠 ᪮  ࢠ  (  ⠪,  
         InDOS).    த ࠡ⪨  BIOS ᯥ 㦭
         ॣ DS  BX;  DOS 㤥 १㦠  ॣ । -
         ।祩 ࠢ ணࠬ,    ࠡ-
          .
                 ६  ॣ  SS:SP     ᮤঠ  ⥪
         ணࠬ । .  DOS 뢠  ᪨ ६-
          祭 SS:SP  ⥪饣  ।饣 室 ( 
         ᮮ⢥騥 ᫥ 祭 SS:SP  ᯥ).  ᯥ
         ⠪ ࠭ ⥪騥 祭 SS:SP  ⥪饬 PSP  ᬥ饭
         16h. DOS ᯮ ⥪ 稭  PSP  ࠡ⪨  -
         ᪮  訡;   ᯮ  稭  騥 ६,
           頥 ࠢ   ⠭ ࢮ砫-
           ⥪.
              ணࠬ ᯥ ᯮ    ᮡ⢥  ⥪:
         譨  ⥪,  짮⥫᪨  ⥪  ⥪ /뢮 ᪠.
         ࠭ ணࠬ ⥪,  ᯥ  ᫮ ४-
         祭   譨 ⥪  ࠧ蠥 뢠.  ᫨  -
             01h  0h,  ᯥ  ࠡ뢠 -
          訡,   室  ⥪ /뢮.  㣨
         , ஬ Get Extended Error (AH=59h), ᯥ 㦨
         ⥪ / 뢮 ᪠.
              ᫨    㦥 ⥪ /뢮 ᪠ 
         breaks ࠧ襭,  । 믮  ᯥ 믮-
          ஢  break. 㭪樨  01h  0ch  ஢ breaks
          室.  (     breaks; 
         㣨 ஢ breaks. ଠ  믮 ᠭ ⠪
         ᮢ ਢ  "IBM Technical Reference Manual").
              ᯥ int  21h  ᯮ    㭪樨 AH   
         ⠡  ணࠬ,  १ DS:BX  ।
         ࠢ ࠡ饩 ணࠬ. ᫥  믮 ᯥ
         頥 breaks,  㬥蠥 䫠 ᪮ ࢠ, १-
          ॣ SS:SP,  १ 祭 ॣ஢ ।
         int 21h  室  뢠 १ IRET.   ண-
         ࠬ,   㦤   祭  䨪樨 -
          ॣ஢,࠭ 祭 ॣ஢  ⥪ ணࠬ.

                             ணࠬ / ᨬ

               㭪樨 BIOS    01 - 0ch   㭪樨 /
         ᨬ,  ⮬   ᫥   ᯮᮡ    ᯮ짮.
         樨  / ᨬ  ⭮⥫쭮  ६.  BIOS
           , ⮡ 㤮⢮  ⥭. 뢮 ᨬ-
           ⠪    ⭮⥫쭮   ६.  設⢮
         㭪権  ᨬ 뢠 ணࠬ    .
         ணࠬ     ⭮ ஢ ᮫ 
         ன⢮ ⠭⭮   稥 뢠  ⥬  -
          ன⢮   稥 ᨬ.᫨ ᨬ  -
         稨 , ணࠬ   ᥣ 뢠 ᯥ-

                                      - 4-25 -
          䮭 ࠧ.  㭪 뢮  ᯫ (AH=2)  뢠
         䮭 ᯥ  ࠧ,   뢠 4 ᨬ. -
          ᯥ 믮 뢠 int 28h.
             ணࠬ ࠡ⪨ 뢠 (ISR)  int 28h  䮭-
          ࠡ⪥   ஫.   楫  襭  
         ࠡ⪨ 뢠 ISR int 28h 믮  BIOS, 㦨-
           ⥪ ᪮ /.  뢠 㭪権 int 21h, -
             0Ch ( ᪫祭 㭪権,  ࠡ-
           ४祭 ⥪), DOS 㦨  ⥪ ᪮
         /.

                              ६ DOS

              ࠭  ଠ樨  ﭨ 㭪樮஢  
         প ⥪ ᮢ BIOS 樮  ⥬  DOS  -
             ६.  DOS ᯥ稢 ࠡ
          ਧ    প ਧ -
         ஢  室  ப ࠭ ஦ ⥪饣 ⮫.
          ६ ࠢ  ⮪஢  ࠭,  ⬮
         ।   ⥪騬 ४祭 ᨬ. 
         ६  䫠 ᪮ 訡  ᪮  ᥪ-
         樨,  ⥪ PSP  ⥪ ᪮  । (DTA - disk
         transfer area).  㣨  ६ 뢠  樨
         ࠡ⪨ /;  뢠  室 SFN, JFT   -
             ଠ樨  .
             DTA  "୮" ன , ⮬  DOS -
            ।᪠㥬 .  ࠬ᪮ ࠧ-
           䠩  ᪠ ⠫ DOS ন ᢮ ᮡ⢥-
           DTA,    १    権          DTA
         짮⥫.  DOS 頥  DTA ᮬ   ⥭ 
          ࠡ뢠 䠩.   樨  find first/find
         next  (  /  ᫥騩) ⢫  -
         ।⢥  ⥪騩 DTA.
             , 믮塞   TSR,  "" 䥪 -
            ६ DOS.  樮 ⥬ DOS
          ,   㣠 ணࠬ 㤥 ᬠਢ  -
          ६,  ,  ⭮,  ਤ  ⥫⢮, ᫨ 
          ६  .

                                  ࠡ⪠ break

             DOS ஢ 稥 break   .  ᫨  -
           ࠡ⠭  ᪮ ⥪  ᫨ ஢ઠ break  ࠧ-
         襭, ᯥ 뢠 int 21h 뢠 ணࠬ ஢ન
         break. ணࠬ   (뢠   㭪-
         権 / ᨬ)  ६     ६  -
           stdOut ஢ break.
             ணࠬ ஢ન break ஢ ⥪饥 ன⢮ -
         ᮫.DOS  ன⢮ ᮫ ⥬ ஢ન ਡ-
         ⮢ ࠩ஢ ன⢠,   㦠  (.    6).
          ᢮  ன⢮ ⥪饩 ᮫ 㤥  ⠭-
           IsStdIn  IsStdOut.  ன⢠ ⥪饩  ᮫
         DOS  뢠   ᯨ᮪ ᯨ᪮. DOS 㤥 ஢ ன⢮
         ᮫  break,    ᫨   ணࠬ  ७
         stdin.      ।  ⮬,   ன⢮
         ᮫ 뫮  ࢨ᭮ ணࠬ 뢠 int 1Bh
             㢥  break ᨭ஭.  䥪
         ⠪  ⮨  ⮬,  ᫨  stdin  ७砥

                                      - 4-26 -
          䠩  ணࠬ 믮  ⥭   㭪樨 -
          int 21h,     0Ch,   Control-C 
          ᢮ 筮 ।祭.
             ணࠬ    ᭠砫 뢠 ணࠬ
         ஢ન break  ⥬ ஢  ⠭  .    
         樨 / ᨬ,  DOS 㦨 break   ன⢠
         ᮫,    ⠭⭮ ;    DOS  ࠡ⠥  
         ⥪ ᪮ /,  ஢ ⮫쪮 ன⢮ ᮫.
             ணࠬ DOS, ࠡ뢠 break, ⠭ SS:SP 
         祭, 뢠   ᯥ int 21h, ⠭-
           ॣ  ﭨ, ।饥 뢠 int 21h,
         뢠 䫠 ᪮ ᥪ樨  ᪮ 訡,   -
           int 23h. ISR int 23h   ࠢ-
             ணࠬ ࠡ⪨ break DOS   樨 IRET,
           樨 RET. 믮 樨 IRET 㤠 6 -
         ⮢    ⥪,    ६  믮  far ()
         㤠 ⮫쪮 4 .  ⥬ 믮 ࠢ 祭  SP
           ᫥ 믮 樨 int 23h,  ணࠬ break -
          ᮮ,   (RET  IRET) ⨫ ࠢ-
         .
             ᫨ ISR int 23h ࠭ ᯮ㥬  ॣ,    
           த 믮   樨 IRET.  ᫨ ISR
         頥 ࠢ    far (), , 㤥
           த 믮,  । ﭨ 䫠 -
         ७.  ᫨ 䫠 ७ 饭,  믮 㤥 த-
         ,    -  ணࠬ  㤥 ਩ 襭.  ணࠬ
         break DOS 㦤 믮 ਩ 襭 ⥬ 㧪
          ॣ AX 祭 4C00h.    ࠢ -
           砫 ᯥ int 21h. ⥬ ᯥ ୮ 믮-
             int  21h,   믮  襭  砥
         ਩ 襭.
              㬮砭  ISR  int  23h  ᮤন   IRET.  
         COMMAND.COM ⠭ ᢮ ᮡ⢥ ISR int  23h,  
         ਩ 蠥 ⥪ ணࠬ.  㣨 ணࠬ  -
         ⠭ ᢮ ᮡ⢥ ணࠬ 㦨 int 23h.

                           ࠡ⪠ ᪮ 訡

               뢠  int  21h  뢠  樨  /.
         設⢮  ᮢ    / BIOS । ࠩ ன⢠.
         ᫨ ࠩ ன⢠    ,  ᮮ頥 
         ⮬  BIOS.  BIOS ⢥砥  訡 ன⢠   -
         ﭨ ᪮ 訡.   ⢥    訡  ன⢠  DOS
         㬥蠥 祭 䫠 ᪮ ᥪ樨  㢥稢 -
          䫠 ᪮ 訡.    FAT  ⠪  뢠
         ﭨ ᪮ 訡.
              㦥 ᪮ 訡 DOS 믮   ᫥-
           ⢨:   訡;   ,
         맢 訡; 蠥 ⥪ ணࠬ  믮 ⪠
         ⥪饬  맮.  ,       樨   
         ᥣ.  롮 ࠧ ⢨ DOS ᯮ 䫠.
             ᫨ DOS 㦥 ࠡ뢠  訡,  ணࠬ
         ࠡ⪨ ᪮ 訡 ⢥࣠ ⪠ 맮,  -
           ன ᪮ 訡.  ⮡ 㢨,  室  
         ࠡ⪥ ⥫   /, ணࠬ ࠡ⪨ -
         ᪮ 訡 ஢   ६ DOS. ᫨
          ⠪,   DOS 롨ࠥ  室 JFT ⮣ ⥫  -
          쭮 ६  砥  ⥫   ࠢ-

                                      - 4-27 -
         ;  ⢨ ।頥     訡  
         ⮣  ᠬ ⥫.
              砥 ஢ 뢠 ணࠬ ࠡ⪨  -
         ᪮  訡  㢥稢  祭  䫠 ᪮ 訡,
         㬥蠥 祭  䫠  ᪮  ᥪ樨,  ⠭
         祭 SS:SP, ࠭ ᯥ஬ int 21h,  믮 -
          int 24h.   ISR int 24h ⢫  ࠢ-
         ,  ணࠬ  ࠡ⪨  ᪮ 訡 ⠭
          SS:SP (.. ISR int 24h   ), 㢥稢 -
         祭 䫠 ᪮ ᥪ樨  ⠭ 砫쭮 -
          䫠 ᪮ 訡.
             ணࠬ ࠡ⪨  ᪮ 訡  ISR -
          int 24h,   ⮣ ⮡   ࠡ⪥. ᫨ ISR
         訢 ਥ ⢨,  ணࠬ ࠡ⪨ -
         ᪮ 訡 믮 .  ᫨ ணࠬ ࠡ⪨  -
         ᪮ 訡 ⨫ ⥫  ࠢ,  । -
           ⠭ SFN  쭮 ६ DOS. 
          襭 室 १ ࠡ稪 뢠,   -
         ⠢ ᯥ int 21h 믮   襭.
              樨  䠩  COMMAND.COM,   ⠭ ᢮
         ᮡ⢥ ISR int 24h;    ⮩ ணࠬ, 
         뤠 ᮮ饭 "Abort,  retry or ignore ?" ( ਩,
           ஢ ?).  㣨 ணࠬ ⠪  -
          ᢮ ᮡ⢥ ணࠬ ISR int 24h.

                                㧪 ணࠬ

              ணࠬ 㦠  㦡 BIOS. ணࠬ 㭪-
         樨 AH=4Bh int 21h ⠭ 樮 ।, ।
            㧪 ணࠬ, 㦠 ணࠬ  ᪠  -
          PSP.  㧪 ணࠬ  ᯮ 訩  
         .  ⨯ .EXE 㪠뢠 ᢮ ॡ    -
          ணࠬ,   ணࠬ 㧪  ⠭  ᮮ-
         騩 ࠧ  .  䠩 ⨯ .COM ।-
            쭮  ॡ    ,    ணࠬ
         㧪   ࠨ ࠧ   䠩 ⨯ .COM.  
         ⨯ .COM 筥 믮  ᥬ  , ।
          .
             筮 DOS 稭 㧪 ணࠬ,  ⮬  짮-
         ⥫ 㪠   ᫥  ਣ襭,   窮. -
         㦠  ⮬ ணࠬ 뢠 ஦,  ணࠬ,
         뤠   㧪,  뢠 ஦饩. ஦
         ணࠬ ᮧ  ࠬ஢,  ᮤঠ騩  ⠡ -
         ,   ப     ࠢ 䠩-
          (FCB - file control block). ஦ ணࠬ । -
           ⮣    ࠬ஢     ᯥ䨪樨 䠩  
         ASCIIZ  ணࠬ 믮 㧪,  ᯮ    
         믮 㭪樨 AX=4B00h 뢠 int 21h. ஦ ண-
         ࠬ  㪠  ࠧ饭 樮 ।   
         뤠    ஢ ᢮ 樮 । ⥬ 㪠-
            ⢥ 砫쭮 ᥣ ।. ᫨ ஦
         ணࠬ   ।,    ⮬ 뤠 , ⮡ -
         ஢  ।,  ஦ ணࠬ  㤥  -
         樮 ।.
              ।饬  ࠧ  㦤 ஡ 㧪 ண-
         ࠬ.   ,   ⮫쪮 ᥭ,  ॠ-
           TSR.  ᫥  㧪 ࠧ ணࠬ  ᪠,  DOS ᮧ

                                      - 4-28 -
         ᥣ 䨪 ணࠬ.  ন ⮣ PSP  
          TSR.   ᠬ ணࠬ,  㦨  ᮧ-
          PSP (int 21h AH=26h),  ᮧ PSP  ணࠬ 㧪.
             । 맮 ணࠬ ᮧ PSP, ணࠬ -
           ⠭ 䫠,   ⠢ ணࠬ ᮧ
         PSP 樠஢ JFT ஦ . ணࠬ ᮧ-
          PSP  ᬠਢ  室  JFT ஦饣 ,
         室 ᮮ⢥騩  室 SFT,    뫪   
         ,   SFT  㤥 ⠭  " ᫥",  -
          室  㤥 ᮮ⢥⢮ ⥢ FCB.  ஢ 㢥-
         稢  稪  뫪  SFT    SFN  JFT ஦
         . 筮 ,  ஦  "᫥" 
         䠩.  COMMAND.COM ᯮ ᫥⢥  ᯥ-
          ७祭 ன ⠭⭮  stdin  ⠭-
           뢮  stdout.    ਪ ணࠬ ᫥ 
         䠩,      믮   ⨥.  室  JFT
           ⥫ 㦥 ᮤঠ ⨬  ⥬ 䠩-
         ,  ᪮஢  ஦饣 . ன  -
         䥪 ⠭ 䫠 ⮨  ⮬,  PSP ஦ 
         ⠭ ⥪騬 PSP. ணࠬ ᮧ PSP:
          -  ᪮쪮 㣨  PSP;
          -   PSP ஦  ᮤন ⥪ 室
            IVT  뢠  襭 (int 22h),  break (int 23h) 
            ᪮ 訡 (int 24h);
          - 頥 ࠢ  ணࠬ 㧪.
                ணࠬ 㧪:
          -    ।, 樠  室 FCB PSP;
          -    ࠢ ஦饣    
             襭 (int 22h);
          - ⠭  ।  ᪠  PSP  ஦  -
             80h;
          - 樠 ॣ ES,  DS, SS  SP  । ࠢ
             ஦ .

                               襭 ணࠬ

              ᪮쪮  ࠧ  ᯮᮡ  襭 믮
         筮 ணࠬ.  騬  ᯮ짮 㭪樨
         AH=4Ch  㭪樨 AH=00h 뢠 int 21h.    -
          ࠡ뢠  ணࠬ DOS.  襭 ணࠬ
           ணࠬ    ᪮ 訡 (int 24h) 
         뢠 ISR (int 23h),  ࠭  PSP   IVT,  뢠
           䠩  ᢮  ,  ⭮  ⥪饬 -
         .  ࠢ 頥   襭  (int  22h).
         ᫨ 騩   ஢ 室 IVT   -
         襭,   ணࠬ,  㧨 ணࠬ 襭, ᭮
           ࠢ    믮 樨,  ।⢥
         ᫥饩  ᮬ 㧪.  ⥬,    筮,  ࠢ
         頥  䠩 COMMAND.COM. ᪨ 訡 뢠 -
         ਩ 襭.      ணࠬ  ࠡ뢠  
         ਩  筮 襭, ࠧ稥 砥   -
         ࠡ⪥ ࠧ  襭, ࠭塞  ७ -
          DOS.
             ᢮    ᮬ. DOS ।-
            .     ।⢥ ।-
          16-⮢  ࠢ  (MCB).    MCB
         ᮤন  ࠧ ᫥饣    PSP .  ,
         饥   ᯨ᪠,  ᮤন ᥣ ࢮ  ࠢ-

                                      - 4-29 -
          . ணࠬ 襭 DOS ᬠਢ ᯨ᮪ MCB
          宦 ,  묨  ⥪騩 .  直
         ࠧ,   ணࠬ 襭 室 । , -
           ,  ⠭   MCB  ,
         㪠뢠,  ⥬ ᠬ,    ᢮.  ࠧ,  -
         ᬮ MCB ᢮   , 묨  -
         蠥 ,  樮 ।.  ᢮ ᢮-
          । ணࠬ  㦭 ।ਭ ᯥ樠 ⢨.
             ணࠬ 襭 DOS 砥  JFT  PSP ⥪-
          (饣)   ᬠਢ JFT  ᪠  -
          䠩.  ⮬ ணࠬ 襭 뢠  -
          䠩.    ⮣ 䠩  ணࠬ  
         㬥蠥 稪 뫮 SFT.  ᫨ 稪 뫮 ⠭ 㫥
          䠩  ⥪ ணࠬ,   ணࠬ  -
           室 SFT.  室,  ᮮ⢥騥 ᫥㥬 䠩,
           稪 뫮, 祭   1; 室 SFT
           뫮 ⠭. (   ணࠬ  
          ⥪騩 PSP,   ⪠   室 ਢ
           ⪠;    "  PSP"    室 SFT ᮤন 䠩
         COMMAND.COM, 㯠騩  ⢥  ).
              DOS    㭪樨 "  ⠢ १⭮"
         - int 27h  int 21h AH=31h. 㭪 int 27h  ॢ襩 
          DOS  ⮡ࠦ   int 31h.   "
          ⠢ १⭮" ࠡ뢠   ⮩  ணࠬ-
          襭.   믮  "  ⠢ -
         ⭮" ணࠬ 襭  뢠   䠩  
           ᢮  ,     ࠧ 
         ,  ᮤঠ騩 PSP.   ணࠬ 㪠뢠  ࠧ
             ⢥ 㬥   " 
         ⠢ १⭮".    ࠡ⪨,   뫨
         ⨬  ।  뤠祩  "  ⠢ १-
         ",  ⢨⥫  ᫥ ୮ ⨢樨 TSR.

                           㧪  樠 TSR

             TSR    䠩 .COM,  䠩 .EXE. DOS -
           ணࠬ   ⥬  ᯮᮡ.  ணࠬ -
          ᥣ ணࠬ 䨪 (PSP),   ணࠬ   .
         稥  TSR  ⠭묨 ਪ묨 ணࠬ ⮨
          ⮬,   TSR 믮 ᪮쪮 ᭮   ⮢
         ᠬ ᥡ  ᫥饩 ୮ ⨢樨.
              樠樨 TSR  ணࠬ ।    
            㯭  ⥬ DOS.   믮 TSR  -
         ⢥ ணࠬ ।   㯭 ।  -
         . TSR  뢠   ⮩ ଠ樨  
          ⠯  樠樨.  ६ 樠樨 TSR 筮 -
          ᫥騥 ⢨:
             - ஢  ᯮ㥬 DOS;
             - ࠧ頥    DOS;
             - "墠뢠"    ஢ 뢠;
             - ஢  ⨯  ᯫ ஢  ਩-
                ன;
             - 믮   ⥫쭮 㪠 ਪ -
               ࠡ;
             -   ꥬ  ,  室  ࠧ饭 १-
               ⭮ ணࠬ.
              樠樨 TSR 蠥,   ணࠬ -

                                      - 4-30 -
          㭪 "   ⠢  १⭮"  (int  21h  AH=
         31h).  ભ  䠪,  ࠧ TSR 蠥,  
            ணࠬ । .   ணࠬ
              묨 ⥫ﬨ,  ᫥⥫쭮,  
           祭 묨  믮 ᢮  㭪権.  -
         砫   ணࠬ 樠樨    -
         ﭨ ⥬ ⠪ ࠧ, ⮡ TSR   ୮ ⨢-
         ஢  ࠧ襭 樮 ⥬.
              , ணࠬ 樠樨 砥 ⮢-
           ணࠬ,  ࠭,    TSR ᬮ  믮 
         ᫥饬 맮,   ॡ㥬 ࠧ    १-
         ⭮ ணࠬ,  , , 뤠  "  -
         ⠢ १⭮" (int 21h AH=31h)     ࠢ  
         DOS.

                         ஢ઠ ᨨ ᯮ㥬 DOS

             । 믮 - ⢨  ணࠬ TSR
         뢠   , 㬥஢ -
           DOS    । 冷 ஢ન ᨨ ⥪饩 ⥬.
         ᫨  ४⭠,   TSR  ⢨ 室  뤠-
         祩 ᮮ⢥饣 ᮮ饭  訡.
             DOS 뢠    ᨨ ᢮ ⥬  쭮 -
            㯭  祭 १   BIOS  㭪-
         樥 30h.  믮 ⮣  ᯥ int 21h  믮-
          ४祭 ⥪       ६-
         .     ᥣ ᥭ, ࠢ 襣 ⮭ 
         ணࠬ஢ ॡ, ⮡   뤠  । -
         , 믮  ணࠬ 樠. ਬ । -
          ᨨ  ᯮ㥬  樮  ⥬      
         ⨭ 4-18.

                         ⨭ 4-18. ஢ઠ ᨨ DOS
         ----------------------------------------------------------------

          VersionID   EQU   0a03h         ; DOS 3.10 (⨬,  -
                                          ;     MCB)
                      mov   ah,30h        ; ah <== 㭪  ஢ન
                                          ; ᨨ DOS
                      int   21h           ; 뤠 
                      cmp ax,VersionID    ;   頥    ax
                      jnz WrongVersion    ;  訡筠
         ----------------------------------------------------------------

                       饭 १  TSR

             ࠢ 묨 ⢨ﬨ  DOS    ࠡ⮩  
         । ।뢠 ᯮ짮 室 IVT. TSR ⠪ ᯮ-
          뢠  室 IVT TSR   ࠧ饭  १  
         ᢮ ணࠬ.   ⮬   室 ࠧ-
            ᪮쪨  १ ணࠬ TSR   -
         室  ࠧ饭 ,  뢠   १⭮
         ணࠬ.  ᫨  믮 TSR 롨ࠥ  室  IVT,
           ᫥⥫쭮  믮塞  ணࠬ ⨢樨 ࠧ頥
         १ ணࠬ ⥬ 믮 樨 INT  ஢-
          ணࠬ , 㪠뢠 室 IVT.
              室 IVT ᫥ ?  ,  ० ᥣ, ।-

                                      - 4-31 -
          ⥬,    롮 뢠  ࠧ饭 १⭮ ண-
         ࠬ    TSR.  ᮫⭮ ⮩ 堭  -
         .
             DOS   ।⢠ ᮭ쭮  ᯮ
         ⮫쪮     ᯮ殮 室 IVT. -
         ᪨    ᯮ㥬 室.  ᫨ TSR ⢨-
         ⥫쭮 믮  INT,   室 IVT  㪠뢠 
         ⨬ ணࠬ ࠡ⪨ 뢠 (ISR). , ࠭
         ⮣,   室 IVT  ᮤন, ᫨ TSR  樠஢ ,
         .     ⥩ 室  ⮩    "Catch  22"
         ("誠 22") ⮨  ஢થ 室 IVT.
             DOS 㦠  ணࠬ  ࠭ ᥣ.  ᫨ 
         뢠  "墠⨫"  ।  ணࠬ,   祭
         ᬥ饭 (襥 ᫮)  室 IVT  ᮮ⢥⢮ ᬥ-
         饭 ISR  ⥪饩 ணࠬ.      ,   ண-
         ࠬ ࠡ⪨ 뢠 (ISR)   ࠧ  ணࠬ TSR
         ᯮ        室 IVT    ᬥ饭,
         쭮 ᫠,  室 믮  ⥫
         ஢. ਬ ⮣ ਢ  ⨭ 4-19.
              ⮬ ਬ  ப ASCII UniqueID;     -
           ணࠬ ISR ࠢ ப. ⪮ ⮣ ᯮ-
           ,    ࠧ蠥 ஡ "䫨" -
         뢠. ᫨  ணࠬ TSR 訫 ᯮ짮    
         室 IVT,    ࠪ᪨    ᯮᮡ । -
         ,  TSR 㦠 ࢮ.
             稭  ᨨ 3.0 DOS,  ଠ  ""  㬥
          뢠,     ࢮ ⪮ 襭
         ஡  "䫨"  뢠.     뢠
         ᯥ稢  ࠭㥬  ࠢ  室  IVT  int 2Fh 
         ⮪ ࠧ饭 ணࠬ TSR.  砫 室 IVT ⮣ -
         뢠 int 2Fh 㪠뢠   IRET.  TSR, -
          ᯮ짮 ⨯㥬  뢠,  ᭠砫  
         ।騥 㦥  ᢮ ணࠬ,   ⥬ ⠭-
          ᢮ ᮡ⢥ ணࠬ ISR 뢠 int 2Fh.

                ⨭ 4-19.  饭  TSR  ⥬ ᯮ짮
                     ந쭮 ࠭  뢠
         ----------------------------------------------------------------

         NewISRVector  EQU  ??  ;   
         OldISRxx   DD  0       ;  ணࠬ ࠭  
         UniqueID   DB '㭨쭠 ப' ;   䨪樨 ISR
         IDLength      EQU $-UniqueID ;  ப
         NewISRxx PROC FAR      ; ⠭ ணࠬ 樠樨
         ;
         ;            ...           ; ,  믮 ISR
         ;
                      iret
         NewISRxx     ENDP
         Locate       PROC  NEAR
                      mov al,NewISRVector ; al <==  
                      mov ah,35h        ; ah <== 祭 㭪樨 
                                        ; 뢠
                      int 21h ;    DOS   뢠
                        ret   ;   es:bx   ISR
         LocateISR    ENDP
         CheckISR     PROC  NEAR
                      cmp   bx,OFFSET NewISRxx ; 饥 ᬥ饭

                                      - 4-32 -
                                    ; 襥
                      jnz   done    ; ᫨  0 -- 
                      mov si,OFFSET UniqueID ;  si <==  ᬥ饭  UniqueID
                      mov di,si              ; di <== ᬥ饭 UniqueID
                      mov cx,IDLength     ;  cx <==  䨪
                      cld
                      repnz  cmpsb  ; ࠢ 䨪஢
         done:        ret           ;  :
                                    ; zr=1 ==> १ ⠭
         CheckISR ENDP ;  zr=0 ==> १  ⠭

         TSRResdnt  PROC   NEAR ; । १⭠  TSR
                      call LocateISR ;  祭  ISR
                      call CheckISR  ; ஢ 䨪 ID
                       ret           ;  頥:
                                     ; zr=1 ==> १ ⠭
                                     ; zr=0 ==> १  ⠭
         TSRResdnt    ENDP
         ----------------------------------------------------------------

             TSR ᠬ  ⢫  १  ⥬ 㧪
         㭨쭮 䨪  ॣ AH,    ॣ AL  -
          樨 int 2Fh. ணࠬ ISR 2Fh ஢ 祭
          ॣ AH. ᫨ ISR ᯮ 䨪,   ⠭-
          AL=00fh  頥 ࠢ  樨 IRET;  -
         ⨢ 砥  室  ࠭ ࠭ ISR  int  2Fh.  
          殢,   㤥 ⨣  ⮩ 楯窨,   ISR
         ᯮ 祭  ॣ AH.
                䫨.    ࠧ襭 TSR  -
          ⥫ ஢ન.   祭 ⮩ ஢ન 
          ⮪ 뢠 int 2Fh,    ⮬ ᫥ 
          ,  ⠭  ⥫ ஢ન . -
         室  ணࠬ.    室 -
          ⨭ 4-20.
             ᪨, 祭 ⥫쭮 ⢥   int 2Fh
         AL=0 砥,   ⢥⨫  TSR. ISR int 2Fh, -
            ⨭,  ⢥砥  㭪 AL=1 ⥬   ᥣ-
            ॣ ES. TSR, ᤥ 砫 , 
         ᯮ짮    祭    宦 ன 㭨쭮
         ப.  ᫨ ப ᮢ  ᮡ,    㢥७-
         ,   ࠢ쭠 ISR.
              ७ ⮪ ⭮ 뢠   -
          ⠭.  ࠭ ⮣,   㣠
         TSR 㤥 믮  ⢥   int 2Fh  AL=1.  㫥
         ॣ ES । 믮 ⮣ ண  , 
         ࠩ , ,  ⢥⨢ TSR 頥 ஥ -
         祭    ॣ ES.  ( 筮 ⭮,   TSR  
         㦠  ᥣ 0).

                 ⨭ 4-20.  饭 TSR ⥬ ᯮ짮
                           ⨯㥬 뢠
         ----------------------------------------------------------------

         OurID EQU   81h       ;  TSR 롨ࠥ 祭 AH
         OldISR2f  LABEL  FAR  ;  ࠭   int 2Fh

         UniqueID    DB   '㭨쭠 ப' ; 䨪樨 TSR

                                      - 4-33 -
         IDLength    EQU     $-UniqueID ;  ப
         OldInt2f    DD      0       ;  ணࠬ 樠樨 -
                                     ; 뢠 砫  ISR
         NewISR2f    PROC    FAR     ;  ISR int 2Fh
                     cmp     ah,OurID ;   ?
                     jz      ItsMe   ; ᫨ 0 --  
                     jmp     cs:Oldint2f ; । 
         ItsMe:      or      al,al   ; 㧪 ஢७?
                     jnz     GetAddress ; ᫨  0 -- 
                     mov     al,0ffh ; 㦥
                     iret    ; 
         GetAddress:
                     cmp     al,1    ; ஢७  ?
                     jnz BadFunction ; ᫨  0 -- 
                     push cs ;  ᥣ  ES pop es iret
         BadFunction:
                     stc             ;  訡
                     iret
         NewISR2f    ENDP
         LocateISR   PROC    NEAR
                     mov ax,OurID SHL 8 ;   祣-?
                     int 2Fh
                     cmp al,0ffh ;  ஢ઠ 뤠 ⢥
                     jnz NotFound ;   0  ==>  ⢥
                     xor ax,ax ;  ࠭ ᥣ
                     mov es,ax ; ஢ઠ 뤠 ⢥
                     mov ax,(OurID SHL  8) OR 1
                               ;   ᥣ
                     int 2Fh
                     jc NotFound ;᫨ cy=1,     
                     xor ax,ax  ;    ES ஢?
                     mov bx,es ; ᫨  ES  ஢
                     cmp bx,ax
                     jz  NotFound ;  ES  ஢
                     lea bx,NewISR2f ; ES:BX   ISR
                     clc              ;  ᯥ譠
                     ret              ; 
         NotFound:   stc
                     ret
         LocateISR   ENDP
         TSRResdnt PROC  NEAR  ;  ।  १⭠     TSR
                     call LocateISR  ;  砥    TSR
                     jc  NotLoaded
                     call CheckISR ; ஢ 䨪 ID
                     ret              ; 
                                      ; zr=1 ==> ⠭
                                      ; zr=0 ==>  ⠭
         NotLoaded:  or      al,1     ; ⠭ zr=0
                     ret              ; 
         TSRResdnt   ENDP
         ----------------------------------------------------------------

             ⨬,  TSR    ⠪ 墠뢠 뢠
         int 2Fh.  ᫨  㣠 TSR,  㦠    㣨,
         "墠"   뢠,  室 IVT 㤥 㪠뢠 
           TSR,   㦥  㣨.


                                      - 4-34 -
                  ᥣ ணࠬ 䨪 (PSP)

              ணࠬ  䨪 (PSP)   -
         ன   DOS.  樮 ⥬ DOS ᯮ   PSP
           ࠢ  ணࠬ  প  㦥 㭪権
         /뢮. DOS    ࠢ ᪮쪨 PSP,  -
          ࠢ ⮫쪮 ⥪騬 PSP.  ᫨  ணࠬ TSR -
         諠  믮 - ⢨,       ⥪饣
         PSP ⢥砥 .    㧭,  ᮮ DOS  ⮬, -
          PSP ᯮ짮.  ᫨ - ணࠬ TSR ᫥  
         樠樨    ᫥饬      PSP,   
          ࠭     ⠯  믮  樠樨.
         쪮  ⠯ 樠樨    㢥७, 
         ⥪騩 PSP ⭮ ।⢥  .   ணࠬ
         ,  ।  襣 PSP (⨭ 4-21).

                        ⨭ 4-21. 祭  PSP
         ----------------------------------------------------------------

         MyPSP  DW    0         ;  뢠  PSP
                mov   ah,62h    ; 饭  DOS  祭 ⥪饣-
                                ;  PSP
                int   21h       ; 祭  PSP, ⭮饣 
                                ; 
                mov   MyPSP,bx  ; ࠭ PSP
         ----------------------------------------------------------------

                       ᪮ ᥪ樨 (INDOS)
                              ᪮ 訡

             ᫥ ⮣,    TSR  蠥 믮  "⠢
         १⭮" (㭪 31h),    ᫥饩  ᢮  ⨢樨
           뢠 墠.  TSR ஡㦤, 室-
           ᯮᮡ ।,      ணࠬ
         । ,    ⨢   :  DOS  BIOS.
           樮 ⥬ DOS    ୮  ,
             楫     १⭮ ணࠬ  襭
           ᭮  ਥ  ᮢ  BIOS    ন
         䫠 ᪮ ᥪ樨  ᪮ 訡.
              ࠭⨨ ᭮ த  ᢮ 믮  
         ୮ ⨢樨 TSR  ஢ ﭨ  䫠:
         ᪮ 訡  ᪮ ᥪ樨.  䫠 ᪮
         ᥪ樨 DOS 롨ࠥ  㬥஢   -
          㭪樨 AH=34h 뢠 int 21h.   ᨨ DOS 3.10 -
          㭪 BIOS    䫠 ᪮ 訡;
          䫠 ࠧ頥 ।⢥ । 䫠 ᪮
         ᥪ樨.  ᨨ DOS 3.20  䫠 ᪮ 訡 -
         頥 㭪 int 21h AX=5D06h   ES:BX,    DOS 3.3 
         4.0  祭 頥   DS:SI.
             뢠 ᯮᮡ ࠡ⪨ 樮 ⥬  DOS ᮢ
         int 21h,   ISR  ࠭஢  祭 
         ᮢ.    ᯮᮡ 㯠  ⨬ 䫠 
         ࠭  ᮢ ⮫쪮  ६ ᥪ樨 樠樨 TSR.
         騩 ࠣ ணࠬ,  ਢ  ⨭  4-22,  -
          墠  ᮢ 䫠 ᪮ ᥪ樨  -
          訡.


                                      - 4-35 -
                ⨭ 4-22. 饭 䫠 ᪮ ᥪ樨
                                ᪮ 訡
         ----------------------------------------------------------------

         CsectFlg   DW     0,0        ;  䫠 ᪮ ᥪ樨
         CErrflg    DW     0,0        ;  䫠 ᪮ 訡
         GetCritFlags      PROC    NEAR
                    mov    ah,30h     ;  ah <== ஢ઠ ᨨ DOS
                    int    21h
                    cmp    al,03h     ;  3.00?
                    jnz    WrongVersion ; ᫨  0 -- 
                    push   ax         ;  ࠭  ᨨ
                    mov    ah,34h     ;   䫠 -
                    int    21h        ; ᪮ ᥪ樨
                    mov    CSectFlg,bx ;   ES:BX
                    mov    CSectFlg+2,es ;  
                    dec    bx         ; ।,   䫠
                                      ; ᪮ 訡 ।
                                      ;  䫠 ᪮ ᥪ樨
                     pop   ax         ; ⠭  ᨨ
                     cmp   ah,1h      ;  3.30?
                     jnz   v3xx       ; ᫨  0 -- 
                     mov   ax,5d06h   ; 祭  ᪮
                                      ; 訡
                     int   21h        ; (⮫쪮 DOS 3.3)
         v3xx:       mov   CErrflg,bx ;   .訡
                     mov   CErrflg + 2,es ;   ES:BX
                                      ; DS:SI   3.3  4.0
                     clc              ;  ᯥ譮 
                     ret              ; 
         WrongVersion:                ;  
                     stc              ;  ⪠ 
                     ret              ; 
         GetCritFlags     ENDP
         ----------------------------------------------------------------


                            墠 ஢ 뢠

              -  窥 ᥪ樨 ᢮ 樠樨 TSR  -
          ᢮ ᮡ⢥ ISR int 2Fh,  ⮡ ᫥⢨  -
          ணࠬ  뫮    १ .
          ⮣ TSR  ⠪ ॡ 䨪 㣨 室
         IVT.  뢠 int 25h (⥭  ᪠  ᮫ ᠬ) 
         int 26h (    ᮫ ᠬ) 㤭 -
           ⥪.   ᢮ த,  뢠 int 13h (
         ஢ / ᪠)    ࢠ. ।⠢ ᥡ,  
         ந, ᫨ 뢠   int 13h 뫮  ࢠ -
          ᪮  ।祩.  ᫨  ࠡ⪥ ⮣ 뢠 -
             /,   ࢠ ।,  ᥩ -
         ,  쥧   ᪠.
              裡    ⨬  DOS   ࠧ㬥  뢠 
         ६ 㦨    ᮢ.    樮-
          ⥬ DOS    ⢥⢥  ணࠬ-
          TSR.  墠  ஢  TSR ࠢ ⨢
         ᪠.  ISR    ᯮ짮 । -
          - ᯮᮡ ᯮ짮 䫠 .  室 ISR

                                      - 4-36 -
         int 13h 頥 १  ॣ 䫠;  ISR 
           १ ॥, 祬  int 13h 
           ⥪.  室 ISR int 25h  int 26h , ஬ ⮣,
         㣮 ᪠,   䫠  ⥪ 樥 INT. ⨬,
            ணࠬ ISR NewInt25  NewInt26 । 맮 室-
          ணࠬ  믮   push,        
         ISR ᯮ    far  .   室  
         墠  뢠,   ⨭ 4-23.
              墠 뢠  ஦.   室 IVT -
         ஢,   㤥 ᯥ஢  ISR,  ᫨
          ISR   㪠뢠  ࠢ ணࠬ.  -
           뢠  ᪨  訡.  ᫨  ᫥
         墠 뢠     ᫮,    
         맢 襭 ணࠬ. 樮 ⥬ DOS 㤥  -
         ୮ ᯮ짮 ,   襩 ணࠬ     ISR.
              ந室,   室 IVT  㪠뢠  -
          ணࠬ ISR.

         Ŀ
                                                        
                                                                       
            । 䨪樥    뢠   室 
            ⠭ ᢮ ᮡ⢥ ணࠬ ISR  break  - 
            ᪮ 訡. ⠩ ⠭    - 
            ஢. 襭 襩 ணࠬ DOS 㤥 䨪஢ 
            室 IVT   㭪権. ᫨  ⠥ ⠭ 
             ᪮ 訡,   뢠  墠- 
             㣨 ,      ணࠬ  ⠭ 梨  
            ०६ 襭.                               
         

            ⨭ 4-23.  饭 ணࠬ ISR ᪮ /
         ----------------------------------------------------------------

         DiskIO      PROC   FAR
         OldInt13    DD     0           ;  ணࠬ 樠樨
         OldInt25    DD     0           ; 뢠  ਣ
         OldInt26    DD     0           ; int 13h, int 25h  int 26h
         BusyFlag    DB     -1          ; 䫠   뢠
                                        ; ॥ࠡ쭮 ணࠬ
         DiskIOExit0:
                     pushf              ; ࠭ 䫠 ᪮ /
                     dec    cs:BusyFlag ; ᭨ ஢
                     popf               ; ⠭ 䫠 ./
                     ret    2           ;   㤠 䫠, -
                                        ; 饭  뢠
         DiskIOExit1:
                     pushf              ; ࠭ 䫠 ᪮ /
                     dec    cs:BusyFlag ; ᭨ ஢
                     popf               ; ⠭ 䫠 ./
                     ret
         NewInt13:
                     inc    cs:BusyFlag ; ᭨ ஢
                     pushf              ;  뢠
                     call   cs:OldInt13 ; ᯥ஢ ॠ쭮 ண-
                                        ; ࠬ
                     jmp    SHORT DiskIOExit0

                                      - 4-37 -
                                        ; 室  饬 室
         NewInt25:   inc    cs:BusyFlag ; ᭨ ஢
                     call   cs:OldInt25 ; ᯥ஢ ॠ쭮 ண-
                                        ; ࠬ
                     jmp    SHORT DiskIOExit1
                                        ; 室  饬 室
         NewInt26:   inc    cs:BusyFlag ; ᭨ ஢
                     call   cs:OldInt26 ; ᯥ஢ ॠ쭮 ண-
                                        ; ࠬ
                     jmp    SHORT DiskIOExit1
                                        ; 室  饬 室
         DiskIO      ENDP
         ----------------------------------------------------------------

                               ஢ઠ ⨯ ᯫ

              ᫨ 室,  ᥪ 樠樨 ணࠬ  -
          ⨯ ᯫ  㣨 ਩ ன. TSR 室-
           ᮢᥬ   ᯫ,  ᫨  ᮡࠥ ন-
          稥  .    ᯮ㥬 ᯫ  MDA
         (஬ ᯫ )    CGA  (梥⭮  ᪨
         )  ।  ⭮⥫쭮  .   ⨯ ᯫ
         㫨  ० MDA,  ० CGA.  裡  ⥬,  ⨯
         ᯫ  MDA    CGA  饥 ६   騬,
         ࠭稬 ᢮ 㦤 ⮫쪮 ⨬  ⨯.  ⫨
         ᯫ MDA  ᯫ CGA,   ⨭ 4-24.

                      ⨭ 4-24. । ⨯ ᯫ
         ----------------------------------------------------------------

         C40         EQU  1              ; ᯫ CGA 40 x 25
         C80         EQU  2              ; ᯫ CGA 80 x 25
         M80         EQU  3              ; ᯫ MDA 80 x 25
         DisplayType DB   0
                     int  11h            ; 뢠 ஢ન 
                     and  al,30h         ; 뤥 ⮢
                     mov  cl,4           ; ᤢ  ⠬ ०
                     asr  al,cl          ; 0  1
                     mov  DisplayType,al ;  ०
         ----------------------------------------------------------------

                          ᢮ 樮 ।

             । ᮤন ப ᨬ.  ப   -
         ,   ன ᫥ 祭 (  ᠭ ।
         ਢ   3).  DOS ⠭ ।  㧪 襩
         १⭮ ணࠬ TSR.  ணࠬ ᢮  樨
         祭  ६.   COMMAND.COM ᯮ ६
         PATH ()  㪠 ⠫,   室 ந-
           㦠 ணࠬ   䠩.
                㧪 ணࠬ 䠩  COMMAND.COM  訢
         DOS   ।   樮 ।,  TSR  室
         ஢ ᫥  襭    ।.  ६,  
         祭 ண ।  ࠢ쭮, -  ६ 樠-
         樨 TSR. ᯮ   TSR ।   ࠧ 稭 
         ᯮ,    ਫ.   裡  ⥬,  ᫥ -
         襭 TSR ।  ࠢ쭮      ।-

                                      - 4-38 -
          ,       稭 ࠭  ( ⪠ 
         ᢮ ।  뢠 ⭮  ⢨  
         TSR).
             砫 ᥣ । ᮤন    PSP    ᬥ饭  2Ch
         (ᬮ ⨭ 4-15 " PSP").  ᢮ । -
          㭪 int 21h AH=49h "᢮    ".  
          ⥫⢠  । . ⮬, ० 祬
         ᢮ ।,  室 ஢  ⥫⢠. ᫨
         ।  ,    PSP 㤥 ᮤঠ 㫨  ᬥ饭 2Ch
         (㭪 49h 㤥   ஡  ᢮ -
            祩 00000h).  ਬ ᢮ । ਢ 
         ⨭ 4-25.
                         ⨭ 4-25. ᢮ ।
         ----------------------------------------------------------------

         ;
         ;                     ᢮ ।
         ;
         ;  砭:  PSP_W_Envron   
         ;             PSP   STRUC  ⨭ 4-15
         FreeEnv  PROC   NEAR
                  pushr  <ax,bx,es> ; ࠭  ॣ஢
                  mov    ah,62h     ;   PSP
                  int    21h
                  mov    es,bx      ; es <== PSP
                  xor    ax,ax      ; ax <== 0
                  xchg   ax,es:PSP_W_Envron
                                    ; ࠭ ᥣ ।  PSP
                                    ; ax <== ᥣ ।
                  or     ax,ax      ; ।  ?
                  jz     NoEnv      ; ᫨ 0 -- 
                  mov    es,ax      ; es <== ।
                  mov    ah,49h     ; ᢮  
                  int    21h
         NoEnv:   popr   <es,bx,ax> ; ⠭ ॣ஢
                  ret               ; 
         FreeEnv  ENDP
         ----------------------------------------------------------------


                               襭 ணࠬ

             ᫥ 祩  樠樨  맮 㭪-
         樨 "  ⠢ १⭮" (int  21h,  㭪  31h).
           맮 㭪樨 "  ⠢ १⭮" 室
         ᮮ DOS  ⮬,  ꥬ  㦭 ࠭.  ⮣
         । 뤠祩  int 21h AH=31h, ᫥   ॣ
         DX 室 ⢮ ᥣ⮢. DOS ᢮  ஬ -
          DX  ᥣ⮢ ,  묨   ணࠬ. -
         ਭ ࠧ ணࠬ 樠樨   TSR  ⠪, ⮡
             㤠 ᫥ 襭 ᢮ ࠡ.  騩
         ⨭  ᯮ짮 ⮩  㦥  㭪樨.  
         ணࠬ 稭   (EndOfCode), 砥 㣫-
            ᫥饩 ࠭ ᥣ  ८ࠧ  ࠣ-
          ⥬   16.


                                      - 4-39 -
                         ⨭ 4-26. 믮 
                        "  ⠢ १⭮"
         ----------------------------------------------------------------

             mov  dx,OFFSET EndOfCode ; dx <==  १⭮ -
             add  dx,0fh              ; 㣫  ᫥. ࠭. ᥣ.
             mov  cl,4                ; ८ࠧ ᬥ饭  ᥣ.
             shr  dx,cl               ; dx <== १ ࠣ
             mov  ah,31h              ; 㭪 TSR DOS
             int  21h
         ----------------------------------------------------------------

              १  襭  ࠢ ।  DOS,
          DOS 頥 ࠢ      (筮  䠩
         COMMAND.COM).      ,   짮⥫  맮 
         ணࠬ,  ਪ ணࠬ ।  㤥 
         .
                             ୠ ⨢ TSR

              TSR  砥    ୮ ⨢樨,   
         㡥   ᭮  쭥襣 믮.   -
          ⢨, 믮塞 ணࠬ 樠樨. TSR 
         ஢ 䫠 ᪮ 訡  ᪮ ᥪ樨,   㡥-
             ⮬,    믮 뢠 樨.  ᫨
         쭥襥 த 믮 ᭮, TSR  ࠭
         ⥪騥  祭  ॣ஢,  ४   ᢮ ᮡ⢥
         ⥪, ⠭ ᢮ ᮡ⢥ ணࠬ ᪮ 訡
          break,   ଠ, ࠭  ࠧ 
         ६ DOS ,  ,  ⠭ ᢮  ᮡ⢥  ।,
           ⥪ PSP  DTA. ⨬,  祭  -
         冷 믮  権!
             ஬ ,   ॡ  㣨 樨. , ᫨
         室 ᯮ짮 ࠦ, TSR  ࠭  -
           ᮤন ࠭.  ணࠬ PRINT.COM ஢ ᢮ -
          뢠  ஫ 8259. ᫨ ⨢ - -
         뢠, ⫨  뢠 ISR,   ஡㦤 ,  
           ୮ ⨢樨. ⭮, PRINT.COM 
           ஢,  ⮡    ᨬ ᫥⥫쭮
           㣨 ன ⮡ࠦ.
             ᫥ 襭  ᢮  ࠡ,  TSR  ந ⪠
         믮 蠣   ३  䮭 ࠧ,  ᭮
         祭    ୮ ⨢樨.  TSR  ⠭
         祭 ॣ஢ PSP,  DTA, ⥪  㣨 ॣ஢ ࢠ
         ணࠬ. ᫥ ⮣,  TSR   蠣,   -
         ᭮ ⠭ ࠩ ࠡ⪨ ᪮ 訡   break
          ⢨   ࢠ ணࠬ.

                   । ᭮ ୮ ⨢樨

              ।᪠,   ந   
         ⨢ TSR. 樨 DOS   ୮ 室묨, ⮬
           TSR  ᥣ  ୮ ⨢஢  뤠 
         ୮ ⨢樨.  ⠫쭮  ஡ 㦤  ࠧ
         "⥪ DOS". 室  㢠 ⭮  ⨬ -
         祭,   ணࠬ,  ᮬ,  ࠧ ⥬ ,
         , , ࠧ .
              ꥬ ஢ப,      믮  

                                      - 4-40 -
         TSR,  ਢ   ⨭ 4-27.   ணࠬ ।祭 
         믮  饭 뢠.    ⢥砥 
         뢠,   頥 뢠.    ,  ணࠬ
         㦨 뢠    ࠧ  뢠  ।  맮
         DOSSafeCheck,     ࠧ 㫨஢ 䫠
         뢠.
              ணࠬ 稭  㢥祭 祭 ⮣  ᠬ
         䫠 BusyFlag (䫠 ""),  ᯮ㥬   ண-
         ࠬ  ᪮  /  (⨭ 4-23 " 饭 ணࠬ
         ISR ᪮ /").  䫠  砫쭮 祭 -1. -
           INC  DOSSafeCheck  㫥 १,  -
          믮 ᭮.  㫥 १ 砥, 
         믮      ᪮ 権 ( 筮 ,
         뢠 int 13h 믮  १ 뢠 int 25h 
         int 26h),  襭 ।騩 맮 TSR.   ४-
          ⥪ 믮 ணࠬ ୮ ⨢樨,   TSR  
          ୮ 室. ( ᫥⥫쭮 ୮
         ⨢樨 㤥 ᠭ  ஡).
             ⥬  ணࠬ ஢  䫠  ᪮  ᥪ樨  
         ᪮  뢠.  ⨬,   室 ஢ 
         䫠. । 砫 ࠡ⪨ ᪮ 訡 ࠩ -
         ᪮  訡 DOS 㬥蠥 祭 䫠 ᪮ ᥪ樨 
         㢥稢 祭 䫠 ᪮ 訡.  䥪⮬
         맮 ⮩ ணࠬ  ,   ।࠭ TSR 
         ୮ 室.  । ⥬,  TSR ४  䮭 ࠧ-
         ,    㬥 祭 䫠 "" (BusyFlag).

           ⨭ 4-27. । "᭮" ୮ ⨢樨
         ----------------------------------------------------------------

         BusyFlag:   DB    -1          ; 䫠 ""
         CSectFlg    DW    0,0         ;   樠樨 -
                                       ;   䫠 ᪮
                                       ; ᥪ樨
         CErrFlg     DW    0,0         ;   樠樨 -
                                       ;   䫠 ᪮
                                       ; 訡
         DOSSafe     PROC  NEAR
         DOSNotSafe:
                     stc               ;;; ,  "᭮"
                     ret               ;;;  
         DOSSafeCheck:
                     inc   cs:BusyFlag ;;; ⪠  ஢
                     jg    DOSNotSafe  ;;; ᫨  --  
                                       ;;; 㦥  ஢
                     pushr <ds,si,ax>  ;;; ࠭, ..   -
                                       ;;;   INDosFlag
                     lds   si,DWORD PTR cs:CSectFlg ;;; ds:si <== 
                                       ;;; 䫠 ᪮ ᥪ樨
                     lodsb             ;;; al <== 祭 䫠 -
                                       ;;; ᪮ ᥪ樨
                     lds   si,DWORD PTR cs:CErrFlg ;;; ds:si <== 
                                       ;;; 䫠 ᪮ 訡
                     or    al,BYTE PTR [si] ;;; ᫥ 㫥
                                       ;;; 䫠 ᪮ 訡
                     popr  <ax,si,ds>
                     jnz   DOSNotSafe  ;;; ᫨  0,   -

                                      - 4-41 -
                                       ;;;  訡,  int 21
                     clc               ;;; ,  "᭮"
                     ret               ;;;  
         DOSSafe     ENDP
         ----------------------------------------------------------------

                     ४祭 ⥪  ࠭ ॣ஢

             ⥪   ⠢   ।  ணࠬ.  
           ୠ  ⨢ ந室  १ 뢠,  
         ᯮᮡ । ᯮ㥬 ⥪  㯭  ࠭-
         ⢠ ⥪ . ⥪, ᯮ㥬 ᯥ஬ 뢠
         int 21h,  筮 訥,  ⮡ ࠧ 祭  -
         ஢ .  ࢠ ணࠬ ⠪  
          ᯮ짮 ⠢  ⥪,      
         ᬮ  믮  BIOS.  ᯥ BIOS ࠭  -
           ⥪饬 ⥪.
             । ୮ ⨢樥 TSR,  ணࠬ ISR   -
             ॣ   ४   ⥪ TSR.  㬭
         ࠭ ॣ  ⮬ ⥪,   ᯮ짮    
          뢠.  祭 ⥪  ॣ஢ 
            ⮣  ⥪ ணࠬ,   ⥪  
         室 ࠭⢮   祭.

                 ࣠ "襪" break   ᪨ 訡

             騩 蠣  ᫥⥫쭮 ⨢樨 易  -
          ଠ樨 ﭨ,   DOS ᠫ ⭮⥫쭮 -
         饩 ணࠬ.   ⮩ 窥  TSR ⥯ ⠭ ⥪饩
         ணࠬ.    ᪨ 訡  ᪨ break 
          ⥪ ணࠬ, 室  㢥७  ⮬, 
           稫  蠭   ⭮  諨 ᯮᮡ   ᤥ-
         .  ⠭ ᢮ ᮡ⢥ ࠩ஢ ᪮ 訡 
         break   TSR  ⭮  ⠪   室
            ᯮᮡ.
              裡    ⢨  ᯮᮡ ।  ணࠬ ISR
         ⥪饩 ணࠬ । ,  ⠭ ࠩ஢ -
          訡    break    ਥ ணࠬ஢.
         ᫨  樨 室 IVT ᯮ int 21,  -
          ।    祭 訡 break .   
         ᯮᮡ  ᯮᮡ 樨 室 IVT ।⢥.
         ⨬,  室  break ,  ந -
          室 ⠡.         祢,  㣨
         ணࠬ  ࢠ  ணࠬ  । 믮 -
         ,   ஢ 室 IVT,  묨  ࠡ⠥-
         .  믮  , 뢠 ⨭ 4-28.
             ⢨,   믮      ⠭
         ࠩ break  ᪮ 訡,    TSR.   
          ந஢,  ,  筮,  ணࠬ   
         ᪮ 訡  믮 - ⢨. ᫨ TSR
             ᡮ묨 ᠬ int 21h (ࠪ᪨,  -
         室  ஢  १ 믮    
         ⮢    訡),   ⥩訬 ᯮᮡ ࠡ⪨
           ⪠   맮.     ६  㣨 ᯮᮡ
         ࠡ⪨. ਬ, ᫨ ந襫 ᡮ ᪠  裡  ⥬, 
         뫠   ⥫,   室  ᮮ-
            .

                                      - 4-42 -
            ⨭ 4-28. "誠" ᪨ 訡  break   ISR
         ----------------------------------------------------------------

         IVT         SEGMENT AT 00h     ; ⬥ ᮫ 
                     ORG     23h*4      ;   ⨬ ⭮⥫쭮
                                        ; 0 - 22h
         IVT23       DW      0,0        ; 室 뫮  int 23h 
         IVT24       DW      0,0        ; int 24h
         IVT         ENDS
         _text       SEGMENT BYTE PUBLIC 'code'
         OldInt23    DW      0,0        ;   㤥 ࠭ -
         OldInt24    DW      0,0        ;  ᪮ 訡  -
                                        ; 
                     ASSUME  ds:_text
         BKGNewErrHndlr PROC NEAR
                     pushr   <ax,di,si,ds,es>  ; ࠭  -
                                        ;  ॣ஢
                     cld                ; 뢮 䫠 ࠢ  -
                                        ; ⭮ ﭨ  movsw 
                                        ; stosw
                     mov     ax,cs      ; es 㪠뢠  ᥣ, ᮤ-
                     mov     es,ax      ; 騩 OldInt23
                     xor     ax,ax      ; ds 㪠뢠
                     mov     ds,ax      ;  IVT
                     ASSUME  ds:IVT,es:_text ; ᮮ MASM,  
                     mov     si,OFFSET IVT23 ; ⠭  IVT
                     mov     di,OFFSET OldInt23 ; 室  movsw
                     mov     cx,4       ;  室 2 ᫮
                     cli                ;      !!!
                     rep     movsw      ;;; ஢ ⥪ 室
                                        ;;; ivt
                     mov     es,ax      ;;; es ⥯ 㪠뢠  IVT
                     ASSUME  es:IVT     ;;; ᮮ MASM  
                     mov     ax,OFFSET NewInt23 ;;;   祭
                     stosw              ;;;  IVT
                     mov     ax,cs
                     stosw
                     mov     ax,OFFSET NewInt24
                     stosw
                     mov     ax,cs
                     stosw
                     sti
                     popr    <es,ds,si,di,ax>
                     ASSUME  ds:_text
                     ret
         BKGNewErrHndlr      ENDP
         NewInt23    PROC    FAR        ;  ࠡ稪 break
                     iret               ; ஢ break
         NewInt23    ENDP
         NewInt24    PROC    NEAR       ;  ࠡ稪 ᪮
                                        ; 訡
                     iret               ; ⭮  믮 -
                                        ; - ⢨ ⭮⥫쭮
                                        ; 訡 (  ⪠ 맮)
         NewInt24    ENDP
         _text       ENDS
         ----------------------------------------------------------------

                                      - 4-43 -

                         饭   ६

              ,    TSR,  ⠭  DTA  ⠭
         ⥪饩 ணࠬ, 㤥 뢠 ⥪騥 DTA  PSP.  DTA
            ⥪饣 PSP 뢠   ६ DOS. 
         ६   ।⢥,   ࠧ饭 -
            ᨬ  ᨨ DOS.  祭  -
           DTA   ⥪饣 PSP   㦥 㭪樨
         BIOS.  ⮬  ᫥⥫쭮 ୮ ⨢樨 -
          ।,  ᭮     BIOS    
         ᥡ  break  ᪨ 訡.  ᯮ짮   楫
         㦥 㭪権 BIOS        
         ६  ⭮ ᨨ DOS.

                  ⨭ 4-29. 饭   ६
         ----------------------------------------------------------------

         BKGDTA    DB   80h DUP(0) ;  ࠧ DTA
         BKGPSP    DW   0          ; ணࠬ 樠樨 
                                   ;  祭 PSP
         DOSPSP    DW   0          ;   㤥 ࠭ PSP  DTA
         DOSDTA    DW   0,0        ; ࢠ ணࠬ
         BKGSetPSP PROC NEAR
                   pushr <ax,bx>   ; ࠭ 塞 ॣ஢
                   mov  ah,62h     ;  DOS  ⥪饬 PSP
                   int  21h
                   mov  DOSPSP,bx  ; ࠭ ⥪饣 PSP
                   mov  ah,50h     ; ᮮ饭 DOS  ᯮ짮 -
                                   ;  PSP
                   mov  bx,BKGPSP
                   int  21h        ; 㬥஢
                   por  <bx,ax>
                   ret
         BKGSetPSP ENDP
         BKGSetDTA PROC NEAR
                   pushr <ax,bx,dx,es>
                   mov  ah,2Fh
                   int  21h
                   mov  DOSDTA,bx  ;   DTA
                   mov  DOSDTA+2,es
                   lea  dx,BKGDTA  ; ds:dx <==  DTA
                   mov  ah,1ah
                   int  21h
                   popr <es,dx,bx,ax>
                   ret
         BKGSetDTA ENDP
         ----------------------------------------------------------------

                ࠡ⪠  ᯮ짮 뢠 int 28h

             쭮   祭 TSR  䮭 ࠡ⪠.
           㬥஢,   ⮬ 筮
         ⭮.   ࠢ쭮 ᯮ짮,   믮 㣠
         ணࠬ,TSR  믮   BIOS. ணࠬ PRINT.COM

                                      - 4-44 -
         ᯮ    ⥭  䠩.  ⥬ -
         ⮢ ⥪⮢  ᯮ짮    ࠭
         䠩  ࠫ쭮  ।஢ । ,   ।⢮
          ஭ ⠡  䮭 ࠡ⪥   믮
          ᫥.
             DOS ᯥ稢   ணࠬ    "楯",
            ᯮ짮  室 쭮  ࠡ.
          "楯"  䮭 ࠡ⪨   ணࠬ  ISR
         ᪮ ᥪ樨,  ᪮ 訡  int 28h. 쭮 
         ணࠬ  ६ 室      ଠ樨.
         ⥬ 墠 뢠 int 28h TSR  ᯮ짮  ᢮
         楫 横 業ࠫ쭮 ,      ⨫
            ଠ樨.   裡  ⥬,   
         ⠪  ᯮ짮  㣨 ணࠬ TSR,   ISR 뢠-
          int 28h,   믮,  ࠧ뢠 楯 
         ।饩 ISR.
             ISR 뢠 int 28 ᪠ TSR ⮫쪮  ⮬ 砥, ᫨
         ਪ ணࠬ ।  ᯮ 㭪  DOS  /
         ᨬ. TSR,  㦤  䮭 ࠡ, 筮 "墠-
         뢠", ஬ ⮣,    뢠 ⠩. ISR ⠩
         ᯥ稢 TSR      ⮬ 砥, ᫨ -
         ⭠ ਪ ணࠬ  ணࠬ  ⥭ᨢ묨
         ᫥ﬨ,   ᯮ 㭪樨 / ᨬ.
             ᠭ ISR int 28h  筮  .  -
           ISR ᭠砫 뢠  ISR  ⥬ 㢥稢 祭
         ⮣  ᠬ 䫠 BusyFlag (䫠  ""),  ᯮ㥬
         ணࠬ ISR 뢠 int 8, int 9  ᪮ /. ᫨ -
           㫥,   믮  뢠 㭪-
         樨.        ISR   ࠢ ⮫쪮 ⮣,
             ᥭ,  㢥祭  ᥣ ࠡ-
         뢠 㫥 १.   , 室  ⮢ 
         㦤  뢠 int 28h.  ᫥ ୮ ⨢樨 TSR
         ணࠬ ISR 㬥蠥 祭 䫠 BusyFlag  頥 -
         ࠢ  DOS.  ⨬,    㦭 믮 ஢ 䫠
         ᪮ 訡:  ᪮ 믮  int 21h,   
         ,    ⠭;    ᥣ ࠭  -
          ᮢ int 21h,   㭪樨   祭
         0ch.   ।࠭ TSR  ୮  ⨢樨    ⨨
         祣       뢠 ⠩ 室 㢥
         祭 䫠 BusyFlag.

            ⨭ 4-30. ணࠬ 㦨 뢠 int 28h
         ----------------------------------------------------------------

         OldInt28   DD                ;  ணࠬ 樠樨 -
                                      ; 뢠  ன ISR
         BusyFlag   DB                ;  ॥ࠡ ᥪ権
                                      ; ணࠬ
         Int28ISR   PROC
         Int28Exit0:
                    dec  cs:BusyFlag  ; ᢮ 襩 ஢ 
                    iret              ; 
         NewInt28:
                    pushf             ;  뢠
                    call cs:OldInt28  ; ᯥ஢ ਣ쭮
                                      ; ணࠬ
                    inc  cs:BusyFlag  ; ⪠  ஢

                                      - 4-45 -
                    jg   Int28Exit0   ; ᫨  --  뢠
                    call BKGResume    ; ᯥ஢ 䮭 
                    dec  cs:BusyFlag  ; ⨥ ஢
                    iret              ;  
         Int28ISR   ENDP
         ----------------------------------------------------------------

              ୮ ⨢樨 TSR 쭮 : ࠭ 
         ॣ    ⥪饬  ⥪    ४   ⥪ TSR.
         設⢮ 䮭 TSR 믮 ⪮ ६  ⥬  -
           ᠬ  ᥡ  ﭨ .  筮  ࠭ -
            ᢮ ᮡ⢥ ⥪   ࠢ  -
         ࢠ  ணࠬ.         ᫥⥫쭮  ୮
         ⨢樨 ⠭  ॣ,  ࠭  ⥪  TSR,
           ॢ  ﭨ .
             ணࠬ PRINT.COM    ६  믮 ᫥⥫쭮
         ⢨   ᢮  ୮  ⨢樨,  㢥稢  祭
         䫠 ᪮ ᥪ樨.  ⨫ 믮 쭮 -
          ⢨.   室 DOS  ।⢥ 뢠 ࠩ
         ன⢠ . ⭮, 㢥祭 祭 䫠 -
          ᥪ樨 ࠭ ஡  ୮ 室  ࠩ-
          ன⢠.  ᫨  TSR ⢫ ।⢥  -
           ࠩ, ,   ᥩ ,  祭  ࠦ
         ⢨ ணࠬ PRINT.COM.
             , ⠭ ᢮ ᮡ⢥ ࠩ 뢠  -
         ᪮ 訡, ᤥ ⥪騬 PSP  襩 TSR,  ४-
            DTA.   TSR,  ன 뫠 ࠭ ᫥ -
         ணࠬ, ন  ⨢ 祣 , ⠪  -
          䮭 ࠡ⪨.  ᫨ ୠ ⨢ 믮  
         ⢥  ⨥ 祣 ,  室 ࠭ ᮤন-
          ⥪饣 ࠦ  ࠭ ᯫ  몫   ࠡ
          ०饣   ଠ樨  .   ᤥ
         ।  ⮬,      ०饣 -
          ଠ樨       뫨   ।饩 ⥪饩
         ணࠬ   ⮫쪮 ⠭   ⨢ TSR. -
           ࠢ । ࠢ TSR.  -
          ࠡ TSR 㤥 뢠 ணࠬ BKGSuspend  (ॢ 
         ﭨ   䮭 ࠡ).
             , ᯥ稢騥 ,   ࠭. TSR, ᯮ-
           , ਮ᪨ 뢠 BKGSuspend.  ।-
          ᫮ BKGSuspend ࠢ TSR   ,   㣨
           祣  . 짮⥫   ⨢-
         ஢  TSR    ⥬  祣 .  ᫨
         TSR,  믮    ।  ,  뢠  ணࠬ
         BKGSuspend,   ணࠬ ஢  ०饣 -
          ଠ樨    稥 ᮡ    (BGCombo),
         ⨥ ன ࠢ    .  ᫨   ⮩
          ,  ணࠬ BKGSuspend    -
         ⠭.  ᫨  BGCombo   㦥,   ᫨ 
         騩  TSR 믮   ,   -
           ⨢.
             ਮ⠭ 믮  蠣, 筮 ⨢樨,  
         ⭮ 浪.  ணࠬ BKGSuspend ⠭ -
          DTA  PSP, ⠭ ࠩ 뢠  -
           訡,  ࠭  ⥪騥 ॣ,  ⠭ ࠭
         (SCRBackground),  㬥蠥 祭 䫠  ᪮  ᥪ樨,
         ४砥 ⥪,  ⠭  ॣ  

                                      - 4-46 -
         ६  PGMState.    RET         ணࠬ
         BKGSuspend 頥 ࠢ  ISR,  ⨢ TSR.
         ᫨  TSR  믮﫠         ,      ணࠬ
         SCRBackground  믮 ४祭 ࠭.

                    ⨭ 4-31. ॢ  ﭨ 
                              ࠡ TSR
         ----------------------------------------------------------------

         SuspendResume      PROC    NEAR
         AltF10      EQU    113           ; ७  ASCII 
                                          ;  ALT F10
         BGCombo     EQU    AltF10 SHL 8  ; LSB ७ ASCII=0
         BKG_C_FG    EQU    1
         BKG_C_BG    EQU    2
         SaveStack   STRUC
         rSP         DW     0
         rSS         DW     0
         SaveStack   ENDS
         switch      MACRO  sstack,dstack ;; ४祭 ⥪
                     cli                  ;; 饭 뢠 
                                          ;; ६ ४祭 ⥪
                     mov    sstack.rSS,SS ;;  ⥪饣 ⥪
                     mov    sstack.rSP,SP
                     mov    SS,dstack.rSS ;; ⠭  ⥪
                     mov    SP,dstack.rSP
                     sti                  ;; ࠧ襭 뢠
                     ENDM
         _text       SEGMENT BYTE PUBLIC 'code'
         PgmState    DB     0             ; ࠭ ஦ ﭨ
                                          ; ணࠬ
         InDosFlag   DD     0             ;  ணࠬ 樠樨
                                          ; ࠭  䫠 -
                                          ; ᪮ ᥪ樨
         OldStack    SaveStack <>         ; ⥪ ࢠ ணࠬ
         BKGStack    SaveStack <>         ; ⥪ TSR. ⠭
                                          ; ணࠬ 樠樨
         BKGResume:
                     call   BKGSaveAll    ; ࠭  ॣ஢ 
                                          ; ⥪饬 ⥪
                     cld                  ; 䫠 砫쭮 ࠢ
                     mov    ax,cs
                     mov    ds,ax         ; ds <== ணࠬ ᥣ
                     switch OldStack,BKGStack ; ४祭  ⥪
                                          ;  
                     call   BKGRestoreAll ; ⠭ ॣ஢
                                          ;  
                     pushr  <es,di>
                     les    di,InDosFlag  ; es:di <== 䫠 室  DOS
                     inc    BYTE PTR es:[di] ; ⠭ 䫠 室 
                                          ; DOS
                     popr   <di,es>
                     call   BKGNewErrHndlr ; ⠭ ᢮ ᮡ⢥
                                           ; ࠩ஢ ᪮ 訡-
                                           ;   뢠
                     call   BKGSetPSP      ;  PSP
                     call   BKGSetDTA      ;  DTA

                                      - 4-47 -
                     cli
                     cmp    PopupPending,0 ;;;  popup?
                     jz     _br0           ;;; ᫨ 0 -- 
                     dec    PopupPending   ;;; 㬥襭  1
                     mov    PgmState,BKG_C_FG ;;; ॢ ணࠬ 
                                           ;;; । 
                     call   SCRForeground  ;;; ॢ ࠭
                     call   BKGBufFlush    ;;; 몫祭  -
                                           ;;; 
         _br0:       sti
                     ret
         BKGSuspend:
                     cmp    PgmState,BKG_C_FG ; 믮  ।
                                              ; ?
                     jl     _bs0              ; ᫨  -- 
                                              ; 
                     jg     _bs2              ; ᫨  -- 樠-
                                              ;  (஢
                                              ; ਮ⠭)
         ;
         ; 饥 믮  । . ஢ઠ 
         ;                           
         ;
                     push   ax             ; ࠭ ⥪饣 -
                                           ;  ax
                     xor    ah,ah          ; ah <== 1 (஢ઠ ﭨ
                     inc    ah
                     int    16h            ; 뤠 
                     jz     _bs1           ; ᫨ 0 --  㯭
                                           ; ᨬ
                     cmp    ax,BKCombo     ;  ᨬ  ?
                     jnz    _bs1           ; ᫨  0 -- 
                     xor    ah,ah          ; ah <== 0 ( ⥭)
                     int    16h            ; 㤠 ᨬ  
                     pop    ax             ; ⠭ ax
         ;
         ; 믮      ਮ⠭.
         ;
         _bs0:       call   BKGRestoreDTA  ; ⠭ DTA
                     call   BKGRestorePSP  ; ⠭ PSP
                     call   BKGRestoreErrHndlr ; ⠭ 
                                           ; ࠩ஢ ᪮ 訡-
                                           ;   뢠
                     call   SCRBackground  ; ⠭ ࠭
                     call   BKGSaveAll     ; ࠭ ॣ஢ -
                                           ;  
                     les    di,InDosFlag   ; es:di <==  室  DOS
                     dec    BYTE PTR es:[di] ; 㬥襭 䫠 室 
                                           ; DOS
                     switch BKGStack,OldStack ;  ⥪
                     call   BKGRestoreAll  ; ⠭ ॣ஢
                     mov    cs:PgmState,BKG_C_BG ; ணࠬ  
                                           ; 
                     ret                   ; 
         _bs1:       pop    ax             ; ⠭ 砫쭮
                                           ; 祭 ax
         _bs2:       ret                   ; 

                                      - 4-48 -
         SuspendResume      ENDP
         _text              ENDS
         ----------------------------------------------------------------


                               TSR  

              裡  ࠭祭 ࠧ஬ 䨧᪮   ᮭ-
                室 㤠 TSR 
         ,   ⠭ 㦭.  㤠 TSR  
          ।⠢ 讣 㤠, ,   ஡-
         .  祭  TSR 墠뢠  뢠  । ᢮-
           室 ⠭  .
              樠樨 TSR     砫쭮  ᮤন
         ஢,   㤥    ᢮ ࠡ. -
           㣠 TSR,  㦠 ᫥ 墠  -
         ஢,     ⠭   뢠   ࢮ-
         砫  祭    ᢮  ,    TSR.  ᫨
         騥      뢠    㪠뢠  
         ணࠬ,     ⢥ত ⮣,  -
          ணࠬ TSR  墠⨫ . , ⨬,   TSR -
           뢠 ᮢ⭮  㣮 TSR,  -
           ᫥  .  ,    TSR    ᠭ
         ࢮ砫쭮 ᮤন   ⠢ 室 IVT,  㪠-
         騩  ᢮ ᮡ⢥ ணࠬ.  騩 室 IVT 㪠-
         뢠  TSR, 㦥 ᫥,    -
            ࢮ TSR.  ࢠ TSR,  ᢮ ।, 
          ࠭   室 ISR.
             ᫨ ⥪騩  室  IVT 頥 ࠭ 祭,  
         ⥬ ᠬ  楯窨 ISR 䥪⨢ 㤠  㣠  TSR.  ᫨
          TSR    ⮫쪮   ⮣ ⢥-
          ,   ,   , 㤥   .  ᫨
           TSR     室  ⠥   -
           ࠭  뢠,   , 
          뫪 㤥 㪠뢠    .
               襭 ⮩  ஡    ࠧࠡ⪠
         TSR,    ࠢ 㣨 TSR.   ॢ室 
         饣 祭  Mark/Release  (⬥/᢮),   
         㯥   ଠ樮 筨.TSR Mark (⬥),
         믮塞 । 㣨 ணࠬ, 㦠   
         IVT,    ⠪  뢠  ⥪饥 ﭨ .  㣨 TSR
         짮⥫ 㦠      室.  믮  TSR
         Release  (᢮) ⠭   ⠡ IVT -
         ﬨ, ᠭ묨   ணࠬ Mark.  
         맮 ணࠬ Mark.
             ணࠬ Mark/Release ࠡ  設⢥,     
         .  १ IVT  . ᫨ TSR  -
             DOS,  ᫥ 㤠 TSR  -
             ⠪  ⠭ .

                                    祭

              ⮩  뫨 ᠭ 孨᪨ ਥ  ᠭ  १-
          ணࠬ TSR.   뫨 ਢ ᭥,  -
          믮  祬 ᫥ 믮   ⢨.  ᬮ-
         ७  孨᪨  ਥ  ⢮ 㣨 ਫ.  
           ᯮ짮        䮭  ࠭  

                                      - 4-49 -
         ⥬  ⮢ ⥪⮢  䮭 ᫥  ।⢥ -
          ஭ ⠡. ஬ ⮣,   ॠ 
           㭪樨    䮭 ணࠬ TSR.  ࠣ ணࠬ,
         ।⠢  ⮩ ,   訬 砫  -
           쥧 TSR.


