vit$oft freeware home page
; Stuff
; STUFF.COM is TSR program which only occupies conventional memory.
; This may come in useful for testing other DOS programs in stressed
; memory conditions.
;
; STUFF.COM je residentní program, který nic nedělá, neobsazuje žádné
;vektory přerušení a také horké klávesy jej nechávají chladným.Jediné, co umí,
;je zabírat paměť, což se může hodit recenzentům nebo autorům programů pro
;otestování, jak se jejich výtvory chovají ve stísněných podmínkách.
;
; Jako parametr programu STUFF se zadává velikost konvenční paměti
;v kilobytech, která má zůstat volná. Po vyzkoušení chování testované aplikace
;v takto omezeném prostoru se novým zadáním příkazu STUFF paměť uvolní
;(tentokrát jsou případné parametry ignorovány). Minimální množství paměti,
;které musíme nechat volné, je závislé na verzi operačního systému :
;
; MS-DOS<3.3 ... 20 KB
; MS-DOS 4.0 ... 28 KB
; MS-DOS>5.0 ... 45 KB
;
;V menším prostoru by se nerozeběhl COMMAND.COM a počítač by ztuhl.
;
;Program vrací následující návratové kódy :
;
; Wrong param (parametr nebyl zadán nebo je mimo rozsah)..... ErrorLevel=8
; Installed (STUFF byl úspěšně nainstalován) .............. ErrorLevel=4
; Uninstalled (STUFF byl odinstalován) ...................... ErrorLevel=0
;
; mailto:Pavel.Srubar@post.cz
;*************************************************************************;
; STUFF (public domain by vit$oft 1993) ;
;*************************************************************************;
; Make with TASM STUFF.ASM & TLINK /t STUFF
;
IDEAL
MODEL TINY ; TASM STUFF & TLINK /t STUFF
SEGMENT COM
ASSUME CS:COM, DS:COM, ES:COM, SS:COM
ORG 256
Start: JMP Main
Language EQU Czech ; this statement should be omitted
; for English version
$CR EQU 0Dh
$LF EQU 0Ah
FreeKB DW ?
Identificator DB '?stuff'
MaximalFreeKB DW ?
MinimalFreeKB DW 45
PspEnvSeg EQU 2Ch
PspMemTop EQU 02h
PspParameter EQU 80h
Space EQU 20h
StuffedKB DW ?
IFNDEF Language
Msg1 DB 'Please enter how many KB of conventional memory',$CR,$LF
DB 'you want to be left free ($'
Msg2 DB ' .. $'
Msg3 DB '),',$CR,$LF,'e.g. STUFF 128 if you intend to run your PC',$CR,$LF
DB 'within only 128 KB of free memory.',$CR,$LF,'$'
Msg4 DB ' KB stuffed,',$CR,$LF,'$'
Msg5 DB ' KB is now left free.',$CR,$LF
DB 'Run STUFF again to release stuffed memory.',$CR,$LF,'$'
Msg6 DB 'Stuffed memory was released.',$CR,$LF,'$'
ELSE
Msg1 DB 'Zadejte velikost konvenční paměti v KB,',$CR,$LF
DB 'kterou chcete ponechat jako volnou ($'
Msg2 DB ' .. $'
Msg3 DB '),',$CR,$LF,'např. zadejte STUFF 128 , pokud chcete vyzkoušet',$CR,$LF
DB 'chování počítače s pouhými 128 KB volné paměti.',$CR,$LF,'$'
Msg4 DB ' KB zabráno,',$CR,$LF,'$'
Msg5 DB ' KB je nyní volných.',$CR,$LF
DB 'Spusťte STUFF znovu pro uvolnění zabrané paměti.',$CR,$LF,'$'
Msg6 DB 'Zabraná paměť byla nyní uvolněna.',$CR,$LF,'$'
ENDIF
MACRO Dealloc ES
MOV AH,49h
INT 21h
ENDM Dealloc
MACRO WriteNr Number
MOV CX,&Number
CALL WriteNrProc
ENDM WriteNr
MACRO WriteMsg Nr
LEA DX,[Msg&Nr]
MOV AH,09h
INT 21h
ENDM WriteMsg
MACRO Terminate ErrLevel
MOV AX,&ErrLevel + 4C00h
INT 21h
ENDM Terminate
MACRO TerminateStayResident ErrLevel
MOV DX,[PspMemTop]
MOV AX,DS
SUB DX,AX
MOV AX,[FreeKB]
MOV CL,6
SHL AX,CL
SUB DX,AX
MOV AX,&ErrLevel + 3100h
INT 21h
ENDM TerminateStayResident
Main:
CALL IsInstalled?
JE M2
CALL GetParameter
JNC M1
WriteMsg 1
WriteNr [MinimalFreeKB]
WriteMsg 2
WriteNr [MaximalFreeKB]
WriteMsg 3
Terminate 8
M1: WriteNr [StuffedKB]
WriteMsg 4
WriteNr [FreeKB]
WriteMsg 5
TerminateStayResident 4
M2: CALL UnInstall
WriteMsg 6
Terminate 0
IsInstalled?:
MOV [Identificator],'!'
LEA DX,[Identificator]
MOV BP,SIZE Identificator
MOV BX,CS
MOV AX,BX
CLD
I1: DEC AX
CMP AX,BX
JNB I2
MOV ES,AX
MOV SI,DX
MOV DI,DX
MOV CX,BP
REPE CMPSB
JNE I1
I2: RET
GetParameter:
MOV AH,30h
INT 21h
DosVersion EQU AL
CMP DosVersion,4
JA G0
MOV [MinimalFreeKB],28
JE G0
MOV [MinimalFreeKB],20
G0: MOV AX,[PspMemTop]
MOV BX,DS
SUB AX,BX
MOV CL,6
SHR AX,CL
MOV [MaximalFreeKB],AX
SUB AX,AX
SUB BX,BX
MOV CL,10
LEA SI,[PspParameter]
LODSB
TEST AL,AL
JZ G4
G1: LODSB
CMP AL,Space
JE G1
G2: SUB AL,'0'
JB G3
CMP AL,9
JA G3
XCHG AX,BX
MUL CX
JC G4
XCHG BX,AX
ADD BX,AX
JC G4
LODSB
JMP G2
G3: MOV [FreeKB],BX
MOV AX,[MaximalFreeKB]
INC AX
SUB AX,BX
MOV [StuffedKB],AX
JBE G4
CMP BX,[MinimalFreeKB]
JNB G5
G4: STC
G5: RET
UnInstall:
MOV [ES:Identificator],'X'
Dealloc ES
MOV ES,[ES:PspEnvSeg]
Dealloc ES
RET
WriteNrProc:
MOV BX,100
CALL W1
MOV BL,10
CALL W1
MOV AL,CL
JMP SHORT W2
W1: MOV AX,CX
DIV BL
MOV CL,AH
SUB CH,CH
ADD BH,AL
JZ W3
W2: ADD AL,'0'
MOV DL,AL
MOV AH,2
INT 21h
W3: RET
ENDS COM
END Start