home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
assemblr
/
library
/
sampler0
/
noboot.asm
< prev
next >
Wrap
Assembly Source File
|
1986-03-03
|
7KB
|
169 lines
page 64,132
title NOBOOT - disables <Ctrl><Alt><Del> reset sequence
subttl Steve Harrison Systems n Software
;
;
comment *
Documentation for NOBOOT:
--------------------------
This program disables the <Ctrl><Alt><Del> keyboard reset
sequence. Once this program is installed, the only way to
reboot the system is to turn the power off and then back
on.
This program is adapted from Personal Computer Age
magazine Volume 2.4, pp 17-21. The original version
referenced absolute addresses in ROM, which limits
portability to other machines or even to an XT.
This version overcomes these restrictions, but adds
the requirement that DOS 2.0 or greater be used.
This program will not work with DOS 1.0 or 1.1.
By necessity, one reference to an absolute memory
address is made -- to KB_FLAG at 0040:0017h. If your
machine uses a different address, change the one line
noted below to suit your machine.
This program need be run only once. Although running it
multiple times will cause no real harm, it could slow
things down a bit. In the interest of simplicity, no
attempt is made to determine whether or not the "filter"
is already installed -- it blindly installs itself as
many times as you tell it to. It is suggested that you
execute this program from your AUTOEXEC.BAT file.
Every time a key is pressed or released, the resident
portion of this program checks to see if the <Ctrl> and
<Alt> keys are both depressed. If they are, it tells BIOS
that they are not. In effect, it "filters out" this
key sequence. This means that any program that
requires you to make a keyboard entry like
<Ctrl><Alt><anything else>
will no longer function because the system will be fooled
into thinking that the <Ctrl> and <Alt> keys are not
depressed.
There is one known analomy [that's a nice way of saying "bug"]
in this program. Consider the case where the user depresses
both the <Ctrl> and the <Alt> keys and then releases the
<Ctrl> key, leaving only the <Alt> key depressed. Normally,
the ALT_SHIFT bit in KB_FLAG would be on. With this program
installed, it will be off. This means that the user must
release the <Alt> key and depress it AGAIN before it will
be recognized by the system. A similar situation occurs
for releasing the <Alt> key while leaving the <Ctrl> key
depressed. This analomy can be corrected with a bit of
creative programming but is not dealt with here in the
interest of simplicity.
Feel free to modify, mutilate, or adulterate this program.
If you come up with an bug or improvement, please let me
know by writing me at this address:
Steve Harrison
3203 McKinley St.
San Diego, Ca 92104
*
subttl Equates
page
;
;
; Equates
;
;
cr equ 0dh ;ASCII carriage return
lf equ 0ah ;ASCII line feed
dollar equ '$' ;ASCII dollar sign - string terminator
alt_shift equ 08h ;bit of kb_flag that means <Alt> key pressed
ctl_shift equ 04h ;bit of kb_flag that means <Ctrl> key pressed
alloff equ 0ffh-alt_shift-ctl_shift ;kb_flag with <Ctrl> and <Alt> bits off
subttl Segment declarations
page
;
;
; Segment declarations
;
;
biosseg segment at 40h
org $+17h ;KB_FLAG is at 0040:0017 for the PC
kb_flag label byte ;*** change as appropriate for your machine ***
biosseg ends
;
;
cseg segment para public 'code'
assume cs:cseg, ds:cseg, ss:nothing, es:cseg
org 100h ;for .COM file
entry label far
jmp short start ;jump to install routine
oldoff dw ? ;offset of old INT 9h handler
oldseg dw ? ;segment of old INT 9h handler
subttl Int 9h resident filter routine
page
;
;
; Int 9h resident <Ctrl><Alt> filter
;
;
filter proc far ;
push ax ;save regs
push ds ;
mov ax,0040h ;point to BIOS data area
mov ds,ax ;with our DS reg
assume ds:biosseg
test kb_flag,ctl_shift ;is <Ctrl> bit on?
jz done ;if not, nothing to do
test kb_flag,alt_shift ;else <Ctrl> bit is on -- is <Alt>?
jz done ;if not, nothing to do
and kb_flag,alloff ;else turn off <Ctrl><Alt> bits
done label near
pop ds ;restore regs
pop ax ;
jmp dword ptr cs:oldoff ;and jump to old INT 9h handler
filter endp
last equ $+1 ;first byte available for next program
;
;
; Messages
;
;
errmsg db 'NOBOOT: Incorrect DOS version.', cr, lf, dollar
okmsg db 'NOBOOT: <Ctrl><Alt><Del> reset disabled.', cr, lf, dollar
subttl Installation routine
page
;
;
; Installation routine
;
;
install proc far
start label near
assume ds:cseg
mov ah,30h ;set code = get DOS version number
int 21h ;on to DOS
cmp al,0 ;is it pre-DOS 2.0?
jne dosok ;if not, continue
lea dx,errmsg ;else tell user
mov ah,9h ;set code = print string
int 21h ;we gotta have DOS 2.x
int 20h ;and die gracefully
dosok label near
mov ax,3509h ;get seg:off of old
int 21h ;INT 9h handler into ES:BX
mov oldseg,es ;and store
mov oldoff,bx ;for later use
mov dx,offset filter ;point to our INT 9h filter routine
mov ax,2509h ;set vector for INT 9h
int 21h ;on to DOS
lea dx,okmsg ;tell user that we're here
mov ah,9h ;set code = print string
int 21h ;on to DOS
lea dx,last ;point after last of resident code
int 27h ;terminate and stay resident
install endp
;
;
cseg ends
end entry