Category : Files from Magazines
Archive   : ISSUE-31.ZIP
Filename : SPEEDSET.ASM

 
Output of file : SPEEDSET.ASM contained in archive : ISSUE-31.ZIP
title SpeedSet

fast equ 43h ; scan code for f9 key
slow equ 44h ; scan code for f10 key
kb_data equ 60h ; PIO port A - contains scan code
kb_ctl equ 61h ; PIO port B - contains unused bit
; and keyboard acknowledge bit

code segment ; everything goes in code segment
org 100h

assume cs:code

DOS_entry label far
jmp setup

old_int dd ? ; address of interrupt 9 code in ROM

new_int proc far ; beginning of our interrupt handler
sti ; INT 9 turns off interrupts, reenable
push ax ; save registers
push bx
push dx
mov ah,2 ; tell INT 16 to return kb_flag
int 16h ; get kb_flag
and al,00001000b ; mask bits except alt status
cmp al,00001000b ; check alt key status
jne short no_act ; don't act if alt not pressed
in al,kb_data ; get scan code
cmp al,fast ; is it the f9 key?
je short faster ; speed up if it is
cmp al,slow ; is it the f10 key?
je short slower ; slow down if it is

no_act: pop dx ; restore registers
pop bx
pop ax
jmp old_int ; let ROM code do it's thing

done: in al,kb_ctl ; get keyboard status
or al,10000000b ; set keyboard acknowledge bit
out kb_ctl,al ; write it back to port
pop dx ; restore registers
pop bx
pop ax
jmp old_int ; jump to ROM code to finish

faster: in al,kb_ctl ; get value from PIO port B
and al,11110111b ; reset unused bit
out kb_ctl,al ; write it back to port B
jmp short done ; finish

slower: in al,kb_ctl ; get value from PIO port B
or al,00001000b ; set unused bit
out kb_ctl,al ; write it back to port B
jmp short done ; finish

new_int endp ; end of our interrupt

end_res_code:

sign_on db 13,10,18 dup (32),201,42 dup (205),187,13,10
db 18 dup (32),186,' SPEED SWITCH NOW '
db 'INSTALLED ',186,13,10,18 dup (32)
db 186,' Alt F9 ',26,' Slow ',1,' '
db 2,' Alt F10 ',26,' Fast ',186,13,10
db 18 dup (32),200,42 dup (205),188,13,10,'$'

err_msg db 13,10,'SPEED SWITCH ALREADY INSTALLED'
db 13,10,'$'

assume ds:code

setup proc near ; install our routine
; as resident code
mov ax,3509h ; get address of interrupt 9
int 21h
mov ax,es ; segment is returned in es
cmp ax,0f000h ; is this address in ROM?
je short install ; if so, install our code
mov dx,offset err_msg ; if not, write msg
mov ah,9 ; that our code is already
int 21h ; installed
int 20h ; exit to DOS
install:mov dx,offset sign_on ; write sign on msg
mov ah,9
int 21h
mov word ptr old_int,bx ; save ROM address
mov word ptr old_int+2,es ; of interrupt 9
mov dx,offset new_int ; set up new
mov ax,2509h ; interrupt vector
int 21h
mov dx,offset end_res_code ; make our code
int 27h ; resident

setup endp
code ends
end DOS_entry



  3 Responses to “Category : Files from Magazines
Archive   : ISSUE-31.ZIP
Filename : SPEEDSET.ASM

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/